twindem.ai
Private preview · Native macOS · Signed & notarized · Windows next

Twindem Team — the nervous system around your terminal

The terminal is the stage: your AI coding agents — Claude Code, Codex — run unmediated, exactly as in your favorite terminal. Team adds everything a bare terminal can't: every tab is a board task, agents start briefed with the project's real context, a second agent reviews with a typed verdict, and nothing ships while findings are open.

shipping in private preview · auto-updating · dark theme shown
00

One platform, two native clients

Everything meets on twindem.ai — Admin (organization, projects, seats), Board (the single source of truth for work) and Docs (architecture, decisions, approved designs). Two native apps work against it: Twindem Team, where humans and AI agents build, and Twindem Pulse, where the project communicates.

Twindem Team
build · native macOS

Terminal-first shell for AI coding agents. Tasks captured with a brief, agents briefed from the board, cross-agent reviews, visual Studio, delivery gates.

tasks · phases · verdicts · docs
⟵⟶
twindem.ai
the platform
AdminBoardDocs

One account. Projects, grants and agent access flow from here — the Board is the source of truth; agents reach it through the official Twindem MCP tools.

⟵⟶
mail → tasks · digests · project chat
Twindem Pulse
communicate · native macOS

Mail, calendar and project communication with Vio AI — emails become board tasks, digests brief your day, the same projects and docs everywhere.

01

What Team does

Everything below is built and running today.

Tasks with a brief, tabs that know them

⌘T captures a task with title + brief straight onto the Board; the tab binds to its key, the phase moves to in-progress and you become the assignee the moment work starts. Numbered tabs, ⌘1–9 jumps, project-grouped strip.

Agents that start briefed

Choose the agent at capture — Claude Code or Codex — and it opens already reading the task: description, board history, approved designs. The official Twindem MCP tools and the twd-* skill family work in ANY terminal, both CLIs, zero API-key setup.

Cross-agent review, typed verdicts

⌘R (or right-click → Review with…) spawns a second agent — even from the other vendor — that reads the board record, reviews the code and posts a typed verdict. Request-changes findings block Done at the server until fixed, resolved or dismissed.

The Studio — visual work, live

/twd-design, /twd-architecture, /twd-seq-diagram: the agent proposes HTML — UI mockups, C4 diagrams, sequence flows — previewed live beside the terminal (mobile & desktop viewports). Approve publishes it to Docs, flagged and linked; future FE work must follow it.

Peripheral vision, not dashboards

Ambient chips per tab (phase, CI, turn state, git, token cost), a two-second HUD (⌘0), Needs-me/FYI notifications with per-class sounds, session digest when you return, menu-bar count, focus mode that softens noise but never silences a blocked agent.

The app maintains the agent environment

Skills, MCP server and turn-detection hooks ship inside the app and are provisioned — with consent — to Claude Code and Codex alike. A new teammate installs the app, signs in, clicks once: their agents know Twindem. Updates arrive via the app (Sparkle).

02

The main window

One tab = one agent session bound to a work item. Here: Agent 1 just finished its turn on TASK-142, the operator pressed ⌘R (confirmation bar, top), the ⌘⇧N drawer is open, and a toast announces Agent 2's verdict from another task.

Twindem Team — twindem-app
3
TASK-142 auth-fix ◦ idle 2m
TASK-139 settings-migration ⚑ verdict
TASK-127 rate-limiter ■ blocked
+
⌘R Review TASK-142 (12 files vs main, branch feat/auth-fix) with A2 split⇧⏎background tabesccancel
implement token invalidation on logout per the TASK-142 acceptance criteria
Reading the current logout flow in AuthService…
Read(src/auth/AuthService.ts)
214 lines
Edit(src/auth/AuthService.ts)
+18 −3 · revoke the refresh token server-side on logout
Write(src/auth/__tests__/logout.test.ts)
new test: redirect loop after logout
Bash(npm test -- auth)
42 passed, 0 failed · 3.8s
Done. The token is now revoked server-side on logout, with a regression test for the redirect loop. Commit 3f2a19c on feat/auth-fix, board status updated via MCP.

Notifications

⌘⇧N
Needs me · 3
TASK-1391m ago
A2: Changes requested — 3 findings, 1 blocking
⏎ Findings → A1Focus tab
TASK-1274m
A1 blocked: requesting Bash(prisma migrate) permission
Focus tab
TASK-15118m
Assigned to you: "Rate limiting on /api/auth"
⏎ Start sessionView on board
FYI
TASK-1422m
CI green on feat/auth-fix
TASK-13331m
Moved to Verify by A1 · evidence posted
TASK-142 Execute CI running A1 idle 2m ↑2 · dirty $1.84 · 96k tok
2
1
4
3
5
03

The review loop — after

The split opens: Agent 2 runs /twd-review TASK-142 — the skill pulls the work item over MCP, diffs the branch and will post its verdict through the board. The app orchestrates nothing: the board is the message bus, the app just observes.

Twindem Team — twindem-app
2
TASK-142 auth-fix ● review
TASK-139 settings-migration ⚑ verdict
+
A1 · authorclaude · opusidle — awaiting review
Done. The token is now revoked server-side on logout, with a regression test for the redirect loop. Commit 3f2a19c.
A2 · reviewerclaude · opus running 1m 12s
/twd-review TASK-142
mcp:board · get_work_item(TASK-142)
acceptance criteria: 4 · delivery mode: Reviewed
Bash(git diff main...feat/auth-fix --stat)
12 files, +214 −38
Checking token invalidation across every logout path, including session expiry…
Read(src/auth/SessionExpiry.ts)
88 lines
Found an uncovered case: the implicit logout on expiry does not revoke the refresh token…
TASK-142 Review CI green A2 running 1m $2.10 · 118k tok
04

The two-second overview — ⌘0 and the menu bar

There is no dashboard page — just a two-second HUD over the window, and a menu-bar popover for when the app is hidden. Glance, answer, back to work.

Twindem Team

Live sessions

Needs me · 3
TASK-142Revoke token on logout ReviewCIA2 1m
TASK-139Migrate settings to profile Executeverdict ⚑
TASK-127Rate limiter /api/auth Executeblocked 4m
↑↓ navigate⏎ focus tab⌘B board peekesc close
05

Session Digest — when you return

Shown automatically when you come back after >30 minutes (or ⌘D). What happened while you were away, with the next action inline — inherited straight from Digest Today in Twindem Pulse.

Friday · away for 2h 14m

While you were away, your agents advanced 3 tasks

TASK-142 — review passed, CI green. You are the last blocker: the merge has been waiting since 12:18.
A1: 2 turns · 96k tok · $1.84
⏎ Open PR
TASK-139 — A2 requested changes: 3 findings, 1 blocking (the migration drops legacy settings).
verdict posted to the board · 41m ago
⏎ Findings → A1
TASK-127 — A1 has been blocked for 1h 52m on a Bash permission.
a blocked agent is a paid worker standing idle
Focus tab
TASK-151 was assigned to you by Andrei: "Rate limiting on /api/auth".
priority: high · no session yet
Start session