Skip to content
Fredrin
Documentation

Build on Fredrin

The Fredrin CLI

Every command names the resource it acts on. All output is JSON, because the primary caller is an agent rather than a person reading a terminal.

The grammar

fredrin <noun> <verb> [options]

Both a noun and a verb are required, always. There are no flat verbs, because fredrin start is ambiguous the moment a second resource can be started.

Inside a ticket's worktree the wrapper is ./.fredrin/fredrin, and it already knows which ticket it is.

Tickets

fredrin tickets list [project]
fredrin tickets get <id|identifier>
fredrin tickets create '{"title":"…","description":"…"}'
fredrin tickets context <id>
fredrin tickets attach <id> <file>

tickets context is the interesting one: it returns the relevance-scoped project memory for a ticket, the concepts and decisions it actually touches, rather than the most recent N documents.

Creating a ticket accepts dependsOn, and the response echoes a per-reference result. A bad reference is skipped rather than fatal, so check the echo instead of assuming the edges landed.

Goals

fredrin goals list
fredrin goals create
fredrin goals assign <goal> <ticket>
fredrin goals ask <goal>

Notes

fredrin notes list
fredrin notes read <name>
fredrin notes write <name>
fredrin notes create|rename|move|delete

These reach the project's own notebook, not files in your repository. "Read my roadmap note" means this, not a grep.

Connectors

fredrin connectors list
fredrin connectors metrics
fredrin connectors revenue
fredrin connectors deploys
fredrin connectors uptime
fredrin connectors health

Read live third-party data through the connection that already exists. Do not mint your own provider keys. See connectors.

Terminals, servers and sessions

fredrin terminals new|list|read|send|split|layout|close
fredrin servers start|stop|list
fredrin sessions list|send|reap

These drive the desktop app's own panes, which is what lets an agent start your dev server, read its output, and act on it.

Browser

fredrin browser navigate|click|type|screenshot|text|console|eval

Drive a real browser to verify a change. Screenshots stay on disk unless you explicitly attach them to a ticket, which is the privacy gate working as designed.

Output

Everything is JSON. Pipe it into jq, or let an agent parse it. Nothing prints a human-formatted table that a script would then have to unpick.

Next steps