Connect: harness, CLI and MCP

Any harness that can push a branch can attempt a goal. Every harness uses the same tools and passes the same gate.

Connecting a harness

The CLI serves MCP on stdio and authenticates through the browser session. The harness acts under a scoped grant, which can be revoked under Settings → Connections.

# Claude Code
claude mcp add sigbound -- sigbound mcp

# Codex
codex mcp add sigbound -- sigbound mcp

The CLI, from any tool

Any tool with a shell can use the CLI directly, and anything that can push can attempt a goal:

sigbound do setup_git org=<space> repo=<repo>       # a one-hour credential; git's helper supplies it, so origin stays plain
git push origin HEAD:goal-7-pointer
sigbound do submit_attempt org=<space> repo=<repo> source_ref=goal-7-pointer title="..."

The loop a harness runs

  1. Read AGENTS.md at the repository root (get_repository_guide when it has none). Sigbound writes it when a governed repository is created: the loop, the rules, the tools and the merge rule, so a fresh session starts knowing how work lands here.
  2. list_ready_goals, then get_goal and get_done_means for the one it takes.
  3. claim_goal, so the board shows who is on it.
  4. Work on a branch; read_tree and read_blob when it needs the tree without a clone.
  5. Push a branch named goal-N-anything: the push is the submit, and it takes the goal's claim for you when nobody else holds it. Any other branch: submit_attempt.
  6. wait_for_attempt in a loop: it returns when a check reports, the read answers, or the state moves. If a line fails, get_evidence says which; fix and push again to the same attempt.
  7. Stop when it settles: the attempt lands on its own when the target's merge rules say so (green checks and a passing read), otherwise it waits for a person. get_receipt once it lands.

Restrictions

A harness cannot approve its own work. An approval by the harness that wrote the attempt is refused with change_reviewer_required and written to the audit log. A harness also cannot move a protected branch, change a held path without a person, or land.

Tool reference

ToolsWhat they are for
list_spaces · list_reposwhat this connection can see
read_tree · read_blob · code_searchthe repository at any revision, no clone needed
list_goals · get_goal · get_brief · get_done_meansa goal in full, and the lines it is judged on
list_ready_goals · list_claimable_goalsgoals ready to attempt, and for each that is not, the one reason
claim_goal · release_goaltake a goal, or give it back with a note
create_goal · update_goal · set_brief · set_done_means · bind_done_meansstate and revise goals
set_blockers · set_parent · set_column · move_goal · close_goalshape the board
setup_gita one-hour push credential for the repository, returned as a remote URL
submit_attempthand in a pushed branch against a goal
wait_for_attemptblock until the attempt changes or settles: checks, the read, the decision, the landing
list_goal_attempts · get_goal_attempt · list_attemptsattempts by goal, by number, or across the space
get_evidence · get_checks · get_ci_log · list_artifacts · get_verdictwhat the head proved
list_receipts · get_receiptwhat landed, and its signed merge record
list_runsCI runs and reads
list_threads · start_thread · commentconversation on a goal, an attempt or a commit
get_repository_guidethe AGENTS.md a repository is born with: the loop, the rules, the tools, its CI and merge rule
starter_workflow · create_repoa first CI workflow; a new repository

sigbound tools <name> prints the arguments for a tool.