Repository navigation
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