orfc

Your team's shared brain.

Read by the people and the agents alike.

Plans, RFCs, prompts, decisions, house style — the context a team keeps re-deriving, in one place both can read and write. Docs belong to the team, not to whoever typed them. A new joiner and a fresh agent run the same command and start from the same page.

NewTeams, folders, and conflict-free pushes→

Install

$ git clone https://github.com/Abhi-1110/orfc.git && cd orfc/packages/cli && npm i && npm link

Built from source — this instance runs its own CLI, not a published package.

$ orfc setup
✓ Team: platform (sole membership)
✓ Wrote .orfc.json and AGENTS.md
✓ 12 written → ./platform/
$ orfc push plan.md# or design.html
✓ Published → /p/xK7mQ2
✓ Team: platform (.orfc.json)
$ orfc pull xK7mQ2 --stdout > plan.md
✓ 3 comments inlined
$ orfc push plan.md --update xK7mQ2
✓ Saved as unapplied v7 — head is v6, nothing overwritten

Works with

Any agent that writes markdown or HTML

How it works

1

Sync the team's context to disk. People and agents start from the same place.

2

Anyone writes and pushes. Teammates review inline, on the same doc.

3

Pull the feedback, revise, push again. Nothing is lost on the way.

Documentation

Getting started

Build the CLI, then run one command. Nothing to configure first — the CLI already points here. Once it's installed and you're on a team, orfc setup is the first command to run — before pushing or pulling anything.

Run it from the directory you want the team's folder to appear in, not inside a folder you made yourself — it creates one for you, named after the team, holding the binding, the agent instructions and the docs.

$ git clone https://github.com/Abhi-1110/orfc.git
$ cd orfc/packages/cli && npm i && npm link
$ cd ~/work # wherever you keep projects
$ orfc setup
✓ Signed in as you@company.com
✓ Team: platform (sole membership)
✓ Wrote .orfc.json and AGENTS.md
✓ 12 written → ./platform/
# no team yet? orfc setup --create "Platform"

The folder is self-contained — move it, commit it, or hand it over whole. Run setup again from inside it and it stays put; every step is skipped when it's already done. Came through an invite? You're already in one team, so nothing is asked. No team at all? It makes one.

Teams

Every doc belongs to exactly one team, decided when it's created and fixed after that. The dashboard shows the team's docs, not just yours — so a doc doesn't disappear when the person who wrote it is on holiday. Permissions are flat: every member can read, edit, and invite.

The CLI works out which team without being told, first match wins: an explicit --team, then .orfc.json in the current directory or nearest ancestor, then sole membership. If none of those decide it, push errors and lists your teams. It never guesses — a doc can't move afterwards, so a wrong guess is permanent.

$ orfc push plan.md
✓ Team: platform (.orfc.json)
$ orfc push plan.md --team growth # override
$ orfc list --mine # yours, out of the team's
$ orfc list --author alice@co.com

Two people at once

pull stamps the version it gave you into the file. When you push it back, that version comes too. If the doc moved on while you were editing, your work is stored beside the current version instead of over it — and the doc page shows it waiting.

No push is ever refused, so nothing is stranded on one laptop. There's no merge, no conflict markers, no resolving. You read both and choose: promote the stored version to latest, or dismiss it if you've already folded it in by hand.

$ orfc push plan.md --update xK7mQ2
✓ Saved as unapplied v7 → /p/xK7mQ2
→ Head is v6; yours was written from v5.
→ Nothing was overwritten. Reconcile it from the doc page.

Sync a whole team to disk

This is the part agents care about. sync pulls every published doc into the team folder, mirroring folders as real subdirectories — so an agent can grep the team's thinking instead of asking for it one document at a time. setup runs it for you the first time.

Pull-only and idempotent: files already at the right version are skipped, so re-running is cheap. Local files with no counterpart on the server are reported and left alone — a synced directory is your recovery path if a team is ever deleted, so sync can't quietly empty it. Nor does it overwrite your work: a doc you edited that the server has also moved past is reported and left exactly as it is.

$ cd platform && orfc sync
✓ research/q1/interview-protocol.md
✓ 5 written, 0 unchanged
$ orfc sync # again — nothing to do
✓ 0 written, 5 unchanged

Publishing a plan

Push any markdown or HTML file to get a shareable link. For markdown, the title is auto-detected from the first # heading; for HTML, from <title> or the first <h1>. HTML docs render the author's own theme — sanitized, but with inline SVG, charts, and styling preserved.

$ orfc push plan.md
✓ Published → /p/xK7mQ2
# link copied to clipboard, browser opens automatically

Pipe from stdin, set a custom title, organize with folders and tags, or update an existing plan:

$ cat plan.md | orfc push
$ orfc push plan.md --title "Q2 Architecture"
$ orfc push plan.md --folder "Q2 Planning" --tag rfc # organize
$ orfc push plan.md --update xK7mQ2 # update existing
$ orfc push plan.md --expires 7d # auto-expire in 7 days

Folders & tags

Group plans into folders for projects, releases, or teams. Add tags for cross-cutting categories (rfc, design, postmortem). The dashboard shows a folder tree on the left and a tag filter on top — both also editable per-row.

$ orfc push plan.md --folder "Q2 Planning/Auth" # nested paths
$ orfc push plan.md --tag rfc --tag draft # multiple tags

In-page navigation

Markdown plans render a sticky sub-nav built from their headings, scroll-tracked so reviewers can jump straight to the section they care about. Long RFCs stay readable.

Access control

By default, plans require sign-in to view. You can make them public or restrict to specific people.

Authenticated (default)

Anyone with a valid email sign-in can view the plan.

$ orfc push plan.md
Public

Anyone with the link can view, no sign-in required.

$ orfc push plan.md --access anyone
Domain-restricted

Only people with matching email domains can view. The author always has access.

$ orfc push plan.md --viewers "@company.com"
$ orfc push plan.md --viewers "alice@co.com,bob@co.com"

Notifying reviewers

Send an email to reviewers when you publish, so they know to review.

$ orfc push plan.md --to reviewer@company.com
$ orfc push plan.md --to "alice@co.com,bob@co.com"

Reviewing feedback

Reviewers open the link in their browser, highlight text, and leave inline comments. You can pull those comments back into your markdown.

$ orfc pull xK7mQ2 --stdout
<!-- [COMMENT by reviewer@co.com]
On: "the specific text they highlighted"
> Their feedback here
-->

Plain orfc pull xK7mQ2 updates the doc in your team folder instead — sync, for a single doc. Add --stdout to pipe it somewhere for revision:

$ orfc pull xK7mQ2 --stdout > feedback.md
$ orfc comments xK7mQ2 # view comments in terminal

Managing plans

The dashboard at /dashboard lists every doc the team has published with a folder tree, tag filter, and per-row controls to move or retag. The CLI mirrors the same primitives.

$ orfc list # list all your published plans
$ orfc open xK7mQ2 # open in browser
$ orfc delete xK7mQ2 # permanently delete

Editing & version history

Edit plans directly in the browser or from your terminal. Every update automatically preserves the previous version.

Web editing

Plan authors see an Edit button on their documents. Click to switch to a markdown editor with live preview. Cmd+S to save.

CLI editing

Pull, edit in your terminal editor, and push back in one command.

$ orfc edit xK7mQ2 # opens in $EDITOR
Version history

Click History on any plan to see all previous versions with diffs. Every update — from the web, CLI, or an agent — is tracked.

Agent workflow

Agents (Cursor, Claude Code, Windsurf) can use orfc to share implementation plans for human review before executing. This is the typical flow:

1

Agent generates a markdown plan for the implementation

2

Agent publishes and notifies the reviewer

orfc push plan.md --viewers "@company.com" --to you@company.com
3

A teammate reviews it and leaves inline comments on specific sections

4

Agent pulls feedback and reads inline comments

orfc pull xK7mQ2 --stdout > feedback.md
5

Agent addresses each comment, revises the plan, and re-publishes

6

Agent updates the existing plan with revisions

orfc push plan.md --update xK7mQ2

Agent prompt

orfc setup writes this into an AGENTS.md for you, read by Codex, Cursor and Claude Code alike. Here it is to paste into any other agent's rules.

## orfc — the team's shared context The team's docs are in this directory. Read them before planning. Prior decisions, RFCs, postmortems and house style live here, and reading them is cheaper and more reliable than asking someone. ### Setup — the first command, before anything else orfc setup # Run it from the directory you want the team's folder to appear in. # Signs in, works out the team, and creates one folder named after it # holding .orfc.json, this AGENTS.md, and the team's docs. # Commit both files — teammates and agents inherit the same team. ### Refresh before you plan orfc sync # Uses the directory you are in. Pull-only, and never deletes or # overwrites: a doc you edited that the server has also moved past is # reported and left alone. ### Workflow 1. Read the docs in this directory for anything relevant before writing. 2. Write your plan as markdown (plan.md) or HTML (design.html). 3. Publish it for review: orfc push plan.md --to reviewer@company.com 4. Wait for a teammate to leave inline comments in the browser. 5. Pull the feedback: orfc pull <slug> --stdout > plan.md # the file now carries <!-- [COMMENT] --> blocks AND the version # it came from, in frontmatter. Leave the frontmatter alone. 6. Address each comment, remove the comment blocks, push again: orfc push plan.md --update <slug> 7. Repeat until approved, then implement. ### If a push comes back "saved as unapplied" The doc changed while you were working. Nothing was lost and nothing was overwritten — your version is stored beside the current one. Report it and let a human decide which wins. Do NOT try to merge it yourself, and do NOT re-push to force it through. ### Key flags --team <slug> # override the team from .orfc.json --access anyone # public, no sign-in required --viewers "@domain.com" # restrict to a domain --to "a@co.com,b@co.com" # email reviewers --update <slug> # update an existing doc --title "My Plan" # custom title --folder "Q2/Auth" # nested folder path --tag rfc --tag draft # one or more tags ### Flags that destroy something sync --prune # deletes local files, and empty folders, the # server no longer has sync --force # discards your local edits for the server's copy ### Commands orfc setup [dir] # FIRST — sign in, pick a team, create its folder orfc sync # refresh the team's docs (uses the current directory) orfc push <file> # publish a doc (markdown or HTML) orfc pull <slug> # update one doc in place — sync, for a single doc orfc folder create <path> # make a folder before there is anything in it orfc folder list|rename|delete orfc edit <slug> # pull, edit in $EDITOR, push back orfc comments <slug> # view comments orfc list # list the team's docs orfc list --mine # only the ones you wrote orfc --help # full usage ### Teams and authorship Docs belong to a team, not to whoever wrote them. Anyone on the team can edit a published doc. The original author never changes — your edits show as "last edited by". ### Version history Every update preserves the previous version. Any past version can be promoted back to latest from the web, which creates a new version rather than rewinding — history is append-only.

Configuration

Config is stored at ~/.orfc/config.json. Set defaults so you don't have to repeat flags.

$ orfc config show
$ orfc config set defaultAccess anyone
$ orfc config set defaultExpiry 7d
$ orfc config set slackWebhook https://hooks.slack.com/...

CLI reference

CommandDescription
orfc setup [dir]First command to run — sign in, make or pick a team, create its folder
orfc syncRefresh the team's docs, in the directory you're in
orfc loginAuthenticate via browser
orfc push <file>Publish a markdown or HTML file
orfc pull <slug>Pull a doc with inline comments and its version
orfc folder <action>Make, rename or delete a folder without filing a doc in it
orfc comments <slug>View comments in terminal
orfc listList the team's docs (--mine for yours)
orfc open <slug>Open plan in browser
orfc edit <slug>Pull, edit in $EDITOR, push back
orfc delete <slug>Delete a plan permanently
orfc config <action>View or modify config