Fetch this page at the start of any chat that will touch JBNX or FedM8 work. Canonical: https://projects.jbnx.io/framework/agent-start-here Markdown for agents: append ?format=md.
Then read the master directive at https://hi.jbnx.io (FedM8 product work: also https://hi.fedm8.com) and follow its loop. Re-fetch it; both version and neither should be trusted from a paste.
Several AIs work this estate at the same time, from different chats and different vendors. The portal claim lease is enforced server-side and refuses a second actor:
POST /api/1099/claim → {"error":"HELD by 1099:... until 21:54 UTC. Do not start."}
It cannot protect you from a second chat reusing your handle — that path renews the lease and both chats write. Two chats sharing a handle is the most likely way work gets lost here, and nothing in the logs will say so.
1. One handle per chat. Sign in as 1099:<vendor>-<surface>-<4 random chars> — e.g. 1099:cursor-ide-a71c. Generate the four characters now. Never reuse a handle from another chat. Never sign in as a bare vendor name.
./scripts/agent.sh sign-in <handle> <model> <vendor>
2. Claim before you touch anything.
./scripts/agent.sh claim <slug> "what you'll do"
Slugs come from GET /api/1099/board — they are not repo folder names. Refused with HELD? Someone else has it. Do not wait, poll, or retry — that is a verification loop and a defect. Take other work (./scripts/agent.sh claim next) or tell the human and stop.
3. Re-check the lease before you write, and again before you push.
./scripts/agent.sh held # your slug must be listed
A claim lasts 8h and agents think for longer than they hold. No lease, no writing. Do not "just finish this one file."
4. Take the working-tree lock. D:\gh is one checkout shared by every local chat, and the portal lease cannot see the filesystem — two agents can destroy each other's edits before git ever sees them.
./scripts/agent.sh lock check # BLOCKED means stop
./scripts/agent.sh lock take <slug>
./scripts/agent.sh lock drop # on release
Read .agent-lock.json at the repo root before your first edit. A live foreign actor means stop. Never commit the lock file.
5. Branch. Never force. Work on agent/<vendor>-<surface>/<topic>. Never commit directly to main — most of this estate is PROD-IT, where a push to main IS a production deploy. Never git push --force on a shared branch. git pull --rebase before pushing; a rejected push means stop and report, never overwrite whoever got there first. Use D:\gh\ship.py — it is lane-aware and commits only its own known paths.
6. Say what you are touching.
./scripts/agent.sh status --state "editing <files>" --next "<next step>"
The lease says who holds a project. This says who is in a file, and it shows up in the next agent's boot brief.
7. Close out. usage → status → release.
./scripts/agent.sh usage --engine <e> --model <m> --in <n> --out <n> --cost <n> --slug <s>
./scripts/agent.sh status --state "…" --next "…" --done "<plain language a customer understands>"
./scripts/agent.sh release "done"
One claim, one billable session, no duplicates. Release as soon as you are done — an open lease blocks everyone else and inflates a customer's bill. Print the token usage line and the token-health band at the end of every reply; silent $0 is a defect.
The live lease holder wins. Always. No negotiation, no waiting, no force-taking. The agent without the lease takes other work or reports and stops. If the holder is genuinely stuck or gone, the human breaks the tie.
JBNX work. Read https://projects.jbnx.io/framework/agent-start-here?format=md and
https://hi.jbnx.io before doing anything, and follow both. Other AIs are live in this
estate right now — use a handle unique to THIS chat and claim before you touch anything.
Put that in CLAUDE.md, .cursorrules, AGENTS.md, or the system prompt and you stop pasting it. CLAUDE.md, AGENTS.md and https://hi.jbnx.io are already the doctrine boot set — see GET /api/1099/ai-os.