Docs / Connect and automate

Command line

Drive Azynote from Terminal, a script, a hook or a Stream Deck key with azynote-ctl: start and stop a transcription, write the OnePager, dictate, open a session, read your workspace.

On this page

Everything you do in Azynote with a click or a shortcut, a script can do too. azynote-ctl sends one command to the Azynote that is running on your Mac, prints the answer and exits:

azynote-ctl transcription start --session 20261001110000
azynote-ctl transcription stop
azynote-ctl onepager generate --session 20261001110000

Use it from Terminal, from a hook, from a Shortcuts "Run Shell Script" action, or from any key or launcher that can run a command.

Set it up#

Azynote writes the command for you every time it starts, at ~/.azynote/bin/azynote-ctl. To type it as azynote-ctl from anywhere, add that folder to your shell's path once:

echo 'export PATH="$HOME/.azynote/bin:$PATH"' >> ~/.zshrc

Open a new Terminal window and try azynote-ctl status. Azynote has to be running: when it isn't, azynote-ctl says so and does nothing.

Hooks don't need this step. Every hook gets the full path as $AZYNOTE_CTL (see below).

Find your way around#

  • azynote-ctl commands lists every command, with one line on what it does.
  • azynote-ctl help transcription start shows one command's flags.
  • azynote-ctl status shows what Azynote is doing right now: the transcription, dictation, the voice conversation, the window, the open session.

Flags are words, never JSON: --title "Weekly sync". A flag that takes several values is repeated: --subject-keys acme --subject-keys beta. A yes-or-no flag is on by itself and off with no- in front: --include-content or --no-include-content.

Control a transcription#

azynote-ctl transcription start --session 20261001110000
azynote-ctl transcription start --new --subject-keys acme --title "Kickoff"
azynote-ctl transcription pause
azynote-ctl transcription resume
azynote-ctl transcription mic pause
azynote-ctl transcription stop

start always needs to know which session: an existing one with --session, or a new one with --new (a new session belongs to a subject, so give its key). Azynote never guesses from what happens to be on screen. The session opens in the window, so you see it being transcribed.

Asking for what is already true is fine: stop when nothing is transcribing, or pause when already paused, succeeds and changes nothing. Asking for something Azynote wouldn't let you do with a click, like starting a second transcription while one is running, is refused with the reason.

transcription toggle is made for a single key: it pauses a live transcription and resumes a paused one. It never starts or stops one, so pressing it by accident can't end your meeting.

Stopping a transcription doesn't write the OnePager. onepager generate --session <id> does, the same way the sparkle button does, with the templates chosen for that session.

sync start runs Smart Sync on the open workspace, as Tools > Smart Sync does: every missing or outdated OnePager and one-liner, then the status of their subjects. It works in the background, so you can run it from a script at the end of the day. Add --show to watch it in its window. Closing that window doesn't stop the sync, and wait sync=completed --timeout 1800 waits until it's finished.

Wait for something to happen#

wait returns as soon as a value in status is the one you name, so a script never has to guess how long to sleep:

azynote-ctl transcription stop
azynote-ctl wait transcription=idle --timeout 600
azynote-ctl onepager generate --session 20261001110000
azynote-ctl wait onepager=completed --session 20261001110000 --timeout 300

It gives up after --timeout seconds (30 unless you say otherwise) and tells you what the value is instead.

Dictation, voice and the window#

azynote-ctl dictation toggle      # the same as pressing ⌃⇧D
azynote-ctl voice toggle          # start, then send: like ⌃⇧V
azynote-ctl window mini
azynote-ctl window pin on
azynote-ctl open settings --tab hooks
azynote-ctl open "azynote://workspaces/…/sessions/20261001110000"

Dictation types into the app that is in front when it starts, exactly like the shortcut. The voice commands drive the turn-by-turn conversation; when Voice is set to a live engine, they say so and leave it to the chat window. open takes the same azynote:// links to a session, a OnePager or a note that the chat gives you.

Ask the orb, and show what you want on screen#

azynote-ctl orb ask "What did Acme ask for on today's call?"
azynote-ctl wait orb=answered --timeout 180
azynote-ctl orb follow-up "Draft a short email to Karen with our next steps."
azynote-ctl wait orb=answered --timeout 180
azynote-ctl orb chat

orb ask opens the orb's card over the app in front, types the question in letter by letter and asks it, as a person would. The card opens at the mouse pointer, or at --x and --y (screen points) when you give them. The command returns once the question is asked, so wait orb=answered is how a script waits for the answer.

  • orb follow-up types a follow-up under the answer and asks it in the same thread. It works only while the card shows an answer.
  • orb chat does what the chat button on the card does: the conversation continues in the chat window, on its thread. wait chat=open waits for the window.
  • orb close closes the card, like its ×. An answer still coming is stopped.
  • orb type types into the card without asking, so you can see what it offers for the text, like the list of actions after /.
  • orb tap taps the orb itself: it opens what waits behind it (a meeting, the agent's notices, your catch-up after /brb), or the ask card.
  • view calendar, view timeline, view tasks or view subjects shows one of the main views, like Ctrl+1 to Ctrl+4.
  • session tab note, session tab transcript or session tab onepager shows that tab of the open session, like clicking it. During a transcription, transcript shows the live one.

As everywhere on this page, a command Azynote can't carry out right now is refused with the reason: a follow-up with no answer on the card, or a session tab with no session open. Together they make scripted demos and walkthroughs easy.

Set up a workspace's AI engine#

azynote-ctl ai preset acp
azynote-ctl acp command "goose acp"
azynote-ctl acp allow-all on
  • ai preset gemini, openai, local, acp or cli routes every AI capability of the workspace to one engine, the same as the preset in Settings, AI engines. If the embedding engine changes, the command says so: workspace search needs a reindex from Settings, Search, as Settings warns too.
  • acp command sets the command that launches your ACP agent in this workspace. It tells you if Azynote doesn't find it on your PATH.
  • acp allow-all on or off is Allow every tool in Settings, ACP (see Chat). With it on, the agent runs its tools without asking, its own shell included.

All three change only the workspace open in the window.

Use it from a hook#

Every hook gets $AZYNOTE_CTL, the command of the Azynote that ran the hook. Two ready-made examples on the Hooks page use it:

Transcribe a meeting you prepared, as soon as it starts (Meeting starts)

case "$AZYNOTE_MEETING_RESPONSE" in
  accepted|organizer) ;;
  *) exit 0 ;;
esac
if [ -n "$AZYNOTE_SESSION_ID" ] && [ "$AZYNOTE_TRANSCRIBING" != yes ]; then
  "$AZYNOTE_CTL" transcription start --session "$AZYNOTE_SESSION_ID"
fi

$AZYNOTE_SESSION_ID is the meeting's session when you already opened the meeting from the calendar, empty when you haven't, so meetings you didn't prepare are left alone.

Write the OnePager when the transcription is done (Transcription stops)

"$AZYNOTE_CTL" wait transcription=idle --timeout 600 && \
  "$AZYNOTE_CTL" onepager generate --session "$AZYNOTE_SESSION_ID"

The wait lets the last few seconds of speech finish transcribing before the OnePager is written.

Use it in a script#

Add --json to get the answer as JSON instead of text, with the state Azynote is in afterwards under status:

azynote-ctl --json status | jq -r '.status.transcription'

The exit code tells your script what happened:

CodeMeaning
0Done, or it was already that way
1The command or a flag was wrong. The message says which.
2Azynote isn't running
3Azynote said no, and says why (a transcription is already running, no such session, and so on)
4wait gave up after its timeout

Good to know#

  • It talks to your Azynote only. The command connects to Azynote on your own Mac, as you. Nothing goes over the network.
  • Changes show up in the app right away. A subject or a note created from the command line appears in the window, like one created by an AI tool through the MCP server.
  • Data commands work on the workspace open in the window. workspace open <folder> switches it, the same way the workspace picker does, and is refused while you are transcribing. The engine and permission commands (ai preset, acp ...) work on that workspace too, and only on it.
  • Turning the mic on is for the command line only. The commands that start a transcription, dictation or a voice conversation are not offered to AI tools connected through the MCP server.

Every command#

This list comes straight from Azynote, so it always matches what azynote-ctl commands shows. Flags in square brackets are optional.

Driving the app#

CommandWhat it does
azynote-ctl transcription start [--session <session>] [--new] [--title <title>] [--subject-keys <subject-keys>]Start transcribing into a session (--session) or a new one (--new, with --subject-keys and --title if you want one).
azynote-ctl transcription pausePause every live source.
azynote-ctl transcription resumeResume every paused source.
azynote-ctl transcription stopStop transcribing; the transcript is then cleaned (and improved, if that setting is on).
azynote-ctl transcription toggleFor a single key: pause when live, resume when paused.
azynote-ctl transcription mic <pause|resume>Pause or resume the microphone only.
azynote-ctl transcription system-audio <pause|resume>Pause or resume system audio only.
azynote-ctl onepager generate --session <session>Queue the session's OnePagers, with the templates chosen for it, through the same queue as Cmd+G.
azynote-ctl sync start [--show]Bring the open workspace up to date in the background, as Smart Sync in the Tools menu does.
azynote-ctl dictation startStart dictating into the app in front, as ⌃⇧D does.
azynote-ctl dictation insertStop listening and type the words into the app dictation started in.
azynote-ctl dictation cancelDrop what was heard; nothing is typed.
azynote-ctl dictation toggleFor a single key: start when idle, insert when listening, as ⌃⇧D does.
azynote-ctl voice startStart a voice conversation and listen, as ⌃⇧V does.
azynote-ctl voice sendSend what was said (Enter while listening), or listen again on your turn.
azynote-ctl voice endEnd the voice conversation (Esc).
azynote-ctl voice toggleFor a single key: start when idle, send when listening or on your turn.
azynote-ctl orb ask <question> [--x <number>] [--y <number>]Open the orb's card over the app in front, type the question into it and ask, as a person would.
azynote-ctl orb type <text> [--x <number>] [--y <number>]Type into the orb's card a letter at a time without asking, so what it offers for the text shows.
azynote-ctl orb tapTap the orb at rest, as a person does.
azynote-ctl orb follow-up <question>Type a follow-up under the orb's answer and ask it, in the same thread, as a person would.
azynote-ctl orb chatOpen the orb's conversation in the chat window, on its thread, as the card's chat button does.
azynote-ctl orb closeClose the orb's card, as its × does; an answer still coming is stopped.
azynote-ctl window showBring Azynote's window forward.
azynote-ctl window miniShrink Azynote to the floating chip.
azynote-ctl window fullLeave mini mode.
azynote-ctl window pin <on|off>Keep the window on top of every other app (on), or not (off).
azynote-ctl window stealth <on|off>Hide the sidebar and controls for screen sharing (on), or show them (off).
azynote-ctl open <link>Follow an azynote:// link to a session, a OnePager or a note, as clicking it does.
azynote-ctl view <calendar|timeline|tasks|subjects>Show one of the main views, as Ctrl+1 to 4 do.
azynote-ctl session tab <note|transcript|onepager>Show one tab of the session on screen: its note, its transcript (the live one while transcribing) or its OnePager.
azynote-ctl open settings [--tab <general|shortcuts|calendar|transcription|onepagers|snippets|hooks|ai-engines|chat|mcp|search>]Open Settings, on a tab if given.
azynote-ctl workspace open <path>Switch the window to the workspace at this path, as the picker does.
azynote-ctl ai preset <gemini|openai|local|acp|cli>Route every AI capability of the open workspace to one engine, as the preset in Settings > AI engines does.
azynote-ctl acp command <command>Set the command that launches the ACP agent in the open workspace, like goose acp.
azynote-ctl acp allow-all <on|off>Let the ACP agent run every tool without asking (on), or ask first (off), in the open workspace.
azynote-ctl status [--session <session>]Print the app's state: transcription, dictation, voice, window, open session.
azynote-ctl wait <condition> [--session <session>] [--timeout <number>]Return once a status field has the value you name, like transcription=live.
azynote-ctl debug screenshotCapture Azynote's own windows, nothing else on screen, and print the image files.
azynote-ctl debug logs [--since <since>] [--tag <tag>]Print Azynote's recent log entries, oldest first.
azynote-ctl debug uiPrint what the window shows: view, subject, session, open document.

Your workspace's data#

The same actions AI tools get through the MCP server, on the workspace open in the window.

CommandWhat it does
azynote-ctl add attachment --subject <subject> --session-id <session-id> --source-path <source-path> [--target-name <target-name>]Copy a file from your Mac into a session, as an attachment.
azynote-ctl add subject link --subject-key <subject-key> --label <label> --url <url>Add a labeled link to a subject.
azynote-ctl add subject tag --subject-key <subject-key> --tag <tag>Add a tag to a subject.
azynote-ctl add task note --one-pager-path <one-pager-path> --task-text <task-text> --note <note> [--task-id <task-id>]Add a short note under a task in a OnePager.
azynote-ctl capture screenTake a screenshot of every display and print where the images are.
azynote-ctl complete task --one-pager-path <one-pager-path> --task-text <task-text> --completed [--task-id <task-id>]Tick a task in a OnePager, or untick it with --no-completed.
azynote-ctl create calendar rule --target-subject-key <target-subject-key> --field <field> --value <value>Add a rule that files matching calendar events under a subject.
azynote-ctl create note --subject <subject> --session-id <session-id> --title <title> --content <content>Add a note to a session.
azynote-ctl create session --subject-keys <subject-keys> [--title <title>] [--one-pager-preset-ids <one-pager-preset-ids>] [--date <date>] [--one-liner <one-liner>] [--default-title-date-format <default-title-date-format>]Create a session in one or more subjects.
azynote-ctl create subject --display-name <display-name>Create a subject.
azynote-ctl create workspace --name <name> --path <path> [--description <description>] [--bind]Create a workspace in a folder and add it to the workspace picker.
azynote-ctl delete asset --session-id <session-id> --file-path <file-path>Delete one file from a session.
azynote-ctl delete calendar rule --id <id>Delete a calendar rule.
azynote-ctl delete note --session-id <session-id> --filename <filename>Delete a note from a session.
azynote-ctl delete session --subject <subject> --session-id <session-id>Delete a session and everything in it.
azynote-ctl delete subject --subject-key <subject-key>Delete a subject, with the sessions that belong only to it.
azynote-ctl get current workspacePrint the workspace open in the window.
azynote-ctl get memoryPrint what you asked Azynote to remember in this workspace.
azynote-ctl get note --session-id <session-id> --filename <filename>Print a note.
azynote-ctl get onepager --session-id <session-id> [--type-id <type-id>]Print a session's OnePager.
azynote-ctl get session --session-id <session-id>Print a session's details: subjects, title, one-liner, templates.
azynote-ctl get subject --subject-key <subject-key>Print a subject's details: counts, tags, status, links.
azynote-ctl get ui contextPrint what the window shows: the session, the document and the subject.
azynote-ctl link session to subject --subject-key <subject-key> --session-id <session-id> --new-subject-key <new-subject-key>Add a session to one more subject.
azynote-ctl list calendar rulesList the calendar rules.
azynote-ctl list onepagers --subject <subject> [--max <number>]List a subject's sessions that have OnePagers.
azynote-ctl list recent onepagers [--limit <number>]List the latest OnePagers across every subject.
azynote-ctl list recent sessions [--days-back <number>] [--limit <number>]List the latest sessions across every subject.
azynote-ctl list session assets --session-id <session-id> --include-contentList a session's notes, transcripts, OnePagers and files.
azynote-ctl list sessions --subject <subject> [--limit <number>]List a subject's sessions.
azynote-ctl list subjects [--limit <number>]List the subjects, with the key each command takes.
azynote-ctl list tasks --status <open|completed|all> [--subject-key <subject-key>] [--search <search>] [--limit <number>]List the tasks in your OnePagers.
azynote-ctl list workspacesList the workspaces on this Mac.
azynote-ctl remember --fact <fact>Ask Azynote to remember a fact for future work in this workspace.
azynote-ctl remove subject link --subject-key <subject-key> --index <number>Remove a link from a subject.
azynote-ctl remove subject tag --subject-key <subject-key> --tag <tag>Remove a tag from a subject.
azynote-ctl rename session --subject <subject> --old-session-id <old-session-id> --new-session-id <new-session-id>Change a session's date and time, which is its id.
azynote-ctl save onepager --subject <subject> --session-id <session-id> --type-id <type-id> --content <content> --intent <generated|generated_in_batch|agent|quick_capture|edited|seeded|task_complete|task_note> [--one-liner <one-liner>]Save a OnePager you wrote yourself into a session.
azynote-ctl unlink session from subject --subject-key <subject-key> --session-id <session-id> --subject-key-to-remove <subject-key-to-remove>Take a session out of one of its subjects.
azynote-ctl update calendar rule --id <id> [--target-subject-key <target-subject-key>] [--field <field>] [--value <value>] [--enabled]Change a calendar rule.
azynote-ctl update memory --memory <memory>Replace what Azynote remembers in this workspace.
azynote-ctl update note --session-id <session-id> --filename <filename> --content <content> [--title <title>] [--tags <tags>]Replace a note's text, and its title or tags if given.
azynote-ctl update session oneliner --session-id <session-id> --one-liner <one-liner>Set or clear a session's one-liner.
azynote-ctl update session subjects --subject-key <subject-key> --session-id <session-id> --new-subject-keys <new-subject-keys>Set every subject of a session at once.
azynote-ctl update session title --subject <subject> --session-id <session-id> [--title <title>]Set or clear a session's title.
azynote-ctl update subject display name --subject-key <subject-key> --new-display-name <new-display-name>Rename a subject.
azynote-ctl update subject link --subject-key <subject-key> --index <number> --label <label> --url <url>Change one of a subject's links.
azynote-ctl update subject status --subject-key <subject-key> --status-text <status-text>Set or clear a subject's status text.
azynote-ctl upload asset --subject <subject> --session-id <session-id> --source-path <source-path> [--target-filename <target-filename>]Copy a file or folder from your Mac into a session, filed by its type.

Something else? Write to support@azynote.com.

Something here unclear or out of date? Tell me at support@azynote.com.

AzartyLabAZARTY LAB

© 2026 AzartyLab. All rights reserved.