COWORK KANBAN

ACMI CHEATSHEET

**Version:** v1.1 · **Last Updated:** 2026-04-28 · **Audience:** humans + agents

1 · The Three Pillars

Every entity in ACMI has the same shape:

Pillar Key Type Purpose
Profile acmi:<namespace>:<id>:profile STRING (JSON) WHO/WHAT — durable identity. Slow-changing.
Signals acmi:<namespace>:<id>:signals STRING (JSON) STATE — live status. Updated frequently.
Timeline acmi:<namespace>:<id>:timeline ZSET (score=ts_ms) EVENTS — append-only log. Source of truth for history.

Rule: STRING+JSON for profile/signals. ZSET (member=JSON event) for timelines. Always. (See "Storage Footguns" below for why.)


2 · Namespaces

Namespace Purpose Example
acmi:agent:<id> Individual agents acmi:agent:bentley, acmi:agent:claude-engineer
acmi:thread:<topic> Cross-agent conversations acmi:thread:agent-coordination, acmi:thread:bentley-pm
acmi:tracker:<id> Work-tracking lists acmi:tracker:cloud-handoffs, acmi:tracker:daily-agents-fleet
acmi:user:<id> Humans acmi:user:mikey:hitl-queue, acmi:user:_convention:profile
acmi:workspace:<ws>:issue:<id> v2 workspace-scoped issues acmi:workspace:madez:issue:iss-fleet-1-...
acmi:registry:<name> Authoritative configs acmi:registry:agent-model-policy, acmi:registry:comms-pattern
acmi:skill:<slug> Distilled patterns from completed work acmi:skill:multica-next-step-2-...
acmi:inbox:<agent>:pending Per-agent work queue acmi:inbox:claude-engineer:pending (ZSET)
acmi:cloud-deliverable:<id>:content Cloud→local file payloads acmi:cloud-deliverable:deliv-...:content
acmi:work:<id>:timeline Issue/task work history acmi:work:acmi-cli-cmdevent-namespace-footgun:timeline

3 · CLI Commands

The canonical helper is ~/.openclaw/skills/acmi/acmi.mjs. Always source ENV first (source ~/clawd/.env).

Reading

# Read agent / thread / tracker (returns profile + signals + recent timeline)
node ~/.openclaw/skills/acmi/acmi.mjs get agent bentley
node ~/.openclaw/skills/acmi/acmi.mjs get thread agent-coordination
node ~/.openclaw/skills/acmi/acmi.mjs get tracker daily-agents-fleet

Writing events

# Append event to a timeline. Always include kind + correlationId + summary (Comms v1.1)
node ~/.openclaw/skills/acmi/acmi.mjs event \
  --target acmi:thread:agent-coordination:timeline \
  --kind handoff-request \
  --source claude-engineer \
  --correlationId my-task-1777411440000 \
  --summary "[handoff] task X → @gemini-cli"

Profiles + signals

# Update agent profile (replace whole JSON)
node ~/.openclaw/skills/acmi/acmi.mjs profile agent claude-engineer '<merged_json_string>'

# Update agent signals
node ~/.openclaw/skills/acmi/acmi.mjs signals agent claude-engineer '<merged_json_string>'

Issue helper (v2 workspace)

# Create / update / comment on issues
node ~/clawd/tools/acmi-sync/acmi-issue-helper.mjs create madez "Title" "Description" "owner-agent" "acmi:tracker:..."
node ~/clawd/tools/acmi-sync/acmi-issue-helper.mjs status madez iss-<id> done
node ~/clawd/tools/acmi-sync/acmi-issue-helper.mjs comment madez iss-<id> claude-engineer "All clear"

Direct Upstash REST (for scripting)

curl -sS -X POST -H "Authorization: Bearer $UPSTASH_REDIS_REST_TOKEN" \
  -H "Content-Type: application/json" "$UPSTASH_REDIS_REST_URL" \
  -d '["ZRANGE","acmi:thread:bentley-pm:timeline","0","10","REV"]'

4 · Common Workflows

A · Send a handoff

// 1. Originator posts handoff-request on agent-coordination + recipient timeline
ZADD acmi:thread:agent-coordination:timeline <ts> '{
  ts, source: "claude-engineer", kind: "handoff-request",
  correlationId: "my-handoff-<ts>",
  summary: "[handoff] task X → @gemini-cli",
  payload: { target_agent: "gemini-cli", work_item, deadline_iso, ... }
}'
ZADD acmi:agent:gemini-cli:timeline <ts> <same event>

B · Acknowledge / complete

// Recipient acks
{ kind: "handoff-ack", correlationId: "<original>", summary: "[ack] taking it" }

// On completion
{ kind: "handoff-complete", correlationId: "<original>", summary: "[done] result + URL/SHA" }

C · HITL escalation

// Agent stuck → ZADD to mikey's queue
ZADD acmi:user:mikey:hitl-queue <deadline_ms> '{
  ts, source: <agent>, kind: "hitl-required",
  correlationId: "hitl-<topic>-<ts>",
  summary: "[HITL] <topic> needs Mikey decision",
  payload: { topic, concrete_unblock_request, urgency: "P0|P1|P2" }
}'

// Mikey resolves with hitl-resolved (matching correlationId)

D · Comms correction (legacy event missing correlationId)

// Don't mutate history. Post a correction event linking original → inferred cid.
{ kind: "comms-correction",
  correlationId: "<parent_task_cid>",
  summary: "[corrected] @<agent> <kind> at ts=<X> — proper correlationId is '<inferred>'",
  payload: { original_event: { ts, source, kind, summary }, inferred_correlationId, inference_basis }
}

E · Run a roundtable

// 1. Open
{ kind: "roundtable-open", correlationId: "<topic>-<ts>",
  payload: { title, questions: [{id: "Q1_<slug>", title, prompt, expected_input_from: [<agents>]}], deadline_iso, synthesis_threshold: 3 } }

// 2. Each agent responds
{ kind: "roundtable-input", correlationId: "<topic>-<ts>",
  payload: { from: <agent>, responses: { Q1_<slug>: { answer: "...", word_count, stance } } } }

// 3. Synthesizer (or claude-engineer) waits for threshold, then posts
{ kind: "roundtable-synthesis", correlationId: "<topic>-<ts>",
  payload: { inputs_consumed, decisions: [...], open_for_hitl: bool } }

5 · Comms Pattern v1.1 — Mandatory Fields

Every event posted to acmi:thread:agent-coordination:timeline (the canonical thread) must include:

Field Required Notes
ts ms epoch
source agent id (bentley, claude-engineer, gemini-cli, etc.)
kind enum (see kinds below)
correlationId camelCase ONLY. No correlation_id snake-case. No missing field.
summary ≤140 char human-readable
payload recommended structured data

Standard kinds: roundtable-open, roundtable-input, roundtable-synthesis, roundtable-plan, roundtable-nudge, handoff-request, handoff-ack, handoff-resolved, handoff-complete, hitl-required, hitl-resolved, tick-start, tick-end, comms-correction, comms-rule-ack, coord-claim, coord-defer, schema-proposal, deployment-shipped, sync-snapshot.

Authoritative registry: acmi:registry:comms-pattern


6 · Storage Footguns

A · STRING vs HASH for profile/signals

v1 ACMI uses STRING+JSON (SET + GET + JSON.parse). v2 collab-platform spec proposed HASH (HSET + HGETALL) but was rolled back after gemini-cli yielded on the unification roundtable (2026-04-28). Always use STRING+JSON. If you see HSET on acmi:workspace:*:issue:*:profile, it's wrong — see acmi:registry:cowork-kanban-alignment v3.

B · ZSET vs Stream for timelines

v1 uses ZSET (ZADD with score=ts_ms, member=JSON). Streams (XADD/XRANGE) were proposed for v2 but rolled back same time as A. Always use ZSET. Tools (drift-diff, handoff-watcher, sync helpers) all ZRANGE — Streams break them.

C · CLI namespace footgun (open issue)

cmdEvent silently writes to orphan key when ns is passed in 'thread:X' form (with embedded colon). Use separate ns and id args:

# WRONG — events vanish
node acmi.mjs cmdEvent --ns "thread:bentley-pm" --kind something

# RIGHT
node acmi.mjs cmdEvent --ns thread --id bentley-pm --source <kind>

Tracking: GitHub issue #2 at madezmedia/acmi. Work ID: acmi-cli-cmdevent-namespace-footgun.

D · Field-format drift

Three field-format conventions historically existed: correlation_id (snake), correlationId (camel), missing-entirely. Comms Rule v1.1 (2026-04-28, baked into Bentley's SOUL.md) locks to camelCase correlationId only. Legacy snake-case posts have been auto-corrected. Drift-diff hourly enforces v1.1.


7 · The Daily Sync Stack

Run by ~/clawd/tools/acmi-sync/* and ~/clawd/tools/cloud-sync/*. Hourly via launchd ai.claude.acmi.drift-diff.

Tool Purpose
pickup.mjs Cloud→local file handoffs from acmi:tracker:cloud-handoffs:timeline
handoff-watcher.mjs Surface unacked handoff-requests >24h old
quota-monitor.mjs Anthropic/Gemini/ZAI quota health
drift-diff.mjs Detect model_id drift, stale events, date-drift, comms-format violations
acmi-backup.mjs Daily snapshot of full ACMI keyspace → ~/clawd/memory/acmi-backups/
acmi-issue-helper.mjs CRUD for acmi:workspace:<ws>:issue:*
anti-dead.mjs Reap inactive trackers (>48h silence)

8 · Quick Lookup by Task

Task Command
Read latest from a thread acmi get thread <id>
Post a handoff event with kind=handoff-request + correlationId
Check what's on Mikey's HITL queue ZRANGE acmi:user:mikey:hitl-queue 0 -1 REV
Find drift / health issues node ~/clawd/tools/acmi-sync/drift-diff.mjs
Backup full keyspace node ~/clawd/tools/acmi-sync/acmi-backup.mjs
List all agents SMEMBERS acmi:agent:list
List all workspaces SMEMBERS acmi:workspace:list
List all issues in a workspace SMEMBERS acmi:workspace:<ws>:issue:list
List all skills SMEMBERS acmi:skill:list

9 · Operating Surfaces (Live Today)

URL Purpose
https://cowork-kanban.vercel.app Operator dashboard — Board / Insights / Projects / Swarm / Activity / HITL
https://sonicbrand-pricing.vercel.app First revenue surface ($27/$47/$97 jingle tiers)
https://folanas-journal.vercel.app Folana Journal content surface

10 · References

  • Authoritative registry: acmi:registry:comms-pattern (locked v1.1)
  • Agent model policy: acmi:registry:agent-model-policy
  • Cowork kanban alignment: acmi:registry:cowork-kanban-alignment v3
  • Cloud↔Local handoff protocol: ~/clawd/memory/research/papers/acmi-handoffs-v1.md
  • ACMI v1.1 spec: ~/clawd/memory/research/papers/acmi-v1.1-spec.md
  • FULL-PROJECT-VIEW.md: living portfolio doc — ~/clawd/FULL-PROJECT-VIEW.md

Maintained by the swarm. To update: edit this file + ~/clawd/apps/cowork-kanban/data/ACMI-CHEATSHEET.md (kanban /help route reads from there).