Repository navigation
Releases
v1.4.0: set up without a terminal, safer setup, novice-first README
Built for people who have never opened a terminal. Compabob now installs and
sets up entirely from the Claude desktop app or VS Code, the README walks each
path step by step, and setup can no longer leave a half-finished workspace behind.
Before you update: .claude/settings.json changes in two small ways (saving
to vault/, memory/, .tmp/ and config/user.config.yaml no longer asks for
permission; a skill-listing budget key). If you edited that file, update.sh will ask you to merge it.
Setup now stops before creating anything when Python 3 is missing.
Added
/setupskill: the whole setup from inside the chat. It asks the questions
in plain words, runssetup.shwith the answers (one permission box), and
confirms from the files it wrote. No terminal needed.setup.shoptions:--assistant,--user,--role,--language,
--persona,--focus,--integrations/--no-integrations,
--non-interactive,--help. Without options it asks the same seven questions
as before. CI now uses the options instead of piped newlines.- Session-start notices: when setup has not run or did not finish, the
assistant says so and offers/setup; once after setup it greets you by name and
suggests a first task; it notes when the kit was updated since the last session
and which kit files you have edited. skepticagent: checks a claim or finding against the files before anyone
acts on it; read-only, never edits or sends./design-precheckskill: the pre-mortem the plan gate asks for, run by three
advisors in parallel and folded into the plan. The plan gate's message now
points to it, and it accepts numbered lists as well as bullets.- Constitution: the plain requests a non-technical user will make ("update the
kit", "run the health check") mapped to the kit's scripts; two routing rules for
when two agents seem to apply; an approved plan is not approval to send its
draft; a declined permission gets narrower options, never a workaround. - README: rebuilt around three paths (desktop app, VS Code, terminal) with
exact clicks, a "what you will see the first time" section (trust question,
permission boxes, style notes, where your files live), and one honest time budget. tests/test-setup-noninteractive.sh(38 cases) andtests/test-session-start.sh
(17 cases).
Fixed
- Setup left placeholders behind forever when Python was missing: it copied
the seed files, failed while filling them in, and a re-run then skipped them as
"already exists". It now stops before creating anything, and a re-run fills any
blank it finds, so an older half-finished setup repairs itself. - Re-running setup printed the name you just typed, not the one on disk. It
now says "Already set up" and shows what is stored. - The style check read the previous reply. Claude Code can run the Stop hook
before the transcript holds the final reply; the hook now reads the reply from
its input (last_assistant_message). - Every fresh clone showed a modified kit file:
modules/dictation/install.sh
was tracked without its executable bit, so setup'schmodchanged it and
update.shhad to set it aside on every run. update.shon a conflict told you to rungit stash popin the middle of a
merge, which fails. It now shows git's message, the files that need a decision,
andgit merge --abortto put everything back.- The walkthrough never installed
uv, which two of the integrations need. - The demo image showed five personas and a username default that no longer exist.
- Docs: the update description, the pre-mortem hook listed as "optional" although it
ships, and a stale model ID example (claude-sonnet-5-5).
Removed
docs/qa-findings-2026-05-24.md, the May QA log (every item was fixed in 1.1.1;
it stays in the git history).
v1.3.0: style system, tests, hybrid search, /council, pre-mortem gate
The style system, a test suite, and three features from the setup this kit is
distilled from: hybrid memory search, /council, and a pre-mortem gate for
high-stakes plans.
Before you update: the new style check runs after every reply. It starts in
warn mode, which only shows a one-line note; set style_gate: block or off
in config/user.config.yaml (the update adds the key for you). Most kit text
files changed in this release, because every em dash was removed from them, so
update.sh will ask you to merge any kit file you edited yourself.
git diff --stat v1.2.0 v1.3.0 lists them.
Added
- Style check hook (
hooks/hook-style-gate.py, runs when a reply ends):
flags em dashes used as connectors and paragraphs over about 700 characters
in long replies. Code, blockquotes, and dialogue dashes are ignored.
style_gate: warn | block | off. /councilskill: two advisors and a dissenter assigned to argue the
other side, in parallel; the recommendation must answer each objection. For
decisions that are hard to reverse.- Pre-mortem gate (
hooks/hook-plan-premortem.py): when you approve a plan
that is irreversible, touches many people, or commits weeks of work, it asks
for a pre-mortem fromstrategy-advisorfirst. - Hybrid memory search: keyword search always, plus search by meaning when
Ollama is running, merged into one ranking. Results show the heading path
they came from. Rebuild the index once with/index-memoryafter updating. - Session-start notices: today's scheduled brief, scheduled-run failures
from the last week, aMEMORY.mdover 12KB, and config keys a kit update
added. - Test suite:
bash tests/run-all.shruns everything CI runs (syntax,
shellcheck, hook behaviour, frontmatter, docs versus tree). CI adds a macOS
job.
Changed
- Direct output style rewritten with what the upstream setup learned about
brevity: cut whole categories of content, a filler test for every sentence,
bullet-first reports, floors for outward messages and corrections. It now
keeps Claude Code's built-in coding instructions (keep-coding-instructions). - The constitution is shorter: style rules live only in the output style,
the data-quality checklist only in theanalystagent. Adds a stopping rule:
keep going until the task's finish line unless you need the user. - Prompt-injection defender also scans MCP tool output (mail, browser,
search) and skips the kit's own files. - Handover notes older than a week are no longer loaded into every new
session; the assistant is told the note exists instead. - Scheduled runs tell the assistant nobody is watching, so it does not stop
to ask questions. - Skill descriptions name their neighbour both ways (for example
/morning-briefand/tasks), so the right one gets picked. /reflectrecords unapproved memory proposals in today's daily note in
the format/memory-debtreads, so the two skills finally connect./chart-tufteis a grader that/visual-explainercalls after building
a chart.- No em dashes anywhere in the kit.
Fixed
comms-guardblocked readingmodules/telegram/send.sh, not just
running it.- Two skill descriptions were invalid YAML (an unquoted colon).
Full changelog: v1.2.0...v1.3.0
v1.2.0: fixes, Claude Code drift, simpler kit
Maintenance release: the modules and skills that shipped since 1.1.1, fixes
for bugs found in a full audit, the Claude Code changes since June, and a
smaller kit. Safe to pull with ./update.sh: your vault/, memory/,
config/user.config.yaml, .mcp.json, and .env are untouched, and any new
config flags are added for you.
If you edited kit files, update.sh may ask you to merge the ones this
release also changed: every agent in .claude/agents/, .claude/settings.json,
CLAUDE.md, the add-agent, mcp-debug, and memory-debt skills, setup.sh,
update.sh, everything in scripts/ and docs/, and the proactive, telegram,
transcribe, dictation, and integrations modules. git diff --stat v1.1.1 v1.2.0
lists them all. Personas and the other skills are unchanged.
Added
dictationmodule: a cleanup endpoint your dictation app (e.g. Handy)
posts to. It fixes punctuation and fillers, and rewrites words it keeps
getting wrong using a glossary that grows itself from recurring corrections.
OpenAI-compatible upstream (Groq by default, Ollama for fully local)./weekly-reviewskill: end-of-week review of what got done, what
slipped, decisions, commitments, and next week's top three (#16).researcherpersona preset for academia and R&D (#19).- Spanish README intro at
docs/i18n/README.es.md(#23). - Linux and WSL troubleshooting section in the README (#14).
scripts/migrate-config.sh: adds config keys a kit update introduces,
inside the right block, with a.bak; never changes a value you set.
update.shruns it, andscripts/init.shwarns when keys are missing.scripts/lib/common.sh: shared output helpers andset_config_flag.transcribemodule (highly encouraged) — one-hotkey local call recording +
transcription. A toggle script drivesffmpegto capture audio and
mlx-whisperto transcribe it on-device: first run records, second run stops,
transcribes, copies the text to your clipboard, and files a markdown transcript
(with frontmatter) intovault/raw/meetings/for your notes pipeline. Defaults
to an aggregate device so both sides of a call are captured. No cloud service,
no API key, audio never leaves the machine. Device names are overridable via
TRANSCRIBE_DEVICE_*env vars (record.py deviceslists yours); optional
Hammerspoon/Raycast hotkey binding documented. Opt-in viatranscribe: true.crm-mergemodule +/merge-contactsskill — folds Google Contacts (Takeout
vCards), a LinkedIn data export (Connections + messages), and your vault
People/notes into one local source of truth: a SQLite DB, a JSON file, and a
self-contained offline HTML browser. Identity resolution uses union-find on
three keys (verified email, LinkedIn slug, normalized name) with a common-name
collision guard, so duplicates collapse without over-merging generic names.
Relationship strength (LinkedIn message count) ranks records. No credentials,
all stdlib, idempotent. Outputs are git-ignored.lead-pipelinemodule +/build-listskill — turns a raw candidate list
into a ranked, CRM-aware outbound list through staged steps that write one CSV
per stage (discover → clean → dedup-against-CRM → enrich → score → top-N).
The deterministic stages (clean,dedup,score) run as a stdlib script;
discovery and enrichment run as assistant steps over optional MCP servers (exa
free tier minimum; an enrichment provider optional). Dedup tags each lead
proceed(cold),warm(you already know someone at the account, route the
intro), orskip(already a known contact), so you never enrich or cold-email
a relationship. ICP scoring is a tunable JSON rubric (icp.example.json)./chart-tufteskill — self-grade rubric for any quantitative chart,
grounded in Edward Tufte's Visual Display of Quantitative Information.
Nine criteria, ten genres, seven remedies, plus a 114-line
references/vdqi-catalogue.mdwith named failures (NYT MPG 14.8, TIME
barrel 59.4) and named exemplars (Minard, Marey, Snow, Playfair). Designed
to run as the final pass inside/visual-explainerwhenever the output is
a chart./mcp-debugskill — health-check, trace, or audit your configured MCP
servers when tools fail silently. Three modes:status(per-server
reachability),trace <tool>(likely failure mode for one tool),audit
(recommendations for unused / high-error / duplicate servers). Reads
~/.claude.jsonand./.mcp.json; redacts secrets in every output./memory-debtskill — review and apply memory updates that earlier
sessions proposed but never wrote. Scansvault/Daily/,vault/Reflections/,
andvault/Journal/for- [ ]proposals from/reflect, classifies each
as PENDING / STALE / OBSOLETE / APPLIED, then inapplymode walks through
approvals one by one. Closes the loop between/reflect(proposes) and
memory/.
Changed
- Agents follow your model. Every agent uses
model: inheritinstead of
sonnet, so switching models in Claude Code switches the agents too. On a
Pro plan, see the README for pinning them back to Sonnet. Scheduled modules
still run on Sonnet. - Install Claude Code with the native installer
(curl -fsSL https://claude.ai/install.sh | bash); npm stays documented as a
fallback (Node 22+). Docs links point at code.claude.com. - README model section rewritten (closes #9): Claude Code's default is now
Opus 5.5 on every paid plan; how to change it per session, per project, or
globally. - Integrations: pins bumped (
@playwright/mcp0.0.82,scrapling-fetch-mcp
0.2.4,mcp-server-time2026.8.18,exa-mcp-server3.4.1, which needs
Node 20+). Gmail and Calendar now point at Claude's own connectors. - SessionStart hook also runs after
/clearand in forked sessions. - Config template: flags for
crm_mergeandlead_pipeline; persona list
shows all six. transcribeanddictationinstall their Python dependency into a
module venv (Homebrew Python refuses a globalpip install);record.py
switches to its venv on its own, so hotkeys keep working.update.shsays what to do on a local-only branch or detached HEAD
instead of blaming the network.scripts/init.shchecks for Python 3.10+ and counts only real agents.
Removed
- Tool-scope guard hook (never released): it was not wired into
settings.json, neededjq, and matched no context the kit sets. - Stub modules
extra-agents,team, andwhatsapp, which were README
files only. Their reasoning now lives in the "Not built" section of
modules/README.md; the roadmap is issue #12. mcp-server-fetchfrom the integrations catalog (Claude Code's built-in
WebFetch covers it) and the emptygooglecategory.- Dead config keys:
preferences.timezone,extra_agents,team. Existing
configs keep them; nothing reads them.
Fixed
- Weekly review ran on Saturday on macOS: launchd counts Sunday as 0, so
Weekday 6was Saturday. Now Friday. - Scheduled runs could not find
claudeunder launchd's minimal PATH
(proactive,telegram). - The agent template registered as a real agent. It is now
.claude/agents/_agent-template.md.template. install-integrations.shleft an empty.mcp.jsonon runs that added
nothing.- Docs claimed
config/is git-ignored; onlyconfig/user.config.yamlis. /add-agentand the customization guide pointed at
_orchestrator-reference.mdas an agent registry; routing lives in
CONSTITUTION.md.- Telegram README said the hook "blocks until you approve"; the hook always
blocks, and you send withsend.shyourself.
Full changelog: v1.1.1...v1.2.0
v1.1.1 — QA pass bug fixes
Same-day follow-up to v1.1.0. Ran a full QA pass across 5 personas × 10 input edge cases × idempotency × update.sh × integrations × init.sh × a pristine Docker Ubuntu run × a headless claude -p smoke. 11 findings, all fixed in this release.
Full QA report: docs/qa-findings-2026-05-24.md.
What's fixed
P1 — silent data loss on re-run
setup.shre-run silently overwrotememory/topics/role-and-priorities.mdif the user started with thegeneralistpersona and edited the file. The "untouched template" guard treated[the most important thing]as a marker, but that string also lived inconfig/personas/generalist.md, so user edits were wrongly classified as untouched and overwritten. Marker tightened to[fill in], which only appears in the shipped template. The other four personas (consultant,engineer,sales,founder) were never affected.
P2 — confusing or imprecise behavior
whoamidefault for "Your name" leaked the OS account name (e.g.rootinside Docker) intomemory/MEMORY.mdif the user hit Enter. Default removed; setup re-prompts.- Persona seeding ran before placeholder replacement, so seeded personas could ship with
{{USER_NAME}}still on disk. Order flipped. - Piped-mode setup (
printf ... | ./setup.sh) swallowed the final newline and the integrations prompt collided with EOF. Newline guard added. install-integrations.shprinted "Done." on no-op runs (unknown category, empty selection). Now exits non-zero with a clear "nothing installed" message..mcp.jsonwas created eagerly even when no integrations were selected, leaving an empty file. Creation deferred until at least one integration writes to it.init.shwarned instead of failing when integrations were enabled but.mcp.jsonwas missing.
P3 — polish
update.shnow shows the list of pulled commits and a clearer "your data lives here" banner.- README — clarified which paths are "yours" vs. tracked kit content, corrected the walkthrough prompt count, added a YAML-escape note for names with apostrophes.
Upgrade
cd /path/to/your/compabob
./update.shYour vault/, memory/, config/user.config.yaml, .mcp.json, and .env are untouched. If you started with the generalist persona and edited memory/topics/role-and-priorities.md before this release, please check that file once after upgrading.
Full diff
v1.1.0 — Post-launch hygiene
Four days after launch. Pure hygiene release — no module changes. The aim is to make the kit feel as alive on day 30 as on day 1, before the silence sets in.
What's new
CI
- Weekly fresh-clone smoke test at
.github/workflows/smoke.yml. Runs on every push, every PR, every Monday 06:00 UTC, and on-demand. Each run:bash -non all shell scripts,./setup.shnon-interactive,scripts/init.sh, integrations-catalog JSON validation. Bit-rot from upstream Claude Code changes will surface here, not in someone's first ten minutes with the kit. - CI badge now visible at the top of the README.
README
- Badges row: CI, License, Stars, Last commit.
- New "How this differs" section comparing Compabob to raw Claude Code, awesome lists, multi-agent dev-team frameworks, and rolling your own from scratch.
memory-searchmodule status fixed: was "Roadmap" in the modules table, but ships available (keyword FTS5 by default, semantic via Ollama if installed).
Community + signals
.github/FUNDING.ymlsurfaces a Sponsor button (LinkedIn — no Sponsors listing). Visible maintenance cue.CHANGELOG.mdin Keep-a-Changelog format. Past + future releases will have a home.- 5
good first issuetickets seeded (#7–#11): researcher persona,/weekly-reviewskill, model-swap docs, Spanish README intro, Linux troubleshooting hints. Pick one if you've been looking for an excuse. - Pinned roadmap at #12.
- Show-and-tell discussion at #13: "Show me your daily-copilot prompt — the one tweak that made it click."
Full diff
Compabob v1.0.0
First tagged release of Compabob.
A customizable Claude Code setup for knowledge workers. Clone it, run ./setup.sh, name your assistant, and in about ten minutes you have a working AI work partner: it knows your role, remembers what you tell it, routes work to specialized agents, and never sends anything without your sign-off.
What's in the box
- Specialized agents selected by description-driven routing, not by name.
- Safety hooks, including a draft-never-auto-send guard on anything that leaves your machine.
- Skills as slash-command workflows you can copy and extend.
- A memory system of one-fact-per-file notes the assistant maintains over time.
- An Obsidian-ready knowledge base scaffold for notes, meetings, and research.
setup.sh/update.shfor a guided install and rolling updates that never touch your vault, memory, or config.
Getting started
git clone https://github.com/chacosoldier/compabob.git
cd compabob
./setup.shSee the README for the quickstart and a full no-terminal-experience walkthrough. It runs entirely on your own machine under your own Claude subscription. No signup, no telemetry.