live · mainnetoc · docs
specs · api · guides
docs / quickstart

Fleet quickstart

Five-minute path from never-heard-of-it to first stamped action receipt landing in your dashboard.

1. Sign in

Open fleet.ochk.io and click sign in. The button routes to the family auth host at ochk.io/signin where you authenticate with a BIP-322 signature from any compatible wallet (UniSat, Xverse, Leather, OKX, Phantom, or paste-in). On success the auth host issues a cross-subdomain oc_session cookie and bounces you back tothe fleet dashboard.

No password, no email. Your Bitcoin address is your identity. The auth host stores nothing about you that isn't on-chain anyway.

2. Bootstrap your project (automatic)

The first time you land on /dashboard after sign-in, the OnboardingBoundary auto-creates a default project named <your-addr-prefix>-default. You'll see a transient "first sign-in · bootstrapping your default project" banner; once it clears you're on a real Postgres-backed tenant.

You can rename the project at /settings § 01 later.

3. Register a delegation (wallet-signed, in your browser)

Click /agents/new in the sidebar. The form asks for:

FieldWhat
agent addressBitcoin address the agent will sign actions with. Different from the principal — that's the point of delegation.
scopesOne or more scope strings, e.g. mcp:invoke(server=https://mcp.example.com,tool=invoice.create). The agent can only sign actions whose scope_exercised is a sub-scope of one of these.
expires_atWhen the delegation stops being valid. Default 30 days.
bond_satsOptional OC Pledge stake. Skip for v1.

Click sign delegation in wallet. Your wallet pops up showing the 64-hex envelope id; sign it; the envelope is POSTed to /api/delegations. Fleet:

  • recomputes the id from canonical inputs and rejects on mismatch (tamper defense)
  • requires principal === session.addr (forgery defense)
  • persists the row, fans out to Nostr kind 30083, submits to OC Stamp
  • triggers any subscribed webhook with event_type: 'delegation.registered'

The agent table on /agents now shows your new delegation.

4. Wire your LLM tool calls

Pick the adapter for your framework — install it, supply your agent keypair + the delegation envelope + a fleet API token, and every tool call gets a stamped receipt automatically.

// Anthropic Tool Use
import { invokeWithStampAndPost } from '@orangecheck/agent-anthropic';

const { result, action, posted } = await invokeWithStampAndPost({
    agent: agentSigner, // your @orangecheck/agent-signer ref
    delegation: signedDelegation,
    toolUse: claudeToolUseBlock,
    call: (toolUse) => myInvoiceCreateImpl(toolUse.input),
    fleet: {
        apiToken: process.env.OC_TOKEN!, // ock_<64-hex>
        projectId: process.env.OC_PROJECT_ID!,
    },
});

// `result` is whatever your tool returned.
// `action` is the BIP-322-signed canonical envelope.
// `posted` is { id, project_id, delegation_id } once fleet accepts it.

The same fleet: { apiToken, projectId } knob works on @orangecheck/agent-openai, @orangecheck/agent-vercel, @orangecheck/agent-langgraph, and @orangecheck/agent-mcp.

Get the API token from /settings § 03 · API tokens. It's returned once at create — store it in your CI's secrets manager immediately.

5. Watch the receipts arrive

Go to /audit. Every accepted action shows up as a row with:

  • the envelope id (sha256 of the canonical inputs)
  • the scope_exercised
  • the content_hash (sha256 of the canonicalized tool call)
  • OTS state (pending until the OC Stamp pipeline anchors into a Bitcoin block, then confirmed with the block height)
  • the Nostr event id (once relay-published)

Drill into /agents/<id> to see receipts filtered to that single delegation, or hit export signed bundle to download the full project bundle as NDJSON / JSON / CSV.

You're done

That's the whole loop. Real delegation envelope, real action envelopes, real Bitcoin anchor — verifiable offline against @orangecheck/agent-core, no fleet-side trust required.

Where to go next: