Repository navigation
Releases: DarkWolfCave/context-wolf
Release list
v5.3.1 - Security update of the bundled database image
Security update. No code changes, no database migrations and no configuration
changes. Updating is recommended for all installations.
Security
- Updated the bundled PostgreSQL/pgvector image in
docker-compose.ymlto a
current release with the latest security fixes.
Upgrade notes
- Pull the new image and recreate the database container:
docker compose pull && docker compose up -d. Your data stays in the
mounted data directory (./data/postgresby default).
v5.3.0 - Surgical note editing + mcp SDK v2
Added
-
Surgical note editing. New
note_edit_stringMCP tool replaces an exact
substring inside a note instead of rewriting the wholecontent. This
directly counters the append-culture that grows notes unbounded: a stale line
can be replaced in place rather than by appending a correction block. Matching
is literal (not regex) and mirrors an exact-match code editor - it refuses
whenold_stringis not found, or matches more than once whilereplace_all
isFalse, forcing the caller to add surrounding context or opt in explicitly.
Results exceeding the 500 KB content limit are refused, never silently
truncated. The replacement is computed in Python and written through the
normal parametrizedUPDATE, so there is no SQL-injection surface. -
Search within a note. New
note_grepMCP tool returns only the matching
lines plus surrounding context (with 1-based line numbers, overlapping windows
merged), letting a caller locate the exact text to feed intonote_edit_string
without pulling a large note into context. The line-number prefix is display
only and must not be copied intoold_string. -
Partial note reads.
note_showgained optionalstart_line/end_line
parameters to return only a line range of a large note, using the same line
numbers asnote_grep. Without them the full note is returned as before.Together these turn a big note from an all-or-nothing load into something a
session can inspect and maintain a slice at a time - fewer tokens on read, and
a smaller blast radius than a whole-content rewrite on edit.
Changed
- Upgraded to the
mcpPython SDK v2 (~=1.0->~=2.2). In SDK v2 the
high-level server classFastMCPwas renamed toMCPServerand moved to
mcp.server.mcpserver; the server now imports and instantiatesMCPServer.
The tool and resource surface is unchanged - all tools keep their names,
parameters and generated schemas, and the stdio transport is unaffected - so
there is no change for MCP clients. Installing this release pulls SDK v2 and
its dependencies (notablyhttpx2,opentelemetry-apiandpydantic>=2.12);
the minimum Python version is unchanged (>=3.10).
v5.2.0 - context_delete + Now item rename
Added
- Delete context entries via MCP. New
context_deleteMCP tool removes a
single context entry (action plus its content, metadata and relations) by ID.
The delete capability already existed in the backend (delete_entry) and CLI
(cm delete); only the MCP surface was missing, leaving context entries the
odd entity out next to notes, now-items and infra, which all expose delete.
The tool is deliberately ID-only - there is no delete-by-query - to prevent a
single call from wiping many entries. Context entries remain non-editable in
place by design: to correct a wrong entry, delete it andcontext_savea
corrected one, which keeps the entry log a record of what was actually saved
rather than a silently-rewritten surface. (Nocontext_editis provided.) - Rename Now items in place. New
cm now edit <id> <title>subcommand and
now_editMCP tool. Previously a title could only be changed by deleting the
item and re-adding it, which silently reset its position, creation time and
linked-entity reference. Editing is title-only by design (bucket changes go
throughmove, status throughdone/remove) and reuses the same title
validation asadd, so the single-line 200-character limit is enforced the
same way on both paths.
v5.1.2 - Now titles no longer silently truncated
Fixed
- Now item titles are no longer silently truncated. A title longer than
the 200-character limit was quietly cut to fit, discarding everything past
the cutoff. Since Now items have no body field, that text was lost with no
warning. Over-long titles are now rejected with a clear error that reports
the actual length and suggests linking a note for long detail. The
200-character single-line limit itself is unchanged.
Internal
- Removed the dead
setup_schema()/setup_fts()methods from the database
backend (PostgreSQL implementation + abstract declarations). They were never
called; schema creation runs exclusively through the migrator
(run_migrations). No behaviour change.
v5.1.1 - Complete schema on fresh installs (plus v5.1.0 Now backlog & infra CRUD)
[5.1.1] - 2026-06-07
Fixed
- Complete schema on fresh installs. On a clean database several objects
were missing, so todos, MD indexing and semantic search were unavailable out
of the box, and some epoch-timestamp columns usedINTEGER(2038 overflow).
Databases upgraded from earlier versions already had them and were
unaffected. Migration 008 reconciles the schema (missing tables, views and
columns) and widens epoch-timestamp columns toBIGINT. The migration is
idempotent and safe to run on an existing database.
[5.1.0] - 2026-05-23
"Now" sprint backlog: curated cross-project shortlist with WIP limits;
plus the four missing infrastructure CRUD MCP tools.
Added
- New "Now" sprint backlog: a curated cross-project shortlist of what's
actively in flight. Three active buckets (today/week/later)
plus a 24hdoneholding bucket, each with a configurable WIP limit
(defaults 7 / 20 / 50). Items can either stand alone or reference an
existing CM entity (todo, action, note, snippet, ai_instruction, host,
service); the listing JOINs on the referenced table so callers see
live status (e.g. a referenced TODO that has since been closed).
Migration 007 adds thenow_itemsandnow_settingstables. CLI
subcommands:cm now {add,list,show,move,done,remove,reorder,settings}.
MCP tools:now_add,now_list,now_show,now_move,now_done,
now_remove,now_reorder,now_settings_get,now_settings_set. - Four new MCP tools complete the infrastructure CRUD surface:
infra_edit_host,infra_delete_host,infra_edit_service,
infra_delete_service. The underlying backend methods already
existed; only the MCP wrappers were missing, forcing manual SQL or
CLI fallbacks when entries had to be renamed or removed. Edits
update only the fields you pass;infra_delete_hostrequires
force=Trueto cascade-delete services on a host that still has
any.
Fixed
delete_hostraisedKeyError: 0because the result row from the
RealDictCursorwas indexed positionally instead of by column
name. The bug had been latent since the method was first written
(no callers existed). The CLI commandcm infra delete-hostand
the newinfra_delete_hostMCP tool both depend on this path.setup.sh --install-onlycould silently leave thecmtool on
the previous version. Two latent bugs that together hid this since
the V5 rebrand:uv tool install --forceonly replaces the installation from
uv's wheel cache. With a Hatch dynamic version (read from
src/version.pyat build time) the cached wheel can carry the
previous version, so--forcereinstalls that. Switched to
--reinstall, which forces a fresh build.- The post-install verification ran the editable
.venv/bin/cm,
which always reports the current source version - so it printed
success even when the global install was still on the old
version. The check now targets the globalcmonPATH.
Users who bumped from any V5.0.x release should now see the new
version aftergit pull && bash setup.sh --install-only. If you
were stuck on a prior bump, this is likely why.
v5.0.4 - Embedding worker health monitoring
Embedding worker health monitoring - failures become visible without manual log-tailing.
Added
- Migration 006: new
embedding_worker_runstable. Every worker invocation
records success/failure, duration, and processed count. Retention is
30 days, trimmed by the worker itself after each successful batch. cron_embed.shnow fires a desktop notification on failure (macOS
osascript, Linuxnotify-send), deduplicated to once per calendar
day so the user notices the problem without spam.cm saveand thecontext_saveMCP tool emit a one-time-per-day
warning when the worker's latest successful run is older than 48h.
Claude Code surfaces the MCP variant to the user automatically.cm doctorreports embedding coverage percentage, last successful
run age, and failure count from the last 24h. Stale workers show a
clear fix command (uv sync --extra embeddings).
Fixed
- The embedding worker previously failed silently when
numpy/
onnxruntimewere missing (e.g., afteruv syncwithout--extra embeddings). Failures now surface via notifications, DB records,
and user-facing warnings on the next save.
Internal
src/core/embedding_health.py: shared stale-detection helper used
by both the CLI and the MCP server. Tolerant of missing tables on
older installs (migration 006 not applied yet).
v5.0.3 - Pinned items + schema hardening
Pinned items (GUI feature integration) and schema hardening.
Added
- New CLI command
cm pinned- read-only listing of items curated in
the optional GUI (context-wolf-ui). Output as grouped Markdown, with
--projectfilter and--jsonoutput. Returns empty silently when
GUI tables are missing. - New optional MCP tool
pinned_list- conditionally registered at
server startup. Only appears in the tool schema when the pinned_items
table exists (i.e., when the GUI is installed). Keeps the MCP schema
lean for CLI-only installations. - Migration 003:
pinned_item_projectstable for many-to-many project
scopes on pinned items (an item with no scope rows is global). - Migration 005: CHECK constraints on
ai_instructions.scopeand
prioritycolumns to enforce the canonical vocabulary at the DB level.
Changed
- Renamed feature "Promptstart" to "Pinned" across schema, GUI, CLI,
MCP tool, and docs. The old name collided semantically withcm ai-prompt
(different feature: auto session-starter vs. curated items). Fresh
installs use the new naming; existing installations can upgrade via
ALTER TABLE(manual, no downtime, no data loss). - Migration 002 renamed:
promptstart_items->pinned_itemswith
corresponding index renames. - All
cm initflows updated to reflect the new naming.
Fixed
- Migration 004: normalized
ai_instructions.priority = 'may'rows to
'nice'(CLI vocabulary), cleaning up drift from an earlier GUI
implementation that used the RFC 2119 term.
v5.0.2 - MCP dependency fix
Dependency fix to prevent broken cm-mcp installs.
Fixed
mcppackage moved from[project.optional-dependencies.mcp]to core
dependencies. Thecm-mcpentry point is always registered, so a
plainuv sync(without--extra mcp) would otherwise uninstall
mcp/pydanticand break the MCP server with
ModuleNotFoundError: No module named 'pydantic'.
Changed
- Install instructions in README and USER_GUIDE simplified:
uv sync
now installs everything needed for both CLI and MCP server. Only
--extra embeddings/--extra allremain as opt-in extras.
v5.0.1 - English Translation & Documentation
[5.0.1] - 2026-04-18
English translation, improved Docker setup, documentation, and stability fixes.
Added
- Internationalization: all CLI and MCP output translated to English
- Animated demo GIF in README (save, duplicate detection, search, stats)
- CONTRIBUTING.md for community contributions
- CHANGELOG.md for version history
- README badges (Python, License, MCP, pgvector)
- README section: "Why not Markdown files?"
- README section: privacy and token economy details
- README section: remote database setup
- README section: architecture (two-config layout)
.env.exampletemplate for Docker credentials
Changed
- PostgreSQL upgraded to PG18 with pgvector 0.8.2
- Docker network renamed to
contextwolf-net(reusable for optional tools) - Docker credentials now managed via
.env(not hardcoded in compose) cm init(Docker mode) reads.envfor password and port, auto-creates
.envif missing; keeps CLIconfig.yamland Docker.envin sync- Setup script waits for PostgreSQL healthcheck before continuing
- Setup script exits cleanly on errors instead of silent failures
- Semantic search setup integrated into main setup.sh flow
- Model size references unified across documentation (~90 MB)
- MCP server migrated to FastMCP for better tool handling
- Various documentation rewrites for clarity
Fixed
cm doctor: correct Python version check (3.12+, was 3.10+)cm infra: documented valid--locationvalues (local, extern)- Bare
except:clauses replaced with specific exception handling - Removed broken V2-V4 legacy tests and references
- Removed em-dashes from documentation (AI boilerplate cleanup)
Internal
- Code cleanup: removed unused token_tracking feature
- Improved FILE_TYPE_MAP for code snippet detection
- Dependency updates
[5.0.0] - 2026-04-03
Initial public release. Rebranded from "Context Manager" to "ContextWolf".
Added
- Python package structure with
pyproject.tomlanduvsupport - Interactive setup script (
setup.sh) with database wizard and MCP configuration cm doctordiagnostics command- Demo GIF in README
- CONTRIBUTING.md
- MIT License
Changed
- All CLI and MCP output strings translated to English
- Clean Architecture: 4-layer structure (CLI, Features, Domain, Core)
- MCP server migrated from low-level API to FastMCP
- Duplicate detection with similarity warnings at 85%+
Removed
- SQLite backend (PostgreSQL only)
- Legacy V2/V4 code and tests
Technical
- 31 MCP tools with deferred loading (~356 tokens overhead)
- pgvector hybrid search (full-text + vector similarity)
- Local ONNX embeddings (all-MiniLM-L6-v2, 86MB)
- Docker-hardened PostgreSQL with pgvector
[4.3.0] - 2026-03
Added
- MCP tool usage tracking and analytics (
cm tool-stats)
[4.2.0] - 2026-02
Added
- Universal search across all content types (
cm smart-search) - Advanced AI instruction search with filters
[4.1.0] - 2026-01
Added
- Session-aware AI prompt generation (smart mode)
[4.0.0] - 2025-12
Changed
- Migrated from SQLite to PostgreSQL backend
- Added pgvector for semantic search