Files
AOS/agency-agents/skills/handoff/SKILL.md
T
Z User 136379c666 feat: zeroclaw agentic agency architecture — agents, skills, Rust crates
- 18 agent specs across Software, Support, Marketing, Cross-cutting
  (orchestrator + 7 software + 5 support + 3 cross-cutting + leads-finder)
- 8 reusable skills (handoff, pr-review, dokploy-deploy, campaign-structure,
  content-calendar, ticket-triage, license-lifecycle, invoice-draft)
- 3 JSON schemas: handoff, deliverable, approval
- Policies: autonomy levels, tool risk classification, compliance (DSGVO/GoBD/UWG)
- routing.toml: model tiers T1/T2/T3 + provider config (PII gating)
- Rust workspace (5 crates, all compile + 16 tests pass):
  - aos-mcp: tool registry + risk tagging
  - aos-policy: autonomy levels, budget enforcement, approval requests
  - aos-license: ed25519 license issue/verify (real crypto + CLI binary)
  - aos-ledger: integer-cents money math, gapless numbering, VAT, audit chain
  - aos-sync: frontmatter validator (18/18 specs pass), CLI binary
- CLAUDE.md entry point with architecture overview + roadmap
2026-10-30 13:01:03 +00:00

74 lines
3.9 KiB
Markdown

---
name: handoff
version: 1.0.0
applies_to: [orchestrator, software-lead, support-lead, ads-lead, social-lead, marketing-lead, accounting-lead, license-lead]
risk: low
---
# Structured Delegation (AgentHandoff)
## When to use
Any time one agent needs another agent to do work. There is no free-form chat
between agents — every delegation is a structured `AgentHandoff` so the task
tree stays debuggable and the costs stay aggregatable.
## Steps
1. Read the goal and the originating `task_id` (AOS-NNNN) from the parent task.
2. Identify the target department lead by routing rule (software→`software-lead`,
support→`support-lead`, ads→`ads-lead`, social→`social-lead`, marketing→
`marketing-lead`, licenses→`license-lead`, accounting→`accounting-lead`).
3. Load the target agent's spec from `agents/<dept>/<name>.md` and read its
`tools`, `forbidden`, `budget`, and `autonomy` frontmatter — the handoff must
respect every one of those, or you have the wrong agent.
4. Compose the `AgentHandoff` per `schemas/handoff.json`:
- `task_id` (the AOS id), `from`, `to`, `goal` (one business sentence),
- `inputs[]` (AOS record ids / asset refs the worker can read),
- `constraints` (budget_eur, max_tokens, deadline, autonomy override),
- `definition_of_done[]` (≥1 concrete verifiable outcome),
- `output_format` (one of: aos_deliverable, report, draft, review_verdict, data),
- `needs_approval_for[]` (every high-risk action this task may reach —
spend, publish, send, revoke, delete, deploy, migration, etc.),
- `context_refs[]` (client_id, project_id, contract_id as needed).
5. Validate the payload against `schemas/handoff.json` before dispatch. If
validation fails, fix and re-validate — never dispatch an invalid handoff.
6. Dispatch via the AOS handoff endpoint; log the dispatch as a note on the
parent task with `to`, `goal`, and the deadline.
7. Await the receiving agent's `AgentDeliverable` (`schemas/deliverable.json`).
While waiting, do nothing else on this task branch.
8. On receipt, validate the deliverable shape. Then:
- `done` → aggregate `cost` into the parent task, mark the branch complete.
- `needs_review` → route to `code-reviewer` / `reviewer` / lead as relevant.
- `needs_approval` → surface the `ApprovalRequest` to the human owner; do not
approve it yourself.
- `blocked` → read `open_questions[]`; answer from AOS context or escalate
to the human owner. Never invent answers.
9. Aggregate `cost.tokens` and `cost.eur` across all handoffs on the task. If
cumulative spend approaches the task budget cap, pause and request a
budget increase (human gate).
## Inputs
- A parent task in AOS with a clear goal and `task_id`.
- The target agent's spec file (to read constraints).
- Sufficient AOS context refs (client/project/contract) for the worker.
## Outputs
- A validated `AgentHandoff` written to AOS and linked to the parent task.
- A receipt of the resulting `AgentDeliverable`, with cost aggregated.
- A note on the parent task summarizing the delegation and its outcome.
## Guard rails / compliance
- Never bypass an approval gate surfaced by the worker — escalate, never approve
your own delegation's high-risk action.
- Never dispatch without a `definition_of_done`; an empty array is invalid.
- Never invent client decisions to unblock a worker — escalate instead.
- Every dispatch and receipt is logged to AOS; no private state between runs.
- Respect the worker's `forbidden` tools — if the task needs one, the task
belongs to a different agent.
## References
- `schemas/handoff.json` — AgentHandoff shape
- `schemas/deliverable.json` — AgentDeliverable shape (return envelope)
- `schemas/approval.json` — ApprovalRequest shape (when worker pauses)
- `policies/autonomy.md` — L0/L1/L2 and the always-human-gated list
- `agents/cross-cutting/orchestrator.md` — routing rules by department