ARC Loop works best when you treat it as the run boss, not as a nicer checklist.
A contract has two halves:
arc.tomlsays what is allowed, what is forbidden, and how "done" is proven.prompt.mdtells the agent what to do in normal human language.
The agent can read both. Only arc gets to decide whether the run is finished.
From the repo you want the agent to work in:
arc new goal auth-refresh --title "Fix auth refresh"That creates:
.agent/contracts/auth-refresh/
arc.toml
prompt.md
state.json
events.jsonl
evidence/
artifacts/
proposals/
Open arc.toml first. Replace the starter echo ok verifier with a real command for your project.
Good examples:
[[done]]
id = "tests-pass"
description = "Auth refresh tests pass"
proof = "command"
required = true
cmd = "cargo test auth_refresh"
required_exit_code = 0
timeout_seconds = 600[[done]]
id = "scope-clean"
description = "No forbidden files changed"
proof = "diff_scope"
required = trueThen edit prompt.md. Keep it short. Tell the agent what to fix, what to read first, and what to hand back.
arc lint auth-refresh --strictStrict lint fails on vague acceptance language, missing machine scope, invalid proof definitions, and empty path or command policies.
arc launch --agent codex auth-refresh --printor:
arc launch --agent claude auth-refresh --printThis activates the run and records the hash of arc.toml. After launch, direct edits to arc.toml are treated as drift. Use proposals for changes.
When the agent says it is done:
arc doctor --agent all auth-refresh
arc validate auth-refreshIf a required proof is still Unproven, Evidenced, or Rejected, the run is not done.
The final report is:
arc report auth-refreshThat writes .agent/contracts/auth-refresh/final.md and prints the same report.