Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@
name: agent-name
description: One or two sentences. State WHEN to use this agent, not just what it is. The main session routes by matching a request against this text, so name the triggers, domains, and verbs that should land here. Note what this agent is NOT for, to keep routing clean.
tools: Read, Glob, Grep
model: sonnet
model: inherit
---

# Agent Name
Expand Down
2 changes: 1 addition & 1 deletion .claude/agents/analyst.md
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@
name: analyst
description: Metrics, KPIs, and data-backed analysis. Use for pipeline and revenue figures, dashboards, forecasts, trend and cohort analysis, variance investigation, and any question that needs numbers decomposed and compared rather than guessed.
tools: Read, Write, Edit, Glob, Grep, Bash, WebFetch, WebSearch
model: sonnet
model: inherit
---

# Analyst
Expand Down
2 changes: 1 addition & 1 deletion .claude/agents/comms-meetings.md
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@
name: comms-meetings
description: Email triage, meeting preparation, daily and weekly briefings, communication drafting, and follow-up tracking. Use for "what's in my inbox", "prep me for my meeting with X", "draft a reply to Y", "what am I waiting on", and "who owes me a response".
tools: Read, Write, Edit, Glob, Grep, Bash, WebSearch
model: sonnet
model: inherit
---

# Comms & Meetings
Expand Down
2 changes: 1 addition & 1 deletion .claude/agents/crm-relationships.md
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@
name: crm-relationships
description: Contacts, pipeline, and relationship tracking. Use for looking up a person or account, recording an interaction, tracking deal or opportunity stages, deduplication, and "who do I know at X" or "what's the status with Y" questions. Works from vault files by default; uses a CRM integration if one is enabled.
tools: Read, Write, Edit, Glob, Grep, Bash
model: sonnet
model: inherit
---

# CRM & Relationships
Expand Down
2 changes: 1 addition & 1 deletion .claude/agents/daily-copilot.md
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@
name: daily-copilot
description: The everyday work partner. Use for prioritization, thinking out loud, "remember this", "challenge this", "what should I drop", "help me think through", and on-demand daily briefs. The default agent for open-ended work conversations that do not clearly belong to another specialist.
tools: Read, Write, Edit, Glob, Grep, Bash, WebSearch
model: sonnet
model: inherit
---

# Daily Copilot
Expand Down
2 changes: 1 addition & 1 deletion .claude/agents/first-principles.md
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@
name: first-principles
description: Rigorous abstract reasoning. Use to reason a problem from scratch, decompose a concept to its fundamentals, calibrate a prediction, run scenario analysis under deep uncertainty, or synthesize opposing views. For thinking about which framework even applies, not applying a known one to a decision.
tools: Read, Glob, Grep, WebFetch, WebSearch
model: sonnet
model: inherit
---

# First Principles
Expand Down
2 changes: 1 addition & 1 deletion .claude/agents/principal-engineer.md
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@
name: principal-engineer
description: Senior engineering voice for technical decisions. Use to design a system, review code or architecture, choose between technologies, assess technical debt, or do a security review. Reasons against modern best practices. Advice only; produces recommendations, not commits.
tools: Read, Glob, Grep, Bash, WebFetch, WebSearch
model: sonnet
model: inherit
---

# Principal Engineer
Expand Down
2 changes: 1 addition & 1 deletion .claude/agents/second-brain.md
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@
name: second-brain
description: Knowledge base management. Use for taking notes, creating and retrieving meeting records, research synthesis, finding what was discussed with a person or on a topic, and keeping the vault healthy (wikilinks, frontmatter, archival). Read-only by default; writes happen on explicit intent.
tools: Read, Write, Edit, Glob, Grep, Bash
model: sonnet
model: inherit
---

# Second Brain
Expand Down
2 changes: 1 addition & 1 deletion .claude/agents/strategy-advisor.md
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@
name: strategy-advisor
description: Strategic sparring partner. Use when bringing a plan, idea, or decision for critique, or for pre-mortems, steelmans, second-order analysis, and "should I do X". Challenges assumptions and surfaces what is being missed. Advice only; does not execute, write files, or send anything.
tools: Read, Glob, Grep, WebFetch, WebSearch
model: sonnet
model: inherit
---

# Strategy Advisor
Expand Down
2 changes: 1 addition & 1 deletion .claude/settings.json
Original file line number Diff line number Diff line change
Expand Up @@ -16,7 +16,7 @@
"hooks": {
"SessionStart": [
{
"matcher": "startup|resume|compact",
"matcher": "startup|resume|clear|compact|fork",
"hooks": [
{ "type": "command", "command": "bash \"$CLAUDE_PROJECT_DIR/hooks/hook-session-start.sh\"" }
]
Expand Down
6 changes: 3 additions & 3 deletions .claude/skills/add-agent/SKILL.md
Original file line number Diff line number Diff line change
Expand Up @@ -13,10 +13,10 @@ Create a new agent so the assistant grows with the user's work. This is the main
- **Name** — kebab-case, e.g. `recruiting` or `product-research`.
- **Purpose and triggers** — what it owns, and the phrases or domains that should route to it. This becomes the `description`, which is what actually drives routing.
- **Tools** — the minimum it needs (4 to 6). Advice-only agents get read tools only: `Read, Glob, Grep, WebFetch, WebSearch`.
- **Model** — `sonnet` is the default; `opus` for genuinely hard reasoning.
- **Model**: `inherit` is the default (the agent follows the session's model); pin `sonnet` for a cheap, high-volume agent or `opus` for one that always needs hard reasoning.
2. **Check for overlap.** Read the existing agents in `.claude/agents/`. If the new agent overlaps an existing one, say so and suggest either editing the existing agent or sharpening both descriptions so routing stays clean.
3. **Scaffold.** Copy `.claude/agents/_agent-template.md` to `.claude/agents/<name>.md` and fill it in: frontmatter, Purpose, When to use / when not to, Output format, Safety.
4. **Register it.** Add a one-line row for the new agent to `.claude/agents/_orchestrator-reference.md` and to the routing section of `CONSTITUTION.md`.
3. **Scaffold.** Copy `.claude/agents/_agent-template.md.template` to `.claude/agents/<name>.md` and fill it in: frontmatter, Purpose, When to use / when not to, Output format, Safety.
4. **Register it.** Add a one-line routing rule for the new agent to the Agent Architecture & Routing section of `CONSTITUTION.md`. (`_orchestrator-reference.md` describes coordination patterns; it is not a list of agents.)
5. **Test routing.** Suggest two or three prompts that should land on the new agent, and one that should *not* (to confirm it does not over-trigger).

## Principles
Expand Down
2 changes: 1 addition & 1 deletion .claude/skills/mcp-debug/SKILL.md
Original file line number Diff line number Diff line change
Expand Up @@ -101,7 +101,7 @@ Status: <from health check>

1. Run the status check (Mode 1) for the full server list.

2. If tool-usage telemetry exists (some projects log to `data/performance/session-log.jsonl` or similar), summarise the last 7 days:
2. If you keep tool-usage telemetry (this kit does not ship any), summarise the last 7 days:
- Tools called per server.
- Error rate per server.
- Most-used and least-used servers.
Expand Down
2 changes: 1 addition & 1 deletion .claude/skills/memory-debt/SKILL.md
Original file line number Diff line number Diff line change
Expand Up @@ -82,7 +82,7 @@ Final summary: X applied, Y skipped, Z marked obsolete, W silent fixes.

- **Never auto-apply.** Always present each item for approval before modifying any file.
- **Read before writing.** If the content already exists, mark APPLIED silently — never duplicate.
- **MEMORY.md line cap.** If the constitution sets a limit (commonly ~200 lines), and writing the proposal would breach it, suggest a topic file in `memory/topics/` and a one-line index pointer instead of inlining.
- **MEMORY.md size cap.** MEMORY.md loads every session, so keep it under about 12KB. If writing the proposal would push it past that, suggest a topic file in `memory/topics/` and a one-line index pointer instead of inlining.
- **Diary edits are minimal.** Only flip checkboxes and update Memory Debt table status. Never rewrite proposal text.
- **Oldest first.** Process chronologically so the longest-overdue debt clears first.

Expand Down
2 changes: 1 addition & 1 deletion .github/SECURITY.md
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@ Compabob runs entirely on your own machine, under your own Claude Code subscript

## Supported version

Only the latest `main` is supported. The kit is a rolling template, not a versioned product. If you found an issue, check it still reproduces on the current `main` before reporting.
Releases are tagged (see the CHANGELOG), but only the latest `main` is supported: fixes land there, not on old tags. If you found an issue, check it still reproduces on the current `main` before reporting.

## Reporting a vulnerability

Expand Down
104 changes: 85 additions & 19 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -6,8 +6,36 @@ All notable changes to Compabob are recorded here. Format follows

## [Unreleased]

## [1.2.0] - 2026-09-25

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

- **`dictation` module**: 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-review` skill**: end-of-week review of what got done, what
slipped, decisions, commitments, and next week's top three (#16).
- **`researcher` persona 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.sh` runs it, and `scripts/init.sh` warns when keys are missing.
- **`scripts/lib/common.sh`**: shared output helpers and `set_config_flag`.
- **`transcribe` module (highly encouraged)** — one-hotkey local call recording +
transcription. A toggle script drives `ffmpeg` to capture audio and
`mlx-whisper` to transcribe it on-device: first run records, second run stops,
Expand Down Expand Up @@ -52,24 +80,60 @@ All notable changes to Compabob are recorded here. Format follows
as PENDING / STALE / OBSOLETE / APPLIED, then in `apply` mode walks through
approvals one by one. Closes the loop between `/reflect` (proposes) and
`memory/`.
- **Tool-scope-guard hook** (`hooks/hook-tool-scope-guard.sh` +
`tool_scope_check.py` + `tool_scopes.yaml`) — a context-scoped PreToolUse
guard. Reasoning stays unconstrained; only the outward action surface
(sends, mutations, external writes) is bounded per execution context.
Pre-wired contexts: `interactive` (allow-all), `pulse` (overnight headless,
no sends), `morning-briefing` (read inboxes, write vault), `email-triage`
(label only, no send), `news-digest` (fetch + write only). Context is
selected via `$CLAUDE_CONTEXT` env var or `/tmp/claude-context-<session>`
file. Fail-open by design; blocks are logged to
`data/performance/tool-scope-blocks.jsonl`. Opt-in: add the hook entry to
`.claude/settings.json` under `PreToolUse` to activate.

### Documented

- **Choosing the Claude model** — new README section explains how to swap
the default model per session (`/model` or `--model`), per project
(`.claude/settings.json` → `"model"`), or globally (`ANTHROPIC_MODEL` env
var), with a pointer to the Anthropic model list. Closes #9.

### Changed

- **Agents follow your model.** Every agent uses `model: inherit` instead 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/mcp` 0.0.82, `scrapling-fetch-mcp`
0.2.4, `mcp-server-time` 2026.8.18, `exa-mcp-server` 3.4.1, which needs
Node 20+). Gmail and Calendar now point at Claude's own connectors.
- **SessionStart hook** also runs after `/clear` and in forked sessions.
- **Config template**: flags for `crm_merge` and `lead_pipeline`; persona list
shows all six.
- **`transcribe` and `dictation`** install their Python dependency into a
module venv (Homebrew Python refuses a global `pip install`); `record.py`
switches to its venv on its own, so hotkeys keep working.
- **`update.sh`** says what to do on a local-only branch or detached HEAD
instead of blaming the network.
- **`scripts/init.sh`** checks for Python 3.10+ and counts only real agents.

### Removed

- **Tool-scope guard hook** (never released): it was not wired into
`settings.json`, needed `jq`, and matched no context the kit sets.
- **Stub modules** `extra-agents`, `team`, and `whatsapp`, 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-fetch`** from the integrations catalog (Claude Code's built-in
WebFetch covers it) and the empty `google` category.
- **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 6` was Saturday. Now Friday.
- **Scheduled runs could not find `claude`** under 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.sh` left an empty `.mcp.json`** on runs that added
nothing.
- **Docs claimed `config/` is git-ignored**; only `config/user.config.yaml` is.
- **`/add-agent` and the customization guide** pointed at
`_orchestrator-reference.md` as an agent registry; routing lives in
`CONSTITUTION.md`.
- **Telegram README** said the hook "blocks until you approve"; the hook always
blocks, and you send with `send.sh` yourself.

## [1.1.1] — 2026-05-24

Expand Down Expand Up @@ -202,6 +266,8 @@ Initial public release at [github.com/chacosoldier/compabob](https://github.com/
- `docs/architecture.md`, `docs/onboarding.md`, `docs/customization-guide.md`,
`docs/how-to-improve-memory.md`.

[Unreleased]: https://github.com/chacosoldier/compabob/compare/v1.1.0...HEAD
[Unreleased]: https://github.com/chacosoldier/compabob/compare/v1.2.0...HEAD
[1.2.0]: https://github.com/chacosoldier/compabob/compare/v1.1.1...v1.2.0
[1.1.1]: https://github.com/chacosoldier/compabob/compare/v1.1.0...v1.1.1
[1.1.0]: https://github.com/chacosoldier/compabob/compare/v1.0.0...v1.1.0
[1.0.0]: https://github.com/chacosoldier/compabob/releases/tag/v1.0.0
2 changes: 1 addition & 1 deletion CLAUDE.md
Original file line number Diff line number Diff line change
Expand Up @@ -10,4 +10,4 @@ At the start of a session, read `memory/MEMORY.md`. It records the user's name,

## Working directory

The knowledge base is `vault/`. Persistent facts are in `memory/`. Your own configuration is in `.claude/` and `config/`. The directories `vault/`, `memory/`, and `config/` are the user's own data and live outside the kit's version control. Everything else is the kit, and updates upstream.
The knowledge base is `vault/`. Persistent facts are in `memory/`. Your own configuration is in `.claude/` and `config/`. `vault/`, `memory/`, and `config/user.config.yaml` are the user's own data and live outside the kit's version control. Everything else is the kit, and updates upstream.
2 changes: 1 addition & 1 deletion CONTRIBUTING.md
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,7 @@ This kit is built to be changed. "Contributing" here means two things: making it

The kit assumes you will edit it. Nothing here is sacred.

- **Agents**: edit any file in `.claude/agents/`. Add a new one with the `/add-agent` skill, or copy `.claude/agents/_agent-template.md`.
- **Agents**: edit any file in `.claude/agents/`. Add a new one with the `/add-agent` skill, or copy `.claude/agents/_agent-template.md.template`.
- **Skills**: each directory in `.claude/skills/` is one slash command. Copy an existing one to make a new workflow.
- **Hooks**: `hooks/` holds safety guards and lifecycle scripts. They are wired in `.claude/settings.json`. Add, remove, or disable any of them.
- **Constitution**: `CONSTITUTION.md` is the behavior contract. Change it to match how you actually work.
Expand Down
Loading
Loading