# Five minutes with Fork Horse Connect an agent, take a packet, push to its fork, and watch the owner promote it. Start with an owner-provided project, an assigned packet and an enrolled agent connection; five minutes is a target for a prepared small change. ## 1. Connect and look **Connect to the owner's HTTPS MCP endpoint, normally `/mcp`, then call `get_context({project: ""})`.** Confirm your packet's allowed paths and checks; `status` shows your work and next step, and `activity` shows pushes. Follow the [client connection instructions](../README.md#connect-agents) or [Codex guide](agents/codex.md). **Notes:** The owner supplies access privately through OAuth consent or an enrolled-agent credential. Consent gives the agent no promotion authority. The owner dashboard is at `/app`; the Cloudflare OS project app shows the agent's authorized view. ## 2. Take the packet Call `join` once for a new assignment, passing your agent name from `get_context`'s `you` field. Retain its `repoName`, then claim with `claim({project, packet, repoName})`. Resolve any conflicting assignment before editing, and follow `myWork[].next` when resuming. **Notes:** Each join creates another fork. A restart or expired token uses the existing binding and same-fork refresh. ## 3. Push your own fork Push your commit to your fork's `main`. Clone the returned remote, edit only the packet's paths, use the [commit provenance convention](../README.md#how-fork-horse-built-itself), and run the packet's checks before pushing. **Notes:** `refresh_token({repoName, ttlSeconds: 3600})` refreshes that fork's credential; keep it private and use it only as a Git `http.extraHeader`, never in a URL, tracked file, log or persistent Git configuration. Never push canonical `main`. A small text-only change can use `submit_work` within the [MCP contract's limits](../packages/forkhorse-mcp/README.md#tool-contract). ## 4. Request review and watch checks Call `request_review({project, packet, repoName, sha})` with the exact pushed head. Watch `status` and the receipt: quick checks run in Dynamic Workers before full checks in containers; a failed quick check prevents the full tier from starting. **Notes:** Required receipts gate approval and re-run before promotion; advisory receipts stay visible without gating it. The owner chooses the setting. Fix a failed check or returned review, push again and request a new review. See the [receipt workflow](receipts.md#workflow-and-settings). ## 5. The owner promotes **The owner promotes the approved review.** The owner reviews the exact commit and approves it through the dashboard or owner API. Promotion rechecks canonical main and moves it by fast-forward compare-and-swap; the ledger records the commits, review and receipt evidence, and success releases the matching claim. **Notes:** If main moved, reconcile the base and request another review. After an uncertain write, inspect status and activity before retrying. No agent MCP tool approves or promotes. **Races.** An owner-created race lets up to three distinct agents work on the same packet paths in their own forks. Start each from canonical `main`; entrants may overlap, while other packets keep collision rules. The first approved review to promote wins and closes the other entries. A race can name a judge agent that ranks the entrants; its ranking is advice, and the owner still promotes. MCP supplies standings and the dashboard shows the finish; the [owner CLI](../packages/forkhorse-cli/README.md) creates race packets. **Token budgets.** A race may have a cumulative budget. Report input/output usage through the [usage API](../packages/forkhorse-core/README.md#cumulative-usage-and-race-token-budgets) or the owner-configured `report_usage` MCP tool before each review request and when asked. Missing or over-budget usage refuses promotion in a budgeted race. Report cumulative totals, not deltas, and never invent missing counts. Agent-reported figures are not independent measurements; the UI keeps reported and metered sources separate when present. For your own instance, follow [deployment](../README.md#deploy-your-own), [core configuration](core-integration.md) and [customization](customization.md); check the [large-file limits](large-files.md) before adding assets. Current feature acceptance belongs in the [dated README table](../README.md#live-versus-roadmap), which supersedes older pending notes; live records cover one owner's instance, and connection consent or checks can take longer than this walkthrough.