What it does for you
One screen decides what needs you. Everything else is filed, linked, and kept out of your way.
Pinned
A dashboard of what you chose to keep in view, with the last activity on each card.
Next: one thing at a time
One rule decides what needs you: open, not put off, not an agent's turn, and your turn. Next shows one card from that set. Done, Later, or skip.
Input: what came in
Messages and notes your agent read from your sources, and what each one became: a task, a reply you owe, a note, or a drop with a reason.
Output: what goes out
Proposals and what was sent. Each proposal states why, impact, risk, and confidence. You approve by hash of the exact text. Edit it after, and it is a draft again.
A thread on every item
Every task, obligation, ask, and goal has a box to tell your agent what happened. It updates the item and the items around it. Activity on the page says who did what, and when.
Capture with t
From any page, tell the agent about a conversation, a call, or something you carried over by hand. It files it.
Receipts and undo
Every agent write has a receipt. Agent writes that can be undone apply at once; undo from the Receipts page, or ask the agent. A write that cannot be undone is yours to make.
Asks, obligations, goals, areas
Asks list who you wait on. Obligations are what you owe, with prep that falls due before the promise. Goals are bounded outcomes. Areas and policies cover ongoing responsibilities.
Your agent files. You direct.
para is MCP first. Agents write through MCP and get rendered text back. Claude Code, dun, or any MCP client works.
$ para setup --agent claude # runs claude mcp add, installs the skill $ para setup --agent dun $ para setup --agent generic --agent-name scribe # prints a name, URL, token once
Then open your agent, check /mcp, and run the bootstrap prompt for the first interview. An agent with only a shell can use para --actor NAME --why "reason" <command>. Setup for each harness: para help claude, para help dun.
Trust and privacy
These are invariants in the code, not preferences.
- Plain files. A vault is a folder of markdown in Obsidian format. Git is optional. SQLite is a cache you can rebuild, never the source of truth.
- One writer. All vault writes go through one package. A hand edit is detected and logged as an external edit. The event log is append-only and holds ids, metadata, and hashes, never content.
- Nothing leaves without a log. Every path out is logged as an event. Anything outward waits for your approval.
- Deny by default. The server checks, in order: client IP, Host, IP rule, token, scope, Origin. There is no
--insecure.X-Forwarded-Foris honored only from exact trusted proxies. - No OAuth, inbound or outbound.
- Domains. A vault has a domain (such as life, iode, or corp). It opens only on a machine that lists that domain, so corp data stays on the corp machine. Only the owner changes a machine's domains, by CLI. No agent tool can.
- No sync feature. Use any file-sync tool you like. A vault stays correct under it, because per-machine state lives outside the vault.
- para fetches nothing. Your agent reads your mail, chat, and trackers with its own tools, and passes para a URL and text.
Install
Linux and macOS, amd64 and arm64.
$ curl -fsSL https://para.iodesystems.com/install.sh | sh $ para setup
Installs the latest release to ~/.local/bin. Needs minisign: it checks the release signature, that the release is para's, and the tarball's sha256, and installs nothing if any check fails. Refuses to run as root. Read the script.
$ git clone https://github.com/IodeSystems/para.git && cd para $ bin/doctor # git, make, Go, node, pnpm, PATH $ make install # builds the UI and para into ~/.local/bin $ para setup
Fix every FAIL line from bin/doctor first.
para setup asks about domains, the first vault, the service, sign-in, and an optional agent. A rerun skips what is done. para setup --dry-run prints every step and changes nothing. Then para serve for the web UI, on port 7700.
Releases are signed
Each release has a manifest with every tarball's sha256, signed with minisign. The key is shared with dun: key ID 2CC27A171DE03D42. Get the key from this site (minisign.pub) and compare the ID, then verify:
$ curl -fsSLO https://github.com/IodeSystems/para/releases/latest/download/para-manifest.json $ curl -fsSLO https://github.com/IodeSystems/para/releases/latest/download/para-manifest.json.minisig $ minisign -V -p minisign.pub -m para-manifest.json