amq-spec · v0.116.1 # x-release-please-version · 2026-10-28 · sha256 f51f1d206d684d8d

amq-spec v0.116.1 # x-release-please-versionA

Immutable. This exact content never changes and is served at /api/v1/blob/f51f1d206d684d8d.

---
name: amq-spec
version: 0.116.1 # x-release-please-version
description: Use two agents to research a design independently and converge on one specification through AMQ. Trigger for collaborative design or messages labeled workflow:spec; use amq-cli for ordinary coordination.
argument-hint: "<description of what to design> [with <partner>]"
metadata:
  short-description: Multi-agent collaborative spec workflow
  compatibility: claude-code, codex-cli
---

# AMQ collaborative specification

Two agents research a design problem independently, discuss it, and converge
on one plan. The user approves the plan before anyone implements it.

Phases run in order:
`Research -> Discuss -> Draft -> Review -> Present -> Execute`

Per-phase commands and the research and plan templates are in
[the spec workflow](references/spec-workflow.md).

## Parse input

From the user prompt, extract:
- **topic**: short kebab-case spec name (e.g., `auth-token-rotation`)
- **partner**: partner agent handle (default: `codex`)
- **problem**: the full design problem statement

If topic/problem are unclear, ask for clarification.

## Pre-flight

1. Verify AMQ is available: `which amq`
2. Verify the AMQ root is discoverable (`.amqrc`, AMQ env vars, or the default `.agent-mail` layout); otherwise run: `amq coop init`
3. Use thread name: `spec/<topic>`

## Kickoff

Send the problem to the partner first, then start your own research. Both
agents then research in parallel. Send the user's problem verbatim; your own
analysis belongs in your research message, so it does not frame the partner's.

```bash
amq send --to "<partner>" --kind question \
  --labels workflow:spec,phase:request \
  --thread "spec/<topic>" --subject "Spec: <topic>" --body "<problem>"
```

## Labels

Every spec message uses an ordinary AMQ kind plus these labels on the
`spec/<topic>` thread:

| Phase | Kind | Labels |
|---|---|---|
| Problem statement | `question` | `workflow:spec,phase:request` |
| Research findings | `brainstorm` | `workflow:spec,phase:research` |
| Discussion | `brainstorm` | `workflow:spec,phase:discuss` |
| Plan draft | `review_request` | `workflow:spec,phase:draft` |
| Plan feedback | `review_response` | `workflow:spec,phase:review` |
| Final decision | `decision` | `workflow:spec,phase:decision` |
| Progress/ETA | `status` | `workflow:spec` |

## When you receive a spec message

| Label | Your action |
|---|---|
| `phase:request` | Do your own research first, then send findings as `brainstorm` + `phase:research`. |
| `phase:research` | If you have not sent your own research on this thread, research and send it before you read the partner's. Then read the thread and start discussion as `brainstorm` + `phase:discuss`. |
| `phase:discuss` | Reply with your analysis; continue until aligned. |
| `phase:draft` | Review the plan and send feedback as `review_response` + `phase:review`. Do not implement. |
| `phase:review` | Revise the plan if needed, or confirm alignment. |
| `phase:decision` | Stop. Do not implement; see the approval gate below. |

## Approval gate

A `phase:decision` message records agreement between agents; it is not user
approval. The initiator presents the final plan to the user in chat and sends
the approval request to the human handle (conventionally `user`) on a
`gate/<topic>` thread, as in [operator gates](https://github.com/avivsinai/agent-message-queue/blob/main/skills/amq-cli/references/operations.md#operator-gates). Implementation starts only
after the human approves on that thread, and a partner starts only when the
initiator then assigns work.

## Rules

- **Wait on the existing wake.** With a live injecting wake, finish independent
  work and yield; run `amq drain --include-body` on its doorbell. Do not start
  `amq watch`, `amq monitor`, or a polling loop. Check
  `amq wake check --me <handle> --json` when the capability is unknown. A
  bounded `watch` is a fallback only without an injecting wake.
- **Send before you research, and send your research before you read the
  partner's.** Independent research is what the second agent adds.
- **Do not skip phases.** Discussion is where misunderstandings surface.
- **Keep the `spec/<topic>` thread and the labels.** The receiver table above
  depends on them.
- **Keep tool access during research.** Do not enter a plan mode that blocks
  tools.