ag2space-voice
AG2 Space voice surface — binds the room the AG2 Space client announces to the voice session's origin, so work delegated by voice…
Live-agent runner that tells a requester, once, that their AG2 Space task was received when the core has not answered it by its first-ack deadline, and tells the owner once per outage when only the standby watcher is reading the inbox. Off by default (STATUS_ACK_ENABLED). Not
$ npx -y skills add sonichi/sutando --skill status-ack --agent claude-codeHow it fires
How this skill gets triggered: by you, by Claude, or both.
/status-ackContext preview
The summary Claude sees to decide when to auto-load this skill.
Live-agent runner that tells a requester, once, that their AG2 Space task was received when the core has not answered it by its first-ack deadline, and tells the owner once per outage when only the standby watcher is reading the inbox. Off by default (STATUS_ACK_ENABLED). Not
name: status-ack description: Live-agent runner that tells a requester, once, that their AG2 Space task was received when no session has picked it up and no activity card or progress notice shows it by its first-ack deadline, and tells the owner once per outage when only the standby watcher is reading the inbox. Off by default (STATUS_ACK_ENABLED). Not slash-invoked.
The core cannot say "received" while it is deep in a long turn or while its session watcher is gone. This runner works outside the core's turn. On each pass it decides, per queued task, whether the requester is owed one status line. The decision comes from `src/status_ack_policy.py` and is made from observed facts only.
It speaks only for a task **no session has picked up** (no RUNNING phase, no worker holding it) that shows **no activity card** (no row projected or owed in `state/activity/<task>.json`) and **no sent progress notice** (task-progress records `progress:<task>:sent` after a send; its first-notify marker is bookkeeping only). The predicate is `src/ack_overlap.py`. The gateway asks it again just before it sends the ack, for that ack's own outbox item only, so a pickup after publication withdraws the line and nothing else. Anything else is the card's and the progress notifier's to report, so this runner stays silent. A task a session claimed and then went quiet on is out of scope here. The second thing it does is the owner DM when the watcher is down.
which is measured from intake and set per priority. The text is one of the policy's fixed templates. There is no estimate and no invented progress.
task envelope (`envelope_hmac` must verify). If the envelope does not verify, the source is not Matrix, or the room or thread cannot be verified, nothing is sent. There is no fallback room and no DM. The line goes out as `results/proactive-about-<task>--<ts>.to-ag2space.txt`. The gateway's proactive outbox lane threads it on the task's message and checks the task again just before the send. This skill does not post, retry or claim delivery itself.
`src/ack_claim.py`, and whichever claims it first is the only one that speaks. The core's first `notify.py --task-file` call for a task is its initial ack. Its later calls are progress and are never suppressed, and neither is the task's real answer.
result, the activity phase and any pending cancel. If any of them has changed, it releases its claim and publishes nothing.
DELIVERED with an event id. A send withdrawn at dispatch releases the claim. Any other park leaves the claim `unknown`, and that ack is never retried.
`STATUS_ACK_WATCHER_DOWN_AFTER_S` seconds, the owner gets one DM through the proactive path saying so and naming the remedy (restart the core). This happens once per outage. The outage ends when a session watcher holds the inbox again. Room lines say "the owner has been told" only after that DM has a delivery receipt.
| Key | Default | Meaning | |---|---|---| | `STATUS_ACK_ENABLED` | `0` | Off: a pass reads nothing and writes nothing. Turning it on is the owner's decision. | | `STATUS_ACK_FIRST_ACK_DEADLINE_URGENT_S` / `_NORMAL_S` / `_LOW_S` | 30 / 120 / 600 | Seconds from intake to the first ack, by task priority | | `STATUS_ACK_POLL_S` | 15 | Seconds between passes with `--loop` | | `STATUS_ACK_WATCHER_DOWN_AFTER_S` | 120 | How long only a standby must hold the inbox before the owner alert | | `STATUS_ACK_PYTHON` | empty | The interpreter sparrowd runs the hosted loop with. Empty: sparrowd skips the worker. |
The manifest declares a `supervised_worker` (`scripts/status_ack_worker.py`), so `sparrowd` hosts the loop beside the gateway bridge (`skills/MANIFEST.md`). Nothing runs until both are set: `STATUS_ACK_PYTHON` names an interpreter, which sparrowd reads when it starts, and `STATUS_ACK_ENABLED` is true. While off, the loop reads and writes nothing and keeps waiting.
python3 skills/status-ack/scripts/status_ack.py --workspace <workspace> [--loop]
The runner is meant for the always-up live agent. It is not a core-session step, and guest or one-shot agents never run it. Each pass prints one JSON report: what it spoke, what it withdrew, what it skipped and why, and which claims it settled.
runs no pass while the first holds it.
whose file was never published (not in `results/`, not claimed by the gateway, not in `results/archive/`, no outbox receipt), becomes `unknown`: it is never released and never re-announced. A claim whose file was published is left for the receipt to settle; a claim a live process holds is left alone. Confirmed and unknown claims are never touched.
create-only in `state/status-ack/first-seen/`, so a restart neither restarts its deadline nor loses it. Tasks that arrived while the runner was down get at most one line each.
alerts of outages that ended, are pruned after seven days; first-seen is also capped. A queued task keeps every
My AI Stand — Realtime by Day, Rewriting Itself by Night. Summon my AI superpower. Voice, vision, screen, meetings, calls when I'm engaged. Learns my patterns, ships its own code when I'm not. Runs across my Macs, interacts with people & their Stands.
AG2 Space voice surface — binds the room the AG2 Space client announces to the voice session's origin, so work delegated by voice…
Streams what the agent is doing into the room, as rows the desktop client renders in an **events drawer** above the composer…
Local Agent Registry — a standalone, dependency-free service that tracks running Claude Code (and other) agent instances. Agents…
For an all-room analysis sweep, use the tested window collector and coverage contract in…
Deterministic final-answer normalizer — a last-step pass for any task that ends in a *precise* answer (a number, a short string,…
Transcribes audio files and voice notes to text via Gemini 2.5-flash. Integrates with Slack, Discord, and Telegram bridges so…