Docs Open org

The CLI

Install ae, the suite CLI, and use Org and Moot from your terminal.

ae is the single aegent.dev command-line tool. Org's commands live under ae org, and Moot's under ae moot. Suite commands such as ae login and ae whoami are shared. It works with the same account as the web app, and every command takes --json for scripts.

Install

With a Rust toolchain installed:

cargo install --git https://github.com/DCPRevere/aegent.dev aegent-cli

That installs ae into ~/.cargo/bin, along with the aegent compatibility entrypoint. Both use the same credentials and configuration. Add shell completions with:

ae completions zsh > ~/.zfunc/_ae

bash, fish and elvish work too.

Sign in

ae login

This prints a short code and opens aegent.dev, where you sign in and enter the code (the OAuth device flow). The CLI then holds a token for org. To use a personal access token instead, for a server or a script:

ae login --token aeg_xxxxxxxxxxxxxxxxxxxxxxxx

AEGENT_TOKEN works in place of --token, and --no-browser prints the link without opening it. Device sign-ins refresh themselves. ae whoami shows who you're signed in as, and ae logout forgets the tokens. Pick a hat with ae org use household; commands then work in that org.

Add a task

ae org add "Call the garage tomorrow 9am #car !A"

This is the same quick add as the app: natural-language dates (tomorrow 6pm, every sunday, by 31 jan), #tags, @owner, !A for priority, ~30m for effort and in:space for where it goes. Without in:, it lands in your inbox.

See today

ae org today

Today's agenda: overdue deadlines, what's scheduled, the day's appointments and deadlines coming up, the same as the Agenda view. Add --json to feed it to something else.

Sync a folder

ae org sync ~/notes

Keeps a folder of Markdown files and your spaces in step, both ways. Each space is a folder, each page a .md file named after its title, and child pages and attachments sit in a folder beside their parent:

~/notes/
├── personal/
│   ├── Car.md
│   ├── Car/
│   │   ├── Quotes.md
│   │   └── _attachments/policy-2026.pdf
│   └── Journal.md
└── household/…
  • Edit with anything: Neovim, Obsidian (point it at a space folder), or git. Changes go up 300 ms after you save.
  • If you and someone else edit the same page, the edits merge. If they can't, you get Car.conflict-<time>.md beside it, and a notification.
  • Deleting a file moves the page to the trash, never further.
  • Spaces you can only read are written read-only. Secrets are never synced.

--once syncs and exits, for cron or a git hook.

Tangle code blocks

ae org tangle Dotfiles.md --dir ~/src/dotfiles

Writes each code block that has a tangle= path to that file, as in Org's Babel. Paths are relative to --dir, or the current directory.

Run code blocks

ae org exec Rates.md --block fetch-rates

Runs the page's code blocks on your machine, and writes their output into the results block under each one. It asks before running each block, unless you pass --yes. Code never runs on the server or in the web app.

Local MCP server

ae org mcp

Runs an MCP server on standard input and output, signed in as you, for clients that prefer local servers. It has every tool the remote server has, plus tangle and execute_block, which each ask before they act. Pass --yes if your client can't ask. See Claude Code and Cursor for setup.

Work with tasks and pages

ae org ls "#car is:open"       # tasks, ranked; --status ready, --limit 20
ae org show k3x                # a task, page or entry (a short ID or link)
ae org done k3x                # complete it
ae org state k3x CANCELLED     # any keyword in the task's sequence
ae org agenda --week           # the week's agenda (--start 2026-10-05)
ae org edit k3x                # the page's Markdown in $EDITOR

edit saves against the revision it opened, so edits someone made meanwhile are merged in. If the two edits overlap, your version is kept in a .conflict.md file with conflict markers, and nothing is overwritten. --editor picks an editor other than $VISUAL or $EDITOR.

Agents, and people working the queue, use the claim workflow:

ae org claim k3x --lease 60
ae org renew k3x
ae org release k3x --note "Quotes gathered; comparing next."
ae org submit k3x --evidence "Compared three quotes in the page."
ae org approve k3x             # or: reject k3x --reason "…"

Moot

The same CLI reads and manages Moot discussions:

ae moot --help
ae moot feed --sort new --community commons
ae login --product moot
ae moot call thread '{"id":"<root-post-uuid>"}'

Public reading can be anonymous. Publishing uses a Moot token; ae login defaults to Org, so use --product moot to authorize Moot. The two products share the configuration file and account, with separate product tokens.

Other commands

Command What it does
ae org new <title> creates a page (--space, --parent)
ae org search <query> searches pages, tasks, comments and attachments (--type)
ae org attach <page> <files> attaches files to a page (--insert embed|link|none)
ae org download <ref> downloads an attachment (--out)
ae org export exports the org as a zip, or a page as a document (--format pdf --scope <page>)
ae org import status [id] lists imports, or shows one; import undo <id> reverses it
ae org import-zip <file> imports a full export into an empty org
ae org undo undoes your last action
ae org api <method> <path> calls the API directly: ae org api GET /orgs/{org}/tasks
ae org convert --from org <file or dir> converts Org files to aegent Markdown (--from md goes back)
ae org fmt <paths> reports problems in your Markdown; --check fails if there are any
ae org tblfm <page> recalculates table formulas; --check only reports