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.
$ npx -y skills add sonichi/sutando --agent claude-code
Run the curl in your terminal, the rest in Claude Code.
Repo: sonichi/sutando
What's inside
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.
It belongs entirely to you.
🛠 Open source: this repo — clone, build, run locally on your own Mac. 🍎 Native app preview: sutando.ai — packaged Mac app, request access.
No pay-per-token core API key required. Sutando runs through the Claude Code or Codex CLI session you select, with optional service credentials only for the capabilities you enable.
Named after Stands from JoJo's Bizarre Adventure — a personal spirit that fights on your behalf. Like a Stand, Sutando starts unnamed. As it learns your style and earns real capabilities, it names itself and generates its own avatar — your Stand, unique to you.
https://github.com/user-attachments/assets/a86ec34e-3b26-4011-824c-d2d124753c25
24 tool calls. 6 tasks. 7 minutes. All by voice from a phone. Demo by @liususan091219. Watch on YouTube (full quality) →
⭐ If Sutando is useful to you, star this repo — it's how other people find it.
![]() | ![]() | ![]() |
|---|---|---|
| 🤖 The AI agent that presented live | 📺 ep.007 — 50 days. 600+ PRs. #1 trending | 📺 Vision talk at UC Berkeley |
@sutando-ai channel · Sutando WIRE playlist
Talk while you work. You're looking at a doc. You say "make this paragraph shorter." Sutando sees your screen, rewrites the paragraph, and replaces the original text directly.
Join meetings for you. "Join my 2pm call." It reads your calendar and joins — Zoom via the desktop app, Google Meet via the browser — with computer audio. It can also dial in by phone when you ask. It takes screenshots to identify participants, does live research when someone asks a question, and writes you a summary when the call ends. Meeting access is gated — it messages you on Telegram asking for approval before enabling task delegation.
Make calls for you. "Call her and leave a message." Sutando looks up the contact, dials the number, has the conversation, and reports back — while you keep working. It can even make concurrent calls while in a meeting.
Work from your phone. Call Sutando and say "summon." It opens Zoom with screen sharing — join from your phone to see its screen in real time. "What's on my screen?" — it takes a screenshot and tells you. "Fix the typo in that file" — done. You scroll, switch apps, navigate — all by voice while walking around.
Get better on its own. When you're not giving it tasks, Sutando runs an autonomous build loop — it monitors its own health, detects patterns in how you work, discovers new skills, and builds missing capabilities. Most of Sutando's code was written this way. It learns from your corrections and adapts over time.
Remember everything — and act on it. You have an idea while walking. Say it out loud. Sutando captures it, tags it, and saves it as a searchable note. If there's something actionable, it starts working on it right away or queues it for the next free cycle.
Reach you anywhere. Voice, Zoom, Google Meet, Telegram, Discord (text + voice channel), web, phone, or email — same agent, same memory, any channel.
Scale across machines. Plug in a second Mac and Sutando sets it up — the original agent opens a Discord channel, sends setup commands, and migrates services. The new machine handles phone calls 24/7 while your laptop stays portable. No migration scripts needed — the two agents coordinate the handoff themselves.
This is an early-stage project. Honest status:
| Count | Details | |
|---|---|---|
| Verified working | 30 | Voice, screen capture, notes, calendar, reminders, contacts, browser, phone calls, meeting dial-in, task delegation, pattern detection, health check, dashboard, Telegram, Discord, multi-machine migration, onboarding tutorial, and more |
| Needs external setup | 3 | Twilio (phone), Telegram bot, Discord bot |
We're looking for contributors to help test and harden these capabilities. If you try something and it breaks, open an issue.
See Sutando architecture boundaries for the normative definitions of core, adapters, apps, skills, tooling, and workspace state.
You ──voice (browser)──► Voice agent ─────────┐
│ (Gemini Live, │
│ WS on :9900) ├──► inline tools (instant,
│ │ in-process: describe_screen,
├──phone (Twilio)─────► Conversation server ─┤ get_current_time, hang_up,
│ (Gemini Live, │ dtmf, ...)
│ WS on :3100) │
│ └──┐
│ │ file bridge .──────▶────────.
├──telegram──────────► Telegram bridge ─────────┼── tasks/ ─────────► | |
│ │ | Core |
│ │ | agent ↻ |
└──discord───────────► Discord bridge ──────────┘ | |
`──────◀────────'
│
▼
uses anything:
email, calendar,
browser, files,
phone, reminders...
◄── results/ ◄────────────────────────────────┘
(spoken via voice/phone,
text via Telegram/Discord)
↻ = a cron job fires the `/proactive-loop` skill every 15 minutes
(`*/15 * * * *` in the per-host `crons.json`). The skill
runs as a 10-minute pass that keeps a persistent watcher on
`tasks/` via Claude Code's `Monitor` tool — pending tasks are
processed the moment they arrive, not just on the cron tick.
Each pass also runs health checks and picks the next build-log
item autonomously.
Four processes work together:
com.sutando.web-client.plist, HTTP on :8080) — separate launchd service that serves the browser UI. The browser then connects directly to the voice agent's WebSocket on :9900 — the web client is not in the WebSocket data path.Voice agent and conversation server handle conversation-scope actions with inline tools — in-process calls that round-trip instantly (describe the screen, hang up, send DTMF, read the clipboard/current time, capture a screenshot). For anything outside that scope they write to tasks/; core reads them, executes, and writes to results/, which each channel speaks or messages back. Telegram and Discord bridges only use the tasks/ path.
Prerequisites — bash src/startup.sh checks that these are installed and refuses to boot otherwise:
brew install node)brew install python3)brew install fswatch) — auto-installs via Homebrew on first startAlso required — sign in to the selected agent CLI. Startup checks the
configured Claude or Codex home before launching background services and fails
with the matching login remedy. SUTANDO_SKIP_AUTH_PREFLIGHT=1 bypasses this
once for recovery; the runtime launcher still checks again before replacing the
core session.
Recommended, but not checked at boot — macOS 15+ and Node.js 22+.
bash src/verify-setup.sh covers this second list — it checks the Node version and whether your CLI is actually authenticated. Run it if startup succeeds but the core doesn't.
Optional — each unlocks one feature and degrades alone:
pip3 install discord.py / slack_bolt — Discord / Slack bridges (Telegram needs no package)brew install ffmpeg) — subtitle-burn, video-concat, recording handoffbrew install tmux) — Sutando.app watcher auto-restart; the core starts without itFull list with the line enforcing each, plus what to vendor when embedding Sutando in another application: External runtime dependencies.
# Clone
git clone https://github.com/sonichi/sutando.git
cd sutando
# Configure optional integrations (skip for text/core-only use)
cp .env.example .env
# Add GEMINI_API_KEY only if you want voice
# Start everything
bash src/startup.sh
This starts the headless core services (voice agent, phone conversation server, web client, dashboard, and API). Open http://localhost:8080 when you want the browser UI; startup never opens a browser or launches a macOS app for you. The autonomous loop starts automatically.
Why Sutando runs with elevated permissions. Autonomous voice-driven work means
startup.shlaunches the selected core CLI with unattended approvals and full local access — permission prompts would otherwise break the voice-in / answer-out flow. In exchange:
- It's local. Sutando runs entirely on your Mac. No remote control plane, no third party with write access.
- You control the audience. 3-tier access gating means owner / verified / unverified callers get different capability bands on phone, Discord, and Telegram. Set
VERIFIED_CALLERSin.envbefore going live.- Actions are auditable. Every task lands in
tasks/+results/, and service activity is written tologs/*.log. Use the Core CLI terminal while it works to watch in real time.- Hooks are your brake pedal.
git-rules-guard.sh(see$CLAUDE_CONFIG_DIR/hooks) pops a Discord approval DM for any public write (push / PR / issue comment) regardless of transport. Reject with 👎 to block.Keep the Core CLI terminal reachable — quota exhaustion or an unrecognized CLI prompt can leave the core agent waiting for you to respond. See Codex core setup to select or roll back the Codex runtime.
Why macOS 15+? The setup scripts assume the Sequoia System Settings layout for granting TCC permissions (Screen Recording, Accessibility, Input Monitoring). Earlier macOS versions may work for the headless parts (proactive loop, Discord/Telegram bridges) but aren't tested.
macOS permissions — on first run, macOS will ask you to grant Screen Recording, Accessibility, and Microphone access. See Security for what each permission is used for.
Try saying:
Verify your setup (optional):
bash src/verify-setup.sh
Troubleshooting:
logs/voice-agent.log for errors. Common causes:
GEMINI_API_KEY not set or invalid in .env — get one at ai.google.devlsof -i :9900 to checknpm install failed? Make sure Node.js 22+ is installed: node --versionGEMINI_API_KEY overriding .env — run unset GEMINI_API_KEY then restartscreencapture -v needs a TTY. Sutando uses ffmpeg instead — make sure it's installed: brew install ffmpegbash src/restart.sh — this kills all services and restarts freshskills/phone-conversation/scripts/conversation-server.ts, port 3100) isn't running. Run bash src/startup.sh or bash src/restart.sh to relaunch all services.Shutting down:
bash src/restart.sh # stops all services (voice agent, web client, API, bridges, etc.)
pkill -x Sutando # stop the menu bar app
Exiting startup.sh alone does NOT stop background services. Always use restart.sh (or kill-all.sh if available) to cleanly shut everything down.
Uninstalling:
bash src/restart.sh && pkill -x Sutandorm -rf ~/Desktop/sutando (or wherever you cloned it)rm -rf $CLAUDE_CONFIG_DIR/projects/*sutando*node_modules/ — deleted with the repoimsg, wacli) via the package manager you used to install them.bash src/install-health-check-launchd.sh --uninstall (idempotent — no-op if not installed).These unlock more capabilities. Add to .env when ready:
| Integration | What it unlocks | Setup |
|---|---|---|
| Gmail | Read/send/search email from voice | gws auth setup --login (OAuth, no app password) |
| Twilio + ngrok | Phone calls, SMS, meeting dial-in, task delegation via phone | twilio.com + brew install ngrok (see Running costs) |
| Telegram | Message Sutando from your phone. First DM auto-enrolls you as owner (trust-on-first-use). Subsequent senders need to be added: edit $CLAUDE_CONFIG_DIR/channels/telegram/access.json → allowFrom list. | Create bot via @BotFather, then /telegram:configure <token> |
| Discord | Message Sutando from Discord (DM + channel @mentions) | Developer portal, then /discord:configure <token> |
| Claude for Chrome | Browser automation — navigate, read pages, fill forms, interact with web apps | Install extension, log in with the same account as Claude Code |
| Sutando app (menu bar) | Optional global hotkeys (see Keyboard shortcuts) | Build and launch separately; core startup stays headless |
| OS-supervised health checks | Detect stuck loops, dead watchers, and queue pileups even when core is unresponsive — macOS notifies you when Sutando is broken | bash src/install-health-check-launchd.sh (idempotent; uninstall with --uninstall) |
| Multi-machine workspace sync | Run the same agent identity across Mac mini + MacBook + Mac Studio etc.; memory + notes + state stay consistent via a private git repo you own | Create a private vault repo, set vault.remote_url in sutando.config.local.json, run bash scripts/sync-workspace.sh --init once + cron it. See docs/workspace-sync.md. The legacy sync-memory.sh flow is deprecated in v0.3.0 and removed in v0.4.0. |
One table, organized by capability. Core access comes from the Claude Code or Codex CLI account you select; the remaining services are optional and mostly free-tier-sufficient.
| Capability | When you need it | Service required | Cost |
|---|---|---|---|
| Basic (core agent + screen / notes / calendar / reminders / contacts / browser / iMessage) | Always — this is Sutando's baseline | Claude Code or Codex CLI access + macOS | Depends on the selected CLI account. No Gemini key or Google OAuth is required for core operation. |
| Voice agent (real-time conversation in browser or on phone) | If you want to talk to Sutando | Gemini voice API | Free tier covers normal use (~15 req/min). Heavy use: Gemini paid ~$0.30–$1.30/hr. |
| Telegram / Discord / WhatsApp (message Sutando from any of these) | If you want non-voice chat from your phone or desktop | Telegram BotFather, Discord developer portal, wacli (bundled) | All free for personal use. |
| Phone calls / summon (remote control) | If you want Sutando to make inbound/outbound calls, or to share its computer screen via Zoom/Google Meet and be controlled by voice from your phone | Twilio phone number + ngrok webhook | Twilio ~$1/mon number + ~$0.0085/min inbound + ~$0.015/min outbound + Media Streams ~$0.004/min. ngrok and Zoom free tiers both work for the summon flow. |
| Agent joining meetings via dial-in (PSTN join into Zoom / Google Meet) | If you want the phone agent to dial into a meeting as a participant | Zoom Pro OR Google Workspace Business on the host side (the meeting organizer's account needs toll dial-in enabled) | Zoom Pro ~$15/mon, Google Workspace Business Starter ~$7/mon. Sutando's side is already covered by the Phone row above. |
Minimal-cost path: use your selected core CLI account for text, browser, and messaging. Add Gemini for voice, Google OAuth for Google services, and Twilio for phone or meeting dial-in only when needed.
| Capability | Script | Status |
|---|---|---|
| Voice conversation | voice-agent.ts | Verified |
| Task delegation (voice → core) | task-bridge.ts + watch-tasks-stream.sh + tasks/ dir | Verified |
| Screen capture + analysis | macos-tools skill | Verified |
| Notes / second brain | notes/ directory (YAML-frontmatter markdown) | Verified |
| Context drop + shortcuts | src/Sutando/ menu bar app | Verified |
| Gmail read/send/search | gws-gmail skill | Verified |
| Calendar reading | google-calendar skill | Verified |
| Reminders management | macos-tools skill | Verified |
| Contacts lookup | macos-tools skill | Verified |
| Browser automation | browser.mjs + MCP tools | Verified |
| Conversational phone calls | phone-conversation/ | Verified (needs Twilio + ngrok) |
| Phone → task delegation | phone-conversation/ | Verified (needs Twilio + VERIFIED_CALLERS) |
| Join Zoom (computer audio) | inline-tools.ts | Verified |
| Join Google Meet (browser audio) | inline-tools.ts | Verified |
| Meeting dial-in (Meet + Zoom) | phone-conversation/ | Verified (needs Twilio + ngrok) |
| Meeting approval via Telegram | phone-conversation/ | Verified (needs Twilio + Telegram) |
| Inbound call handling | phone-conversation/ | Verified (needs Twilio) |
| Telegram messaging | telegram-bridge.py | Verified (text + photos + files + voice) |
| Discord messaging | discord-bridge.py | Verified (DMs + channel @mentions + files) |
| Cross-device task submission | agent-api.py | Verified |
| Health monitoring | health-check.py | Verified |
| Pattern detection + user modeling | Core memory files + selected CLI | Verified |
| System dashboard | dashboard.py | Verified |
| Info-radar (arXiv / GitHub / HN / news monitoring) | info-radar skill + daily digest | Verified |
| Menu-bar avatar states (idle/listening/speaking/working) | src/Sutando/main.swift + /sse-status | Verified |
When running, Sutando exposes these local ports:
| Port | What |
|---|---|
| 8080 | Voice web client — talk to Sutando here |
| 7844 | Dashboard — status, activity, and capability matrix |
| 7843 | Agent API — submit tasks from any device |
| 9900 | Voice agent WebSocket |
| 7845 | Screen capture server |
| 3100 | Phone conversation server (Twilio webhook target) |
| 4040 | ngrok admin UI (when ngrok is running) |
The optional Sutando menu bar app (src/Sutando/) provides global keyboard shortcuts. It is separate from the headless core and is never built or launched by startup.sh. All shortcuts are configurable — the bindings below are the shipped defaults, published at runtime to <workspace>/state/hotkeys.json (the source of truth); override any of them per-machine in ~/.config/sutando/hotkeys.json.
| Action | Default binding |
|---|---|
| Toggle Voice — connects/disconnects voice in the browser | toggle_voice (default ⌃V) |
| Drop Context — sends selected text, clipboard image, or Finder file to Sutando | drop_context (default ⌃⇧C) |
| Toggle Mute — mutes/unmutes microphone during voice | toggle_mute (default ⌃M) |
| Drop Video Clip — sends a screen recording of the active window/screen to Sutando | drop_video_clip (default ⌃⇧R) |
| Drop Screenshot — sends a screenshot of the active window/screen to Sutando | drop_screenshot (default ⌃S) |
The action names above are the stable keys in state/hotkeys.json; the ⌃-combos are only the current defaults and may be remapped, so treat the action — not the keystroke — as the contract.
The menu bar also has Open Core (brings up the selected core CLI terminal) and Open Dashboard (opens the status dashboard at localhost:7844).
On first run:
To opt in, compile and launch it separately: cd src/Sutando && swiftc -O -o Sutando main.swift SutandoConfig.swift -framework Cocoa -framework Carbon -framework ApplicationServices -framework AVFoundation, then run ./Sutando. The app and its accessibility helper are not core boot dependencies.
startup.sh automatically enables proactive mode. Sutando runs an autonomous loop that:
It consumes API quota proportional to how much work it finds to do.
Autonomous self-development is enabled by default. To run Sutando in a stable
product context without idle-time code evolution, set
SUTANDO_SELF_DEVELOPMENT_ENABLED=0 in .env and restart the core. Sutando
continues to process owner requests, monitor health, and deliver tasks; it only
stops choosing and executing autonomous improvement work. An explicit
owner-requested code change is still allowed.
🚨 Sutando has deep access to your computer — file system, screen, keyboard, browser, email, and phone. Understand the risks before deploying.
Built-in protections:
Recommended setup:
VERIFIED_CALLERS explicitly in .env (don't leave it empty)macOS permissions Sutando needs (System Settings → Privacy & Security):
claude or codex) and node. Required for describe_screen, capture_screen, and the screen-capture server (port 7845) — lets Sutando see what you're looking at when you ask "what's on my screen?". Also used by the screen-record skill for subtitled recordings.macos-use skill to click/type into native apps on your behalf.gws calendar +agenda, reminders.py add/list/complete). You can grant these when first prompted rather than up front.See SECURITY.md for full details, best practices, and how to test your setup.
For setup guides, operator runbooks, architecture, protocols, and release policy, start at the documentation hub.
This is alpha software. The biggest need is testing — try a capability, report what breaks.
Sutando was largely built by its own autonomous build loop -- a Claude Code session that reads a build log, picks the highest-value missing piece, builds it, and loops. The human provides direction and testing; the agent does the rest.
Voice agent built on bodhi-realtime-agent, a Gemini Live voice session library.
MIT
.coveragerc
.env.example
.githooks/
pre-commit
.github/
dependabot.yml
ISSUE_TEMPLATE/
bug_report.md
feature_request.md
use-case-submission.md
PULL_REQUEST_TEMPLATE.md
workflows/
bundle-smoke.yml
ci.yml
cla-recheck-on-push.yml
codeql.yml
coverage-comment.yml
coverage-gate.yml
eslint.yml
lint-agents-md-sync.yml
lint-claude-home-path.yml
lint-hermetic-bridge-tests.yml
lint-host-label.yml
lint-hotkey-assertions.yml
lint-src-map.yml
lint-sutando-home-path.yml
lint-workspace-resolution.yml
publish-sparrow.yml
python39-compat.yml
regen-wire-list.yml
ruff.yml
shellcheck.yml
workspace-leak-check.yml
.gitignore
AGENTS.md
CHANGELOG-PENDING.md
CHANGELOG.md
CLA.md
CLAUDE.md
CONTRIBUTING.md
docs/
adr/
0001-pointer-teacher-brain.md
architecture-boundaries.md
avatar-default.html
built-in-tools.md
catalog.json
codex-core.md
community-use-cases/
README.md
self-healing-install.md
thumbnails/
.gitkeep
videos/
.gitkeep
design-core-health-verdict.md
design-credential-capability-resolver.md
design-mediated-capability-layer.md
host-cli-bindings.md
observability/
example-events.jsonl
example-realtime-events.jsonl
example-realtime-usage.jsonl
example-usage.jsonl
pointer-teacher-design.md
README.md
regen-wire-list-setup.md
release-process.md
remote-gateway-protocol.md
runtime/
runtime-dependencies.md
claude-hook-contract-v1.md
slack-bridge.md
src-map.md
state-sync-allowlist.md
sutando-config.schema.json
testing-coverage.md
voice-agent-test-framework.md
workspace-config.md
workspace-contract.md
workspace-design.md
workspace-hosts-convention.md
workspace-per-host-paths.md
workspace-sync.md
eslint.config.mjs
hooks/
activity-emitter.py
context-source-guard.py
gmail-write-guard.py
human-action-bridge.py
README.md
result-file-marker-guard.py
skill-usage-telemetry.py
skip-ask-user-question.py
KNOWN_ISSUES.md
LICENSE
package-lock.json
package.json
packages/
ag2-sparrow/
.gitignore
ag2_sparrow/
__init__.py
__main__.py
_dirs.py
chat_secret_filter.py
event_channel.py
event_consumer.py
event_inbox.py
gateway_credentials.py
human_action.py
local_task_protocol.py
remote_gateway_bridge.py
result_markers.py
result_ready.py
send_allowlist.py
task_archive.py
workspace_lock.py
pyproject.toml
README.md
tests/
test_ack_retry.py
test_dns_timeout.py
test_event_consumer.py
test_event_inbox_channel.py
test_event_wiring.py
test_gateway_status.py
test_human_action.py
test_inflight_recovery.py
test_launch_diagnostics.py
test_vault_token_tier.py
test_write_task_atomic.py
tools/
sync_from_src.py
test_no_drift.py
PERSONAL_CLAUDE.md.example
pnpm-workspace.yaml
README.md
REVIEW.md
ruff.toml
schemas/
skill-manifest.schema.json
scripts/
agents-md-sync.sh
browser-transport-build.mjs
build-bundle.mjs
check-python39-compat.py
check-utc-z-strftime.py
coverage-gate.sh
cron-gate.sh
dedup-conversation-store.py
gen-src-map.py
hermetic-workspace-guard.py
import-conversation-log.py
import-session-metrics.py
install-git-hooks.sh
install-personal-claude-hook.sh
install-session-start-hook.sh
install-workspace-sync.sh
lint-class-rules.py
lint-claude-home-path.sh
lint-hermetic-bridge-tests.py
lint-host-label.sh
lint-hotkey-assertions.sh
lint-skill.py
lint-skill.test.py
lint-sutando-home-path.sh
lint-vault-sync-paths.sh
lint-workspace-resolution.sh
poc-codeql-33-cmd-injection.sh
poc-codeql-38-url-substring.sh
poc-codeql-42-39-string-escaping.sh
poc-codeql-path-injection.sh
poc-voice-metrics-reset.js
posthog-usage-report.py
pr_flag.py
presenter-mode.sh
probe-team-sandbox.sh
python-binary.sh
query-conversation.sh
regen-wire-list.py
restart-voice-agent.sh
results-health.sh
review-checks.py
review-checks.sh
review-preflight.py
smoke-bundle.sh
sutando-config-hooks.sh
sutando-config.sh
sutando-migrate.sh
sutando-shell-setup.sh
sutando-whoami.sh
sweep-stranded-claims.sh
sync-memory.sh
sync-workspace.sh
tail-events.sh
tailscale-serve-voice.sh
test-event-log.sh
test-migrate-bundle.sh
test-pr354-retention-sweep.sh
test-results-health.sh
test-x-search-bearer.sh
validate-access-tiers.py
voice-lock.py
SECURITY.md
shared/
ag2_gateway_credentials.py
skills/
agent-registry/
hooks/
session-start.sh
manifest.json
scripts/
_workspace_resolve.py
registry-client.py
registry-service.py
SKILL.md
agent-room-ops/
_gateway.py
authz.py
doc.py
events_acceptance.py
events.py
gateway_credentials.py
grant.py
join.py
manifest.json
media.py
mention.py
react.py
read.py
resolve.py
room_ops.py
room-ops-gate.json.example
rooms.py
SKILL.md
test_room_ops.py
verify_platform_card.py
audio-transcribe/
manifest.json
scripts/
transcribe.py
SKILL.md
bot2bot-post/
manifest.json
post.py
SKILL.md
call-diagnostics/
manifest.json
scripts/
analysis.py
diagnose.py
SKILL.md
claude-codex/
manifest.json
scripts/
codex-bounded.sh
codex-run.sh
review-pr.sh
SKILL.md
claude-gemini/
manifest.json
scripts/
gemini-run.sh
SKILL.md
claude-router/
manifest.json
scripts/
route-ai.sh
SKILL.md
context-drop/
.gitignore
build.sh
manifest.json
Package.swift
SKILL.md
Sources/
ax-read/
main.swift
context-reconstruct/
SKILL.md
db-browser/
manifest.json
SKILL.md
deal-finder/
.gitignore
manifest.json
scripts/
scan.py
SKILL.md
state/
criteria.json
doc-ingest/
scripts/
ingest.py
SKILL.md
electron-overlay-dimming/
manifest.json
SKILL.md
email-find/
manifest.json
SKILL.md
gemini-tts/
manifest.json
scripts/
synthesize.sh
SKILL.md
gws-gmail-voice/
manifest.json
SCORING_RUNBOOK.md
tools.ts
image-generation/
manifest.json
README.md
scripts/
generate.py
SKILL.md
install.sh
learned-skills/
scripts/
detect-learned-skills.py
macos-tools/
manifest.json
README.md
scripts/
calendar-reader.py
contacts.py
email-sender.py
reminders.py
screen-capture.sh
SKILL.md
macos-use/
manifest.json
scripts/
build.sh
install-mcp.sh
SKILL.md
make-viral-video/
manifest.json
scripts/
asset_cache.py
build.sh
codex-prompt.md
render.py
test_source_tag.py
validate_asset.py
verify_video.py
SKILL.md
MANIFEST.md
media-transcript/
manifest.json
scripts/
transcript.py
SKILL.md
meeting-prep/
manifest.json
SKILL.md
meeting-scheduler/
manifest.json
scripts/
policy.py
schedule_meeting.py
SKILL.md
morning-briefing/
manifest.json
SKILL.md
ms365-connect/
manifest.json
requirements.txt
scripts/
ms365.py
SKILL.md
observe/
observe_policy.py
SKILL.md
obsidian-vault/
manifest.json
scripts/
dream.py
SKILL.md
tools.ts
open-sutando-ref/
manifest.json
scripts/
resolve.py
SKILL.md
openai-tts/
manifest.json
scripts/
synthesize.sh
SKILL.md
overlay-apps/
app/
.gitignore
control-server.js
main.js
package-lock.json
package.json
preload.js
stats-renderer.js
... 1019 moreFAQ
sutando is a Claude Code plugin with 57 hand-picked skills for automation work, indexed on Flowy. Install it with the command on its page. It includes agent-registry, agent-room-ops, audio-transcribe. Its skills do not fire on their own yet. Request auto-invocation to have Flowy route them as you prompt. Free and open source.