Octarine Logo
CLI

Your notes, from the terminal

Search, edit, and organize your Markdown notes and tasks from a shell, a script, or your AI agent. Everything runs locally, and the desktop app doesn't need to be open.

$ curl -fsSL https://octarine.app/releases/cli/install.sh | sh
macOS on Apple Silicon, plus Linux and Windows on x86-64. Updates itself with octarine update.
Read the CLI docs
~/Notes
❯
Notes

Every note operation, without opening a window

Create, read, edit, move, and inspect notes by their workspace path. Links stay intact, and every write goes through the same safeguards.

❯ octarine note create Projects/Launch.md --content "# Launch plan" --property status=active --tag project --tag launch
FieldValue
content---\nstatus: active\ntags:\n- project\n- launch\n---\n# Launch plan
pathProjects/Launch.md
revisionsha256:4f1c…
Create notes with properties and tagsSupply content inline, from standard input, or from a file. Properties and tags are merged into YAML frontmatter.
Revisions

Edits that never overwrite newer changes

Reading a note returns its revision. Pass it back with --revision when you write. If the note changed in between, the CLI refuses the write and exits with code 4.

Small, targeted edits
note edit, replace-section, insert, and patch change part of a note and return its new revision, so edits chain without a re-read.
No guessing
Text that matches more than once fails with AMBIGUOUS_MATCH, and a diff that doesn't apply fails with PATCH_FAILED. Neither changes anything.
Safe beside the app
Writes use atomic replacement and a workspace lock, so you can run commands while Octarine is open.
Revision-checked edit
❯ rev=$(octarine note read Projects/Launch.md --json --fields revision | jq -r .data.revision)
❯ octarine note edit Projects/Launch.md --find "Ship v2" --replace "Ship v2 in November" --revision "$rev"
FieldValue
changes1
pathProjects/Launch.md
previousRevisionsha256:67730d5c…
revisionsha256:baa6e604…
Exit 0 · pass the new revision to the next edit
Tasks and projects

The Tasks view, from the command line

task, project, and cycle work with the same tasks you see in Octarine, through the same storage code. An open window picks up the changes on its own.

❯ octarine task list --project WEB --open
WEB-1Fix sync conflict
WEB-2Ship 1.2
WEB-3Changelog
WEB-4Tag release
WEB-5Write onboarding copy

Filter, sort, and update in one line

List by project, status, label, bucket, or cycle, and sort by priority, due date, or last update. task update changes only the fields you pass, on one task or several.

WEB-2Ship 1.2
WEB-3Changelog
WEB-4Tag release
error: invalid argument: that leaves open subtasks (WEB-3, WEB-4); pass --close-subtasks to mark them Done too

Close it with its subtasks

Closing a task with open subtasks fails unless you pass --close-subtasks, which closes them with it, as the app does.

❯ octarine cycle list
Cycle 1active
2026-11-02 → 2026-11-15
Upcoming cycleupcoming
2026-11-16 → 2026-11-29

Plan in cycles

Turn on 7, 14, 21, or 28 day cycles that start on any weekday, plan tasks in with --cycle current, and complete a cycle to carry unfinished work forward.

❯ octarine task list --project WEB --open --json # see what is planned
❯ octarine task show WEB-24 --activity --json # read before acting
❯ octarine task update WEB-24 --state in-progress
❯ octarine task comment WEB-24 "Fixed in $(git rev-parse --short HEAD)"
❯ octarine task update WEB-24 --state done
WEB-24Fix sync conflictTodo

Let a coding agent track its work

Agents can read a task before acting, move it through statuses, and comment as they ship. Task IDs like WEB-24 are stable, so they're safe in commit messages.

Agents and MCP

Built to be driven by AI agents

Claude Code, Codex, Cursor, and other agents can call the CLI from a shell or connect to its built-in MCP server. Both run the same commands, so behavior is identical either way.

❯ claude mcp add octarine -- octarine mcp --workspace "Work Notes"
--workspace fixes the workspace for the server. Every tool also takes an optional workspace argument.Client can't find it? Use the full path from which octarine.
Tools
Workspaces
workspace_listworkspace_showworkspace_infocapabilities
Reading
note_listnote_readnote_contextnote_infonote_outlinenote_propertiessearch
Editing
note_createnote_editnote_replace_sectionnote_insertnote_patchnote_appendnote_prependnote_update
Organizing
note_movenote_renamenote_duplicatenote_trashfolder_listfolder_createfolder_move
Links
link_listlink_backlinkslink_unresolvedlink_orphanslink_deadendslink_mentions
Checkboxes, tags, and properties
note_task_listnote_task_setcheckbox_listtag_listproperty_listproperty_getproperty_setproperty_unset
Tasks and projects
task_listtask_showtask_createtask_updatetask_commenttask_statusestask_labelstask_resource_listtask_resource_addproject_listproject_showcycle_listcycle_show
Inbox
inbox_captureinbox_list
Destructive tools are marked as such, so clients that ask before risky actions can prompt you.
❯ octarine agent-guide >> AGENTS.md
AGENTS.mdFind notesRead before editingMake small, revision-checked editsRecover from conflictsWork with tasks and projects

Give it the guide

agent-guide prints a briefing on finding notes, reading before editing, and recovering from revision conflicts.

❯ octarine help note edit --json
{"schemaVersion":1,"ok":true,"data":{"name":"octarine","version":"0.1.0","commands":[{"command":"note edit","about":"Replace exact text in a note (one match unless --all)","arguments":[{"name":"path","positional":true,"required":true,"schema":{"type":"string"}},{"name":"find","flag":"--find","required":true,"schema":{"type":"string","description":"Exact text to find"}},…]}],…}

Let it read the manual

help --json describes every command, argument, output envelope, and error code from the installed version, so agents don't have to guess.

Scripts

Output your scripts can rely on

Pick tables, plain text, JSON, or JSONL per command or once in your settings. Every response has the same shape and every error has a stable code.

❯ octarine search launch --fields path,line,text --limit 10 --max-output-bytes 12000 --json
{ "schemaVersion": 1, "ok": true, "data": [ { "path": "Projects/Launch.md", "line": 1, "text": "# Launch" } ], "meta": { "truncated": false } }
One stable envelope with schemaVersion, ok, data, and meta.
Set it once
Run octarine config set format json and skip --json on every call.
Only what you need
--fields keeps chosen fields. --limit and --max-output-bytes bound a search, and meta.nextCursor fetches the rest.
Exit codes that mean something
0Success2Invalid input3Not found4Conflict or stale revision5Workspace or path safety
Reference

Every command has its own help page

Run octarine <command> --help to see every option. The installed executable is the authority when it differs from the docs.

workspace
List workspaces, show the active one, set a default
note
Create, read, edit, move, rename, and trash notes
folder
Create, move, rename, duplicate, and trash folders
search
Search lines, headings, tags, properties, and paths
link
Backlinks, unresolved links, orphans, dead ends, mentions
property
Read and set properties and their definitions
checkbox
List Markdown checkboxes across notes
tag
List tags and how often they're used
task
Create, update, comment on, and archive tasks
project
Projects, their settings, and resources
cycle
Turn on cycles, plan work, and complete them
inbox
Capture, snooze, tag, and file Inbox items
view, note-type, theme
Manage Views, Note Types, and Themes
config
Default workspace, output format, and update check
export, doctor, schema
Export a workspace and check its health
mcp, agent-guide
Serve the CLI to agents and brief them
completion, update
Shell completions and signed updates
Local firstNote content never goes to an Octarine service. The MCP server only talks to the client that started it.
Careful with filesPaths stay inside the workspace, writes are atomic and locked, and trash goes to the system trash.
Signed updatesoctarine update verifies the release manifest's signature and the archive's SHA-256 digest before replacing itself.

Questions

Start with setup and updates. The full reference lives in the CLI docs.

Start writing with Octarine.

A fast, private Markdown workspace for capturing ideas, shaping notes, and keeping your writing in files you control.

Download for macOSIncludes a 7-day Pro trial.