Skip to content

CLI and automation

SonaFolio keeps the atot command. No arguments opens TUI; scripts use exec. Replace example paths/IDs.

Checks/help

atot --help
atot exec --help
atot doctor
atot models
atot config path
atot config inspect --json

Individual help is authoritative. Old top-level transcribe/import-xiaoyuzhou aliases were removed.

Validated Chinese entrypoints

atot exec transcribe path/to/episode.m4a --language zh --local-only --json
atot exec import "https://www.xiaoyuzhoufm.com/episode/<episode-id>" \
  --language zh --local-only --json
atot exec import "https://www.xiaoyuzhoufm.com/episode/<episode-id>" --data-only --json
atot exec transcribe path/to/episode.m4a --language zh --local-only --force

Force rebuilds; see transcription for replacement/backup. Current source permits repeatable languages without multilingual validation parity.

Captions and review

atot exec srt path/to/video.mp4 --language zh --json
atot exec qa path/to/work-dir --json
atot exec repair path/to/work-dir --plan-only --json

Inspect plans before explicit repair. Captions need overwrite when a destination exists.

Feeds/status

atot exec subscriptions add "https://example.org/feed.xml" --group-name Research --json
atot exec subscriptions list --json
atot exec subscriptions refresh --all --json
atot exec library status --json
atot status --task-id <task-id> --json
atot resume <task-id> --json

Resume currently queries persisted task/session state, not automatic ASR re-execution. Start the workflow deliberately with cache/force policy when retrying.

Persistent and one-run choices

atot config set local.languages '["zh"]'
atot config set summary.language zh
atot config set workflow.default_cloud_summary false
atot -c 'local.languages=["zh"]' exec transcribe path/to/audio.m4a --local-only

Empty arrays mean auto; legacy local.language remains readable. Task overrides are not persisted config set. See settings.

JSON and events

Json-capable commands return structured results; watch streams events. Check exit code/final success and every batch item, not one progress event:

atot exec transcribe path/to/episode.m4a --language zh --local-only --json --watch

With events mixed into stdout, parse lines/protocol rather than one whole JSON object. External tools schedule jobs; metadata refresh does not run an audio queue automatically.

Service boundaries

MCP is restricted library access. Serve stdio is the GUI JSON protocol, not MCP. Optional loopback HTTP requires an independent token and exposes broader operations; ordinary agent notes need only MCP.

README reference · MCP