Cos — your chief of staff
4
stars
97
commits
TypeScript
primary language
Sep 10, 2026
updated
You have two lives — work and personal. Cos is where they finally meet.
The persistent memory and judgment layer your agentic OS lacks — owned by you.
See it ↓ — screenshots of every view. Animated demo (coming soon): a noisy inbox collapses into one triaged board card and a linked vault page — noise in, signal out.
Work wants you on top of everything — the thread you can't drop, the ask buried three replies deep, the deadline nobody flagged. Your personal life runs underneath it all day: your partner on WhatsApp, an unplayed voice note, your mum's email about the weekend. No one holds both, so you become the router — wiring every message to the person, the history, the next move, by hand. One world ends up handled; the other, three days behind.
Cos takes the router job. It reads your work email and your personal WhatsApp, watches your calendar and voice notes, decides what actually needs you, and lays work and life on one board — while quietly building a vault: a private second brain that remembers every person, deal, and decision, so the context is already there when you need it. The two worlds you could never hold at once, finally in one place.
And it's lightweight by design. Cos is a layer on Claude Cowork, not a new assistant to host — Cowork is the brain that reads, classifies, and routes; Cos gives it the board, the vault, and the tools to act. No separate agent server, no VPS, no second phone number to stand up the way self-hosted stacks ask for. You instruct it the way you already talk to everyone — drop a note in WhatsApp or email — and schedule it to sweep your channels on a regular basis: triaging the noise, opening and updating cases, running the recurring work — a starter set of recipes is below. All it needs is your machine on and connected; reach it from Claude when you're away from your desk.
human / agent, so you can always see what the agent did, when, and tell its edits from your own.🔬 Want the engineering depth — on-device semantic search (turbovec + model2vec), the Llama-Prompt-Guard injection gate, AES-256-GCM off-site backups, a schema-versioned store, 60+ MCP tools? → The deep feature tour.
One local-first board where work and life meet — with a live activity log, a private vault, and the triage that feeds them.
![]() Priorities — what actually needs you, today | ![]() Inbox — Gmail, WhatsApp & voice notes, one triage |
![]() Calendar — the week at a glance | ![]() Reminders — time-based nudges |
![]() Vault — the private, interlinked second brain | ![]() Activity — every change: human / agent |
![]() Security — the prompt-injection Guard & quarantine | ![]() Backups — encrypted, off-site snapshots |
![]() Trash — soft-delete with 7-day retention | ![]() In Claude Cowork — drive the board by chat |
![]() Meeting prep — Cos briefs you from the vault |
Two pillars, one operator. The agent drives both surfaces; so do you.
voice · email · WhatsApp · calendar you — from your phone
│ │
│ ┌─────────▼─────────┐
│ │ Claude Dispatch │ remote control: reach
│ │ converse · add │ Cos from anywhere
│ │ to the board │
│ └─────────┬─────────┘
┌────────▼──────────────────────────────────────▼────────┐
│ Claude Cowork (the agent) │ the operator — classify & route
└─────────────────┬────────────────────────┬─────────────┘
knowledge │ │ action
┌───────────▼─┐ ┌────▼────────┐
│ VAULT │◄───────────────►│ BOARD │
│ second │ │ kanban of │
│ brain │ │ what's left │
└──────────────┘ └─────────────┘
GUARD (fail-closed) · SEARCH (semantic) · MCP (exposes it all)
board · openwhispr · calendar · guard · vault (five core) expose it all to agents over local stdio, with an optional WhatsApp add-on. The full inventory is in the deep feature tour.git clone https://github.com/philipyaz/cos.git
cd cos
Then run the cos-setup skill in Claude Code — the single first-run entry point. It sequences the four component setups in dependency order:
setup-vault → guard-setup → mcp-bridge-setup → backup-recovery
When it finishes, open the board at your $BOARD_URL (http://localhost:$BOARD_PORT by default) and start triaging.
Already running Cos and pulling an update? Run the
cos-upgradeskill (or, by hand,git pullthennode scripts/upgrade-check.mjs). The store migrates itself on the next board start, but nothing else does — the production board, the launchd bridges, the Cowork skill bundles and scheduled tasks all keep running the old version silently until they are rebuilt, kicked, or re-uploaded.upgrade-checkderives exactly that list from what your pull changed. Runbook + per-release notes: Upgrading.
A second machine? To just view your board from another device, you need nothing on it. On your main machine — the hub — run the production board (
cd board && npm run build && npm run start, or theboardappLaunchAgent) and expose it on your Tailscale network withtailscale serve --bg 3000; then open the portlesshttps://<hub>.<tailnet>.ts.netin a browser on any tailnet device — full read/write UI, zero setup there. Only if you also want Claude / Cowork to act on the board from that device do you runspoke-setup, which wires thin local MCP wrappers to the hub (Cowork can't consume a remote HTTP MCP, so a local shim is the only way). To move the hub role between machines, runhub-handover. Nothing syncs — one store, on the hub. See Multi-device.
Skills in Cowork. Claude Code auto-loads skills from the repo's
board/.claude/skills/(and.claude/skills/for setup skills) directly. Claude Cowork Desktop adds custom skills through its UI (it doesn't read the repo filesystem) — upload the committedboard/.claude/skill-bundles/vault-operations.zip, which drives the vault's async submit-then-poll ingest, via Customize →+(Skills) → Create skill, the same as every other bundle inboard/.claude/skill-bundles/— then record it withnode scripts/mark-skill-uploaded.mjs vault-operations, so/cos-upgradecan later compute exact bundle drift. (Even without it, theingest/ingest_statustool descriptions carry the same guidance.)
Want to kick the tires on the board alone, without wiring the MCP bridges, vault, or Guard? You can run just the Next.js app:
source "$(git rev-parse --show-toplevel)/config/load-config.sh" # exports $BOARD_PORT, $BOARD_URL, paths
cd board
npm install
npm run dev # board on $BOARD_URL (http://localhost:3000 by default)
Then open $BOARD_URL (http://localhost:$BOARD_PORT, default http://localhost:3000). The board's dev script first runs mcp/ensure-bridges.sh, which only nudges the optional MCP bridges + search sidecar — a cold or absent bridge just WARNs and the app still starts, so the bridges are optional for a board-only run. For the full system (vault, Guard, MCP servers for Claude Code / Cowork, off-site backup), run the cos-setup skill above instead.
Setup is the boring half; the fun is what you make of it. Cowork runs scheduled tasks — type /schedule, pick a cadence (hourly, daily, weekly, weekdays), and Cos runs the routine on its own against your local board and vault. A starter set worth wiring up on day one — paste each as the task's prompt, then write your own:
/mail-to-board reconciles Gmail onto the board and /whatsapp-triage does the same for WhatsApp — each sweeps both received and sent messages, scans anything untrusted through Guard first, resolves every thread to the person and case it belongs to, opens or updates the cards that genuinely need you, keeps one card per matter, and never undoes a manual edit. Run them as their own scheduled tasks (paste /mail-to-board and /whatsapp-triage as the prompts), or sweep everything at once: "Sweep my Gmail, WhatsApp, and new voice notes since your last run. Scan anything untrusted through Guard first, resolve each message to the person and case it belongs to, open or update board cards for what genuinely needs me, and leave the rest in the feed."The same guardrails hold on a timer as in person: untrusted mail is scanned before it's read (the scanner fails closed), and every change a scheduled run makes lands in the same activity log — attributed to agent — for you to review, with anything that should have you in the loop proposed rather than done. Scheduled tasks run while your machine is awake and Cowork is open; miss a window and the run catches up next time.
Each recipe is just a prompt over the same board and vault — which is the whole point. The two compound until Cos is two things at once: an efficient context layer for your agents, and a clarity layer for you.
How does it run day to day? You give Cos instructions in plain language — in Claude, or by dropping a note in WhatsApp or email — and Claude Cowork does the work, on demand or on a schedule — see Recipes for routines worth setting up. All it needs is your machine on and connected; there's no separate server to host.
What leaves my machine? Your vault, board data, and voice transcripts live in local files (gitignored). Cos only reaches out to the services you connect — Anthropic for the model, and Gmail / Google Calendar / WhatsApp if you wire them.
Do I need a paid Claude / Cowork plan? Cos is a layer on Claude Cowork and uses the Anthropic API, so you need access to those. Cos itself is open-source and free.
What gets filtered vs. surfaced? Communication noise (cold outreach, spray email) gets filtered down; what actually needs you becomes a board case linked to its context. You always see the full feed if you want it.
Can I run without the vault, Guard, or WhatsApp? Yes. The board stands on its own; the vault, Guard, search, and the WhatsApp add-on are optional layers you can add. Search has a keyword fallback, and Guard defaults to OFF — turn it on from the board's /security surface.
Is it maintained? Yes — active development. See the commit history.
docs/⭐ If Cos makes your day quieter, star this repo.
59 commits
38 commits
TypeScript
58.9%
JavaScript
33.3%
Python
4.9%
Shell
2.9%
Cos — your chief of staff
4
stars
97
commits
TypeScript
primary language
Sep 10, 2026
updated
You have two lives — work and personal. Cos is where they finally meet.
The persistent memory and judgment layer your agentic OS lacks — owned by you.
See it ↓ — screenshots of every view. Animated demo (coming soon): a noisy inbox collapses into one triaged board card and a linked vault page — noise in, signal out.
Work wants you on top of everything — the thread you can't drop, the ask buried three replies deep, the deadline nobody flagged. Your personal life runs underneath it all day: your partner on WhatsApp, an unplayed voice note, your mum's email about the weekend. No one holds both, so you become the router — wiring every message to the person, the history, the next move, by hand. One world ends up handled; the other, three days behind.
Cos takes the router job. It reads your work email and your personal WhatsApp, watches your calendar and voice notes, decides what actually needs you, and lays work and life on one board — while quietly building a vault: a private second brain that remembers every person, deal, and decision, so the context is already there when you need it. The two worlds you could never hold at once, finally in one place.
And it's lightweight by design. Cos is a layer on Claude Cowork, not a new assistant to host — Cowork is the brain that reads, classifies, and routes; Cos gives it the board, the vault, and the tools to act. No separate agent server, no VPS, no second phone number to stand up the way self-hosted stacks ask for. You instruct it the way you already talk to everyone — drop a note in WhatsApp or email — and schedule it to sweep your channels on a regular basis: triaging the noise, opening and updating cases, running the recurring work — a starter set of recipes is below. All it needs is your machine on and connected; reach it from Claude when you're away from your desk.
human / agent, so you can always see what the agent did, when, and tell its edits from your own.🔬 Want the engineering depth — on-device semantic search (turbovec + model2vec), the Llama-Prompt-Guard injection gate, AES-256-GCM off-site backups, a schema-versioned store, 60+ MCP tools? → The deep feature tour.
One local-first board where work and life meet — with a live activity log, a private vault, and the triage that feeds them.
![]() Priorities — what actually needs you, today | ![]() Inbox — Gmail, WhatsApp & voice notes, one triage |
![]() Calendar — the week at a glance | ![]() Reminders — time-based nudges |
![]() Vault — the private, interlinked second brain | ![]() Activity — every change: human / agent |
![]() Security — the prompt-injection Guard & quarantine | ![]() Backups — encrypted, off-site snapshots |
![]() Trash — soft-delete with 7-day retention | ![]() In Claude Cowork — drive the board by chat |
![]() Meeting prep — Cos briefs you from the vault |
Two pillars, one operator. The agent drives both surfaces; so do you.
voice · email · WhatsApp · calendar you — from your phone
│ │
│ ┌─────────▼─────────┐
│ │ Claude Dispatch │ remote control: reach
│ │ converse · add │ Cos from anywhere
│ │ to the board │
│ └─────────┬─────────┘
┌────────▼──────────────────────────────────────▼────────┐
│ Claude Cowork (the agent) │ the operator — classify & route
└─────────────────┬────────────────────────┬─────────────┘
knowledge │ │ action
┌───────────▼─┐ ┌────▼────────┐
│ VAULT │◄───────────────►│ BOARD │
│ second │ │ kanban of │
│ brain │ │ what's left │
└──────────────┘ └─────────────┘
GUARD (fail-closed) · SEARCH (semantic) · MCP (exposes it all)
board · openwhispr · calendar · guard · vault (five core) expose it all to agents over local stdio, with an optional WhatsApp add-on. The full inventory is in the deep feature tour.git clone https://github.com/philipyaz/cos.git
cd cos
Then run the cos-setup skill in Claude Code — the single first-run entry point. It sequences the four component setups in dependency order:
setup-vault → guard-setup → mcp-bridge-setup → backup-recovery
When it finishes, open the board at your $BOARD_URL (http://localhost:$BOARD_PORT by default) and start triaging.
Already running Cos and pulling an update? Run the
cos-upgradeskill (or, by hand,git pullthennode scripts/upgrade-check.mjs). The store migrates itself on the next board start, but nothing else does — the production board, the launchd bridges, the Cowork skill bundles and scheduled tasks all keep running the old version silently until they are rebuilt, kicked, or re-uploaded.upgrade-checkderives exactly that list from what your pull changed. Runbook + per-release notes: Upgrading.
A second machine? To just view your board from another device, you need nothing on it. On your main machine — the hub — run the production board (
cd board && npm run build && npm run start, or theboardappLaunchAgent) and expose it on your Tailscale network withtailscale serve --bg 3000; then open the portlesshttps://<hub>.<tailnet>.ts.netin a browser on any tailnet device — full read/write UI, zero setup there. Only if you also want Claude / Cowork to act on the board from that device do you runspoke-setup, which wires thin local MCP wrappers to the hub (Cowork can't consume a remote HTTP MCP, so a local shim is the only way). To move the hub role between machines, runhub-handover. Nothing syncs — one store, on the hub. See Multi-device.
Skills in Cowork. Claude Code auto-loads skills from the repo's
board/.claude/skills/(and.claude/skills/for setup skills) directly. Claude Cowork Desktop adds custom skills through its UI (it doesn't read the repo filesystem) — upload the committedboard/.claude/skill-bundles/vault-operations.zip, which drives the vault's async submit-then-poll ingest, via Customize →+(Skills) → Create skill, the same as every other bundle inboard/.claude/skill-bundles/— then record it withnode scripts/mark-skill-uploaded.mjs vault-operations, so/cos-upgradecan later compute exact bundle drift. (Even without it, theingest/ingest_statustool descriptions carry the same guidance.)
Want to kick the tires on the board alone, without wiring the MCP bridges, vault, or Guard? You can run just the Next.js app:
source "$(git rev-parse --show-toplevel)/config/load-config.sh" # exports $BOARD_PORT, $BOARD_URL, paths
cd board
npm install
npm run dev # board on $BOARD_URL (http://localhost:3000 by default)
Then open $BOARD_URL (http://localhost:$BOARD_PORT, default http://localhost:3000). The board's dev script first runs mcp/ensure-bridges.sh, which only nudges the optional MCP bridges + search sidecar — a cold or absent bridge just WARNs and the app still starts, so the bridges are optional for a board-only run. For the full system (vault, Guard, MCP servers for Claude Code / Cowork, off-site backup), run the cos-setup skill above instead.
Setup is the boring half; the fun is what you make of it. Cowork runs scheduled tasks — type /schedule, pick a cadence (hourly, daily, weekly, weekdays), and Cos runs the routine on its own against your local board and vault. A starter set worth wiring up on day one — paste each as the task's prompt, then write your own:
/mail-to-board reconciles Gmail onto the board and /whatsapp-triage does the same for WhatsApp — each sweeps both received and sent messages, scans anything untrusted through Guard first, resolves every thread to the person and case it belongs to, opens or updates the cards that genuinely need you, keeps one card per matter, and never undoes a manual edit. Run them as their own scheduled tasks (paste /mail-to-board and /whatsapp-triage as the prompts), or sweep everything at once: "Sweep my Gmail, WhatsApp, and new voice notes since your last run. Scan anything untrusted through Guard first, resolve each message to the person and case it belongs to, open or update board cards for what genuinely needs me, and leave the rest in the feed."The same guardrails hold on a timer as in person: untrusted mail is scanned before it's read (the scanner fails closed), and every change a scheduled run makes lands in the same activity log — attributed to agent — for you to review, with anything that should have you in the loop proposed rather than done. Scheduled tasks run while your machine is awake and Cowork is open; miss a window and the run catches up next time.
Each recipe is just a prompt over the same board and vault — which is the whole point. The two compound until Cos is two things at once: an efficient context layer for your agents, and a clarity layer for you.
How does it run day to day? You give Cos instructions in plain language — in Claude, or by dropping a note in WhatsApp or email — and Claude Cowork does the work, on demand or on a schedule — see Recipes for routines worth setting up. All it needs is your machine on and connected; there's no separate server to host.
What leaves my machine? Your vault, board data, and voice transcripts live in local files (gitignored). Cos only reaches out to the services you connect — Anthropic for the model, and Gmail / Google Calendar / WhatsApp if you wire them.
Do I need a paid Claude / Cowork plan? Cos is a layer on Claude Cowork and uses the Anthropic API, so you need access to those. Cos itself is open-source and free.
What gets filtered vs. surfaced? Communication noise (cold outreach, spray email) gets filtered down; what actually needs you becomes a board case linked to its context. You always see the full feed if you want it.
Can I run without the vault, Guard, or WhatsApp? Yes. The board stands on its own; the vault, Guard, search, and the WhatsApp add-on are optional layers you can add. Search has a keyword fallback, and Guard defaults to OFF — turn it on from the board's /security surface.
Is it maintained? Yes — active development. See the commit history.
docs/⭐ If Cos makes your day quieter, star this repo.
59 commits
38 commits
TypeScript
58.9%
JavaScript
33.3%
Python
4.9%
Shell
2.9%