commands.json.
--json on persona, skill, inbox, and access-style list verbs when a program will parse stdout.
Auth and profiles
| Command | Notes |
|---|---|
auth set-token | Prompt; stores the token in the Keychain |
auth claim [--wait N] | Flush, wait for /claim, confirm. Refuses if the daemon is loaded |
auth set-owner <chat_id> | Positive private id |
auth status | Username, masked owner, daemon |
profile list | |
profile add <slug> | Prompt for that bot’s token |
profile set-token <slug> | Rotate |
profile enable|disable <slug> | |
profile rm <slug> [--delete-token --yes] | |
profile status [slug] |
Personas
| Command | Notes |
|---|---|
persona list [--json] | |
persona show <id-or-title> [--json] | |
persona add [--id] --title T [--display-name N] (--body | --file | --from-dir) | |
persona set <id> (--title | --display-name | --file) | |
persona apply <id> <profile> [profile…] | Next turn |
persona unapply <profile> [profile…] | |
persona rm <id> --yes | Not the builtin |
persona reset-builtin [id] | Restores the packaged copy. Errors and leaves your files if this install has no packaged persona. |
persona new-file <id> <rel> [--body] | |
persona rm-file <id> <rel> --yes | Refuses PERSONA.md |
Skills
| Command | Notes |
|---|---|
skill list [--json] | Global catalog |
skill show <id-or-name> [--json] | |
skill add (--file SKILL.md | --name N --body T) | Reserved ids refused |
skill set <id> (--file | --name | --description) | |
skill import PATH [--force] | Dir or zip, SKILL.md required |
skill rm <id> --yes | Not the builtin CRUD skill |
skill reset-builtin [id] | |
skill new-file / skill rm-file | Same shape as persona files |
Bot users
These operations return the version 2 JSON result and require--profile P. See Access for discovery, node grants, removal and individual user access.
| Command | Purpose |
|---|---|
bot-users capability --profile P | Check the live bridge. |
bot-users list --profile P | List users and available nodes. |
bot-users begin --profile P | Start discovery. |
bot-users status --profile P --session S | Read discovery. |
bot-users cancel --profile P --session S | Cancel discovery. |
bot-users confirm --profile P --session S --user ID --node NODE | Add the detected member. Repeat --node for more nodes. |
bot-users remove --profile P --user ID | Revoke this bot’s access. |
bot-users set-enabled --profile P --user ID --mode on|off | Resume or pause one user on this bot. |
bot-users confirm --profile P --session S --user ID --all-nodes | Add with current and future eligible nodes. |
Access, send, passcode
| Command | Notes |
|---|---|
access list [--profile P] | |
access add-user <id> [--label] [--node] [--thread] [--profile] | |
access grant <id> <node> [--thread] [--profile] | |
access revoke <id> <node> [--profile] | |
access multi-user [on|off] | Telegram members are always enabled. Off returns an error; use individual bot user controls. |
group add --id=-100123 --member <id> --node <name> [--label] [--profile] | Repeat --member for every human. Write the id as --id=-100123. --node is the working folder. --profile picks the bot. |
group list [--profile] | Ids, chime, folder, Jev key, and Telegram’s member count. A mismatch means the bot stays silent. |
group rm --id=-100123 [--profile] | |
group add-member --id=-100123 <user_id> [--profile] | A person who joined. |
group rm-member --id=-100123 <user_id> [--profile] | A person who left. |
group ignore-bot --id=-100123 <bot_id> [--profile] | Another bot already in the group. Not a person. |
send [TEXT] [--file PATH]… [--as-document] [--profile] [--user|--owner] [--yes] | Dry-run without --yes |
passcode set / status / clear --yes | |
passcode relock-on-new|restart|node-switch|thread-switch [on|off] |
Daemon and config
| Command | Notes |
|---|---|
inbox [--json] | Debug poll |
daemon run / daemon status | |
install [--voice|--no-voice] / restart / uninstall | Fresh macOS installs set up local voice transcription. --voice retries or re-enables; --no-voice disables it and saves that choice. Linux and Windows installs leave voice off by default. |
ack set-key / ack set-model / ack status | OpenRouter |
jev set-key / jev status / jev clear | TypeSafe / Jev. Same Keychain item as the Mac app Settings › Agent |
config show / config timeout [--idle] [--max] | |
config handoff [instant|ai] | What /harness carries to the new harness. Prints handoff: <mode> |
voice setup [--model NAME] [--command JSON] [--yes] | Enable local voice transcription after a self-test. First setup uses large-v3-turbo-q5_0; base.en is smaller and English only. Later setups keep the chosen model or custom command unless changed. --yes permits Homebrew to install missing ffmpeg and whisper.cpp. |
voice status [--json] | Show voice setup, echo, local dependencies, last self-test, and last failure; --json is for installers |
voice echo on|off | Show or hide the full transcript preview. Off unless you opt in |
voice keep on|off | Keep or delete the original voice file after the turn. Deleted unless you opt in |
voice test PATH | Transcribe one local audio file and print the text and time |
voice off | Disable transcription; keep the local model |
lane status | Telekit harness: credits vs OpenRouter, and whether the key is set |
lane use credits|openrouter | Who pays for Telekit-harness turns |
lane set-key | Store the key for the current lane mode (tk_ or sk-or-) |
init-skill [--target] | Harness how-to, not bot packs |
self-update [--check|--force] | Compiled installs only |