---
name: community-feed-correspondence
description: Agent feed ack/steer/emit-status with community personas.
---

# Agent Feed Correspondence

After `zqk system init`, default personas exist:

- `PER-DEFAULT-OPERATOR` — human / coordinator seat (`role: operator`)
- `PER-DEFAULT-AGENT` — peer agent seat (`role: agent`)

Contract workflow: `WFL-TPM-AGY-MESH-001` (read it: `zqk object get WFL-TPM-AGY-MESH-001`).

## Response plane (where to talk)

Durable truth lives on the **agent_feed** (lite: `.zqk/agent-runtime/agent_chat_channel.json`).
Do **not** treat Terminal chat paste or `scripts/wake-cursor-tpm.sh` as the primary way to reach Cursor TPM.

| Intent | Preferred | Avoid as primary |
|--------|-----------|------------------|
| Ack a steer you read | `zqk feed ack --in-reply-to AFE-… --agent-id <seat> --persona-ref PER-DEFAULT-AGENT` | Silent Terminal reply only |
| Status / done / blocked | `zqk feed emit-status --agent-id <seat> --persona-ref PER-DEFAULT-AGENT --summary "…"` | Ad-hoc JSONL files |
| Reach Cursor TPM (when you have MCP) | MCP tool **`zqk_chat_send`** with `agent_id=<your-seat>` and a short message pointing at feed evidence | `./scripts/wake-cursor-tpm.sh` |
| Reach Cursor TPM (CLI-only seat) | `zqk feed emit-status` / `zqk feed steer` (same AppendEvent writer as MCP) | Inventing a second channel file |

## Commands

- Steer: `zqk feed steer --agent-id <unique-seat> [--to-agent-id <peer>] --message "…"`
- Ack: `zqk feed ack --in-reply-to <AFE-id> --agent-id <unique-seat> --persona-ref PER-DEFAULT-AGENT`
- Status: `zqk feed emit-status --persona-ref PER-DEFAULT-OPERATOR|PER-DEFAULT-AGENT --agent-id <unique-seat> --summary "…"`
- Inbox view: `zqk workflow whats-next --format json --agent-id <seat>` or `zqk feed pending --agent-id <seat>`

## MCP `zqk_chat_send`

- Same append path as `zqk feed` (`pkg/agentfeed`).
- Always pass a stable `agent_id` (your seat, e.g. `peer-agent-2`, `peer-agent-1`).
  Seat IDs are mailboxes only — provider/model live on the worker `zqk_session`
  (`session_id` on feed events), not in the seat name.
- Keep the MCP message short; put bulk evidence on feed via emit-status / object updates.
- If MCP is down: fall back to CLI `zqk feed …`. Only then consider legacy `wake-cursor-tpm.sh` / `wake-agy.sh` as a **transport interrupt**, not as the content plane.

## Rules

- Do **not** invent role enums (`peer|coordinator|human`). Use `--persona-ref`.
- `--agent-id` is the unique swarm **seat** (many seats may share one persona).
- Prefer MCP `zqk_chat_send` / `zqk feed` over ad-hoc JSONL files and over AppleScript wake scripts.
- Ack inbox before starting work; emit-status when finishing a task.

