## Session Protocol Dev Hub (State Hub API): http://127.0.0.1:8000 MCP server name in `~/.claude.json`: `dev-hub` **Step 1 — Orient** Read the offline-safe brief first — it works without a live hub connection: ```bash cat .custodian-brief.md ``` Then call the MCP tool for richer cross-domain context when MCP tools are exposed: ``` get_domain_summary("{DOMAIN}") ``` If MCP tools are unavailable in the current agent session, use the REST API: ```bash curl -s "http://127.0.0.1:8000/state/summary" | python3 -m json.tool ``` If the hub is offline: `cd ~/state-hub && make api` **Step 2 — Check inbox** With MCP tools: ``` get_messages(to_agent="{REPO_SLUG}", unread_only=True) ``` Mark read with `mark_message_read(message_id)`. Reply or act on coordination requests before proceeding. Without MCP tools: ```bash curl -s "http://127.0.0.1:8000/messages/?to_agent={REPO_SLUG}&unread_only=true" \ | python3 -m json.tool curl -s -X PATCH "http://127.0.0.1:8000/messages//read" \ -H "Content-Type: application/json" -d '{}' ``` **Step 3 — Scan workplans** ```bash ls workplans/ ``` For each file with `status: ready`, `active`, or `blocked`, note pending `wait`/`todo`/`progress` tasks. **Step 4 — Present brief** 1. **Active workplans** for `{DOMAIN}` — title, task counts, blocking decisions 2. **Pending tasks** from `workplans/` + any `[repo:{REPO_SLUG}]` hub tasks 3. **Goal guidance** — if `goal_guidance` in summary: - `needs_workplan`: surface as top action — *"Repo goal '{title}' has no workplan yet"* - `alignment_warnings`: flag if active work is not aligned with current goal 4. **Suggested next action** — highest-priority open item 5. **SBOM status** — flag if `last_sbom_at` is unset for this repo If no workplans: follow First Session Protocol (`first-session.md`). **During work:** `record_decision()` · `add_progress_event()` · `resolve_decision()` > State Hub is a *read model*. **Never register workplans or tasks by hand** > (`create_workplan`, `create_task`) — write the workplan file in `workplans/` > and run `fix-consistency`; C-06 registers the workplan and tasks and writes > IDs back into the file. Manual registration creates duplicates when > fix-consistency runs. Work structure belongs in repo files (ADR-001). > > Legacy: `create_workstream` and `/workstreams/` remain as metered aliases — > see `workplan-convention.md` (compatibility footnote). **Session close:** 1. Update workplan/task statuses in repo files. 2. If marking a workplan **finished**: hand off residuals as **live work records** first (intake with `origin: residual` + `origin_ref: `, or a child workplan / decision / engagement). Do not leave actionable leftovers only as prose or in `SCOPE.md`. See work-record-types § Residuals. 3. Log progress (below). 4. `statehub fix-consistency` when workplan/queue files changed. With MCP tools: ``` add_progress_event(summary="...", topic_id="{TOPIC_ID}", workplan_id="") ``` Without MCP tools: ```bash curl -s -X POST http://127.0.0.1:8000/progress/ \ -H "Content-Type: application/json" \ -d '{"topic_id":"{TOPIC_ID}","workplan_id":"","event_type":"note","summary":"what changed","author":"codex"}' ``` If workplan files were modified, ensure the local copy is up to date first, then sync from the repo checkout: ```bash git pull --ff-only statehub fix-consistency ``` For repos where implementation runs on a remote machine (e.g. CoulombCore), use the pull-before-fix mode from any shell with the State Hub CLI: ```bash statehub fix-consistency --repo {REPO_SLUG} --remote ``` **C-15** (DB task ahead of file) is normal in multi-machine workflows — writeback will sync the file to match DB. **C-16** (repo behind remote) blocks all writes until you pull — intentional to prevent clobbering remote progress.