tn:decisions-answer
Record a human answer to an open decision (TN-001, TN-002…) in decisions.md — approve, reject, or note a conditional reply that arrived by Google Chat.
Manifest
tn/tasks.yaml- Address
tn:decisions-answer— alsotn:decisions-answer- Runner
- claude-code
- Policy
- autonomous writes only inside its own workspace, no outward action
- Workspace
- countries/tn/
- Schedule
- on demand only
- Model
- sonnet
- Budget
- 20 turns · 10 minutes
- Triggerable
- yes — free text can reach it
- Notifies
- every run — 🟢 on success, 🔴 on failure
- Description (manifest)
- Record a human answer to an open decision (TN-001, TN-002…) in decisions.md — approve, reject, or note a conditional reply that arrived by Google Chat.
Cost per run
oldest left · ceiling $8.00| When | What it reported | Turns | Took | Cost | |
|---|---|---|---|---|---|
| 21/08/2026 16:19 | D-005 recorded as **rejected** in `decisions.md` and moved under `## Resolved`, quoting the reply verbatim. No python3 for the orchestrator image — the standing direction… | 6 | 50s | $0.49 | ok |
| 19/08/2026 15:16 | D-001 recorded as **resolved** — the reply read as a clear yes, so I quoted it verbatim, moved the entry under `## Resolved`, and confirmed no other open entry could plau… | 11 | 1m | $0.41 | ok |
The skill it runs
countries/tn/skills/decisions-answer/SKILL.md · 44 linesRead the skill
Record a decision answer — Tunisia
Someone answered a question Country OS asked. Your whole job is to write down what they said, accurately, and stop.
The trigger text is a human reply, in whatever words they used — TN-001 yes,
go ahead with the content, no, not this quarter, TN-003 ok but not before September. Read it, do not parse it. It arrives free-form on purpose: the
people answering are not developers, and the cost of a rigid syntax is that they
stop answering at all.
Steps
- Read
decisions.md. Identify which entry the reply concerns.- An explicit id (
TN-001) settles it. Ids are<CC>-nnnand the prefix names the register — an id from another country is not yours to record, so say so and change nothing. - Otherwise match on subject. If exactly one open entry plausibly fits, use it. If two could, do not guess — reply asking which one, and change nothing.
- An explicit id (
- Decide what the answer actually was:
- Clear yes →
resolved - Clear no →
rejected - A yes with conditions, or a "later" → keep
open, and record the condition verbatim. A conditional yes is not an approval, and recording it as one is the worst failure available to you.
- Clear yes →
- Edit the entry:
- Set
Status, and add aResolveddate when it is resolved or rejected. - Append a
**Answer (YYYY-MM-DD, <who>)** :line quoting what they said, in their words. Paraphrase loses the conditions. - Move resolved and rejected entries under
## Resolved, keeping the id.
- Set
- Never invent a resolution, and never close an entry nobody answered. If the trigger text is not an answer to anything in the register, say so and stop.
- If the answer authorises work, say which task now becomes runnable — but do not run it. Someone approving a plan has not approved this run of it.
Your final message goes back to the person as a Chat reply. Two lines: what you recorded, and what happens next. They wrote one sentence; do not send back six.