Async team workflow for Claude Code. Each teammate's Claude shares one git hub repo with the rest of the team, so work moves between people without meetings:
- Plate: your Asana tasks, inbox and paused work in one list.
- Handovers: start a task with a brief, pause it with a checkpoint, and pick it up later (or let someone else).
- Inbox: send requests and questions to a teammate's Claude; it sees them at its next session.
- Shared knowledge: searchable notes per site, promoted from sessions.
- RixFlow UI: a status line, a band above the prompt and a
RixFlowpane that show all of the above live.
Asana is read-only by design, and every string written to the hub passes through a secret scrubber first.
you + Claude ──┐ ┌── teammate + Claude
│ hub (a git repo) │
rixflow ─────┼──► people/<you>/ ◄─────┼───── rixflow
(commands, │ inbox/<them>/ │
MCP, hooks) │ shared/sites/… │
└─────────────────────────┘
Asana (read-only) ──► plate, briefs, sprint
- Everything is plain Markdown in a git repo that your team owns. RixFlow commits and syncs it for you (pull --rebase with bounded push retries).
- Each person writes only to their own folder. They may drop new messages into someone else's inbox but never edit them. A pre-commit check in the hub enforces this.
- Hooks brief Claude at session start ("2 new requests from pm…") and write a short session summary when a session ends.
Two plugins ship from this repository:
| Plugin | What it is |
|---|---|
rixflow |
The core: slash commands, a stdio MCP server and session hooks. |
rixflow-ui |
The live UI (status line, band, pane). It makes no model calls, so it costs no tokens. Installing it also installs rixflow. |
Register the marketplace, then install:
/plugin marketplace add hnikoloski/rixflow
/plugin install rixflow-ui@rixflow
To get the core without the UI:
/plugin install rixflow@rixflow
Then run first-time setup.
git clone https://github.com/hnikoloski/rixflow.git && cd rixflow
claude plugin marketplace add ./
claude plugin install rixflow-ui@rixflowThe plugin format is Claude Code's own, but the core is a plain CLI plus a stdio MCP server. Wire the server into opencode.json:
{ "mcp": { "hub": { "type": "local", "command": ["node", "plugin/dist/mcp.cjs"] } } }Set RIXFLOW_DIR (the hub clone) and RIXFLOW_CONFIG_DIR (this machine's config) yourself. See AGENTS.md.
In Claude Code, run:
/rixflow:setup
It prints the exact init command for your machine. Run that command in your own terminal: it asks questions and reads your Asana personal access token as hidden input. init clones the hub, asks for your name and projects folder, stores the token (system keychain, or a 0600 file) and installs the hub's pre-commit check. The hub URL must work without a password prompt (ssh-agent for ssh, a credential helper for https).
Do this once per team, then push the result to a private git remote:
node plugin/dist/hub.cjs bootstrap ./my-team-hub --members alice:dev,bob:pm --sites AC:acme,GL:globex-web
git -C ./my-team-hub remote add origin <private-git-url>
git -C ./my-team-hub push -u origin main--sites maps short site codes to project folder names, so a task tagged AC opens in ~/projects/acme.
| Command | What it does |
|---|---|
/rixflow:plate |
Everything on your plate: Asana tasks, inbox, paused work |
/rixflow:start <task id or plate number> |
Start an Asana task with a handover brief |
/rixflow:checkpoint [task id] |
Pause the current task and save where you left off |
/rixflow:resume <task id> |
Resume a task from its handover and checkpoint |
/rixflow:wrapup [task id] |
Finish the task and capture what the team should know |
/rixflow:inbox [message id] |
Show your inbox, or open one message |
/rixflow:send <person> <task id> [note] |
Send a teammate's Claude a request about a task |
/rixflow:ask [person] <question> |
Search the hub first, then ask a teammate |
/rixflow:setup |
Show how to set up this machine |
/rixflow-ui [refresh] |
Toggle the RixFlow pane, or refresh it now |
The UI runs only in interactive terminal sessions. With the pane focused, c checkpoints, w wraps up and r refreshes.
/plugin marketplace update rixflow
/plugin update rixflow-ui@rixflow
/plugin update only picks up a new version. If you're working from a local clone without bumping the version, reinstall instead.
Requires Node 20+ and git on PATH (the tests build real temporary repos).
git clone https://github.com/hnikoloski/rixflow.git && cd rixflow
npm install
npm run check # typecheck + tests + build, and fails if plugin/dist is stale| Command | Purpose |
|---|---|
npm test |
All tests (Vitest) |
npx vitest run tests/core/scrub.test.ts |
One test file |
npm run typecheck |
Strict tsc |
npm run build |
Bundle src/ into plugin/dist/*.cjs. The bundles are committed and are what runs, so rebuild after any src/ change. |
claude --plugin-dir ui |
Run the UI mod straight from this checkout |
claude plugin validate ui && claude plugin test ui |
Validate the mod and run its kit tests |
AGENTS.md is the contributor guide. It covers the layout, the rules the code enforces (read-only Asana, scrubbing, hooks that never fail a session) and conventions.
MIT. The bundles in plugin/dist/ include third-party packages under their own licenses (MIT and ISC): @modelcontextprotocol/sdk, commander, yaml and zod.