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…
Show a new owner what to try first. Voice: on \"tutorial\", \"walk me through\" or \"show me what you can do\", walk the workspace tutorial one short section at a time. AG2 Space: on an owner DM message with a line `/tutorial` (the setup app ends the first-contact message with
$ npx -y skills add sonichi/sutando --skill tutorial --agent claude-codeHow it fires
How this skill gets triggered: by you, by Claude, or both.
/tutorialContext preview
The summary Claude sees to decide when to auto-load this skill.
Show a new owner what to try first. Voice: on \"tutorial\", \"walk me through\" or \"show me what you can do\", walk the workspace tutorial one short section at a time. AG2 Space: on an owner DM message with a line `/tutorial` (the setup app ends the first-contact message with
name: tutorial description: "Show a new owner what to try first. Voice: on \"tutorial\", \"walk me through\" or \"show me what you can do\", walk the workspace tutorial one short section at a time. AG2 Space: on an owner DM message with a line `/tutorial` (the setup app ends the first-contact message with one), after the greeting, create (or refresh) one \"Getting started\" HTML page there, a short AG2 Space tour with one thing to try per part, and summon the owner to it." user-invocable: true
Two modes. Pick by where the request came from.
When the owner says "tutorial", "walk me through" or "show me what you can do" (voice or text):
1. Read `<workspace>/notes/first-time-tutorial.md`. 2. Deliver the first section as a voice-friendly summary (1–2 sentences). 3. Wait for them to try it; when they come back, deliver the next section. 4. Continue until done or they say stop.
Keep each step conversational and brief: this is spoken, not read. Say what to try and skip setup details unless asked. A section that needs an app they have not connected (email, phone, the morning briefing) gets one sentence on connecting it, not the full step.
Used when an owner message in their AG2 Space DM has a line that is exactly `/tutorial`, or the owner asks for the tutorial there. The setup app ends the automatic first-contact message with that line, so the page follows the first greeting; the owner can send `/tutorial` again at any time. Run the script below by its path: a core that cannot find skills by name still has it. The line asks for this page and nothing else.
**The greeting comes first.** Send the first-contact reply in the DM before anything here. The page is extra: if any step below fails, the greeting stands. Do not edit, retract or repeat it, and do not retry the page in the same turn.
1. Your name, never the owner's, and never a reason to stop. Use `ag2.whoami`'s `display_name` when it has one. When it is null, pass `--name auto`, which falls back in this order:
Your mxid is `$AGENT_MXID`, else the AG2 Space channel env file's, else `--agent-mxid`. 2. Tailor the prompts when you know the owner's work. You know it when either:
`I picked: Founder, Product Manager.`. These are the persona labels the owner chose at onboarding, or their slugs when the client had no labels; or
In that case write your own prompts for this owner into a temporary JSON file, one per slot: `dm`, `commons`, `teamwork`, `apps`, `import`, `finale`. Write 4–6 of them.
Pass the file as `--prompts <file>`, and pass the `I picked:` payload verbatim as `--roles "Founder, Product Manager."` (the whole line, `I picked:` included, works too). Do not map it to slugs: the script takes labels or slugs and adds a "Picked for: Founder, Product Manager" line under the heading. Without `--roles`, the saved inputs' `roles` are used (step 3). Otherwise leave both out. A missing, bad or partly bad file never fails the run: each slot without a usable prompt keeps the generic one. 3. Create or refresh the page and summon the owner to it:
python3 skills/tutorial/scripts/getting_started.py publish \
--room '<owner DM room id>' --name '<your name or auto>' --owner '<owner mxid>'Every flag is optional when the setup app saved the inputs: `<workspace>/state/onboarding/tutorial-inputs.json` holds `room` (the owner's DM), `owner`, `agent_mxid` and `roles` (the picked personas), and `publish` fills whatever the command line leaves out from it; `--name` defaults to `auto`. The file's `owner` and `roles` apply only when publishing in its own `room`. A missing or malformed file, or a field of the wrong shape, is ignored; with no `--room` and no usable saved room, the script exits 2.
You need not source any env file. `room_commons.py` is found beside this skill, else in the installed skills directory. When the environment names none of its credentials, they are read from the AG2 Space channel env file through the shared resolver (`src/channel_credentials.py`). They are passed to that process only and never printed.
`--core` defaults to `auto`: the core runtime the engine resolves (`bash scripts/sutando-config.sh core-runtime`: the launcher's `SUTANDO_CORE_RUNTIME` stamp, else `core.runtime` in config). Pass `--core claude|codex|unknown` to override it.
It prints one JSON line:
On `created` it summons the owner, so the card in the DM is the one line that carries the page: post no other message about it. On `updated` / `unchanged` it summons no one, including when it adopts a page it found by its ownership marker. The one exception is finishing a page an earlier run created but did not complete. `--summon` forces a summon, e.g. when the owner asks for the tutorial again. 4. Exit 3 (room-commons not installed) or 4 (a room-commons call failed): leave the greeting as is and say nothing about the page unless the owner asks. A failure that is a Sutando or AG2 Space defect goes to `report-feedback`.
Run it in the owner's own DM (the default, `--audience dm`). Only when the owner asks for the page in another room, publish it there with `--audience room`: the page then
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…