Releases: awrshift/claude-memory-kit
v4.1.2 — tighten CLAUDE.md operational instructions
Close 3 operational gaps in the auto-loaded agent brain so Claude Code doesn't need to read .kit/ docs or guess for common operations. CLAUDE.md size unchanged (156 lines — replaced items with tighter versions).
- Experiment creation: mandate copying experiments/EXPERIMENT-TEMPLATE.md as starting structure (no invented schemas)
- Rule creation: explicit
created:+last-reviewed:frontmatter requirement (pointer to _example.md.disabled skeleton) - Concept creation: explicit reference to knowledge/index.md frontmatter spec
- Experiment closing: distill ritual essentials inlined (lessons → concepts/, code → projects/, then rm -rf folder)
Why: user feedback "the user won't read files — Claude Code must understand everything from auto-loaded context". Audit found 3 common operations had details only in non-auto-loaded files (.kit/, experiments/README, skill bodies, _example.md.disabled). v4.1.2 inlines the essentials in CLAUDE.md while keeping it under 200 lines per Anthropic project-memory guidance.
v4.1.1 — restore experiments/ + canonicalize date-tagging
Two corrections to v4.1.0 minimization.
-
experiments/ wrongly removed — restored as documented sandbox layer
- experiments/README.md: convention, lifecycle, agent triggers
- experiments/EXPERIMENT-TEMPLATE.md: hypothesis/method/result/lessons skeleton
- Naming: -YYYYMMDD (date-tagged)
- Distill-on-close: lessons → knowledge/concepts/, code → projects/, then delete folder
- /close-day flags experiments older than 30 days
-
Date-tagging promoted from implicit mechanic to documented load-bearing system invariant
- CLAUDE.md: now has TWO core invariants — "user only talks" + "every memory entry carries a date tag"
- .kit/ARCHITECTURE.md: new section "Date-tagging convention (load-bearing)" explaining where dates live and why
- .claude/rules/_example.md.disabled: frontmatter adds
created+last-reviewed, plus "Review history" section - knowledge/index.md: frontmatter adds
created; section-append convention## [YYYY-MM-DD] <title> - context/next-session-prompt.md: every Pick-up/Open-decisions/Recent-deliverables item must be
[YYYY-MM-DD]-prefixed; Active experiments section added - daily/TEMPLATE.md: clarifies date-in-filename + optional
[HH:MM]inline + audit candidates cite triggering dates - .claude/memory/MEMORY.md: "Why dates matter" section; entries without date declared a bug
- .claude/skills/close-day/SKILL.md: Phase 2 audit explicit date-arithmetic queries; Signal E for experiment hygiene; example proposals quote specific triggering dates as evidence
Other:
- README.md: "What's inside" tree adds experiments/ line; projects-vs-experiments paragraph below
- CLAUDE.md: projects/ vs experiments/ comparison table; agent-trigger guidance
- .kit/CHANGELOG.md: full v4.1.1 entry with migration notes
- .kit/VERSION: 4.1.0 → 4.1.1
No code changes — date-tagging machinery in lint.py/compile.py already worked. This release makes the convention explicit and restores experiments/.
Verified: lint.py 0 issues, zero Cyrillic in tracked files.
v4.1.0 — English rewrite + new README cheat-sheet graphics
Documentation rewrite:
- README.md: full English rewrite (was Russian post-9e2c68e); replaced "Memory accumulates" growth-curve section with two new sections "Memory layers" + "Promotion pipeline"; updated "What's inside" tree to reflect .kit/ subfolder; added "Hooks and operators" section
- CLAUDE.md: dropped role-guidance section, simplified hooks list (5 hooks accurate), all Russian dialogue examples replaced with English
- SKILL.md (root): description updated, English-only
- daily/README.md + new daily/TEMPLATE.md: explicit format for /close-day output, dropped role-guidance refs
- .claude/skills/close-day/SKILL.md: audit Phase 2 retargeted to knowledge/concepts/ + .claude/rules/ (was role-guidance), all examples in English
- .claude/skills/tour/SKILL.md: rewritten — drop role-guidance Stop, drop hooks deep-dive, English-only
- .claude/memory/MEMORY.md: clean template, no role-guidance refs, English examples
- context/next-session-prompt.md: pointer cleanup
- projects/my-first-project/BACKLOG.md: 5-task onboarding guide translated to English
New README cheat-sheet graphics (.github/assets/, Gemini Pro Image 16:9 2K):
- og-banner.png: refreshed — 4 isometric slabs with real file path labels (CLAUDE.md, MEMORY.md, rules/, concepts/), subtitle "Memory + Rules + Wiki + Hooks"
- 03-memory-layers.png: NEW — three-panel infographic showing HOT CACHE / WIKI / RULES with file paths and "WRITES: agent (...)" tags
- 04-promotion-pipeline.png: NEW — Liquid → Amber → Crystal (rules OR concepts) flow with real file paths
- 05-multi-project.png: NEW — folder tree with active scope highlight + "always loaded (shared)" cards
- 06-hooks-and-operators.png: NEW — two-column cheat-sheet (5 hooks + 5 slash operators)
- removed 03-knowledge-growth.png — abstract curve replaced with concrete pipeline diagram
Social media assets (untracked → tracked):
- .github/assets/social/{linkedin-.png, x-post-.png} — 7 marketing images for v4 launch posts
.gitignore: allow daily/TEMPLATE.md through alongside .gitkeep + README.md.
Verified: zero Cyrillic in tracked files, lint.py 0 issues.
v4.0.0 — promote from alpha, replace v3.2.2 architecture
Migrates main branch from v3.2.2 to v4.0.0 stable. Two weeks of dogfooding on
avoid-content-site (798 sessions) showed v4 architecture holds up in production.
v3.2.2 stays accessible via the v3.2.2 git tag.
Architecture changes
- Promotion ritual is agent-driven, not script-driven. /close-day audits today's
patterns against MEMORY.md and reference skills, surfaces 0-4 promotion
candidates verbally, writes patches on user «да». Replaces background
promote-patterns.py detection (was unreliable; violated «user only talks»
invariant). - playbooks/ → .claude/skills/-guidance/SKILL.md with user-invocable: false.
Anthropic-native primitive: Claude auto-loads when conversation matches
description. No custom trigger tables. - Multi-project isolation via projects//. Switch with «работаем над X».
- New /memory-audit operator. Two-phase: free size check on reference skills
(>500 lines threshold) + agent-in-session semantic clustering for splits.
Removed (over-engineering)
- experiences/ staging layer
- promote-patterns.py background detector
- flush.py auto-flush
- separate playbooks/ directory
What changed in 32 files
- 7 top-level docs rewritten (README/CLAUDE/ARCHITECTURE/CHANGELOG/SKILL/
VERSION/knowledge/index). README is hybrid: v3 marketing structure +
v4 architecture body. Reuses 4 PNG from .github/assets/ (og-banner,
before-after, daily-workflow, knowledge-growth) — concept-stable across v3→v4. - 2 settings/hooks: settings.json registers all 5 hooks with
$CLAUDE_PROJECT_DIR-anchored paths + per-hook timeouts (15-30s).
session-end.sh simplified (no auto-flush). - 5 memory scripts: config.py drops dangling ARCHIVE_DIR; lint.py +
compile.py skip README/TEMPLATE/INDEX stems in daily/; flush.py deleted;
lint.py adds check_oversized_reference_skills() (7th check). - 2 commands: new /memory-audit; /memory-lint updated for 7 checks.
- 10 skills: 7 new role reference skills (design/dev/editorial/marketing/
seo-geo/product/founder-profile) + memory-audit task skill; close-day +
tour rewritten under v4 ritual. - 2 rules scaffolding: _example.md.disabled rewritten under v4 promotion
pipeline (6+ months stable + audit confirmation); old .gitkeep removed. - 1 aggregator symlink: skills/memory-audit/SKILL.md.
- daily/README.md re-pointed to .claude/skills/-guidance/SKILL.md.
Verified working
16-test suite passed cleanly: settings.json valid + all hook paths exist;
bash hooks pass syntax check; Python scripts compile + import; skills
aggregator symlinks resolve; runtime tests on every hook with synthetic
stdin; lint.py + compile.py --dry-run clean; cross-references resolve for
all six slash commands (/close-day, /memory-audit, /memory-compile,
/memory-lint, /memory-query, /tour); config.py paths exist for all 8
layer constants.
Net change
39 files changed, 1342 insertions(+), 1635 deletions(-). v4 is more compact
than v3.2 despite adding 7 reference skills + memory-audit operator —
reference skills consolidate what v3 spread across CLAUDE.md/playbooks/
trigger-tables.
Net change
39 files changed, 1342 insertions(+), 1635 deletions(-). v4 is more compact
than v3.2 despite adding 7 reference skills + memory-audit operator.
Migration notes
Anyone on v3.2.x: don't merge in-place. Clone v4 fresh as a sibling
project; agent walks you through importing experiences/ → reference-skill
candidates, MEMORY → re-tagged, daily/concepts/rules copied verbatim.
v3.2.2 — docs cleanup + skills symlinks restore
Docs cleanup surfaced by drift report: another agent reading CLAUDE.md
assumed the old flush.py / 18:00 auto-compile flow was still active,
when in reality /close-day has been the default end-of-day flow since
v3.2.0 and flush.py is opt-in legacy. No runtime behavior changes.
-
CLAUDE.md: deleted the "End-of-day Auto-Compile (v3)" section and
all 18:00 / CMK_COMPILE_AFTER_HOUR / maybe_trigger_compilation
references. Replaced the "Auto session-end flush" + "Manual compile"
paragraphs with a single Manual compile paragraph + one Legacy note
pointing readers at /close-day and CHANGELOG v3.2.0. Updated the
L5 Daily row and scripts/ tree annotation to match. -
.claude/commands/memory-compile.md: dropped the legacy auto-trigger
paragraph. The command doc now says only what the command does. -
Skills symlink regression. skills/close-day/SKILL.md and
skills/tour/SKILL.md had been flipped from symlinks to regular
files (macOS dereferenced during a copy), and the original symlinks
lingered as "SKILL 2.md" duplicates. Content was identical, but the
structure contradicted v3.2.1's invariant that root skills/ mirrors
.claude/skills/ via symlinks. Restored symlinks, removed SKILL 2.md
artefacts. (No git diff: HEAD already has the correct symlink mode.)
flush.py and the commented-out auto-flush section in session-end.sh
are preserved unchanged as opt-in legacy for users upgrading from
v3.0 / v3.1.
VERSION bumped to 3.2.2.
v3.1.0 — knowledge/ moved to project root
Breaking Change
knowledge/ wiki directory moved from .claude/memory/knowledge/ to project root knowledge/.
Why: Claude Code hardcodes .claude/** as sensitive file protection — compile.py (via claude -p) could not write wiki articles even with --permission-mode acceptEdits.
Migration from v3.0.x
mv .claude/memory/knowledge knowledge
# Copy updated scripts from kit:
# - .claude/memory/scripts/config.py
# - .claude/hooks/session-start.py
git add knowledge/ && git commit -m "feat(v3.1): move knowledge/ to project root"Also in this release
session-start.pyshows "Recent updates: article-name (today)" for transparencycompile.pyRule 6: preserve manually-written content (don't overwrite hand-authored articles)/knowledge-updateslash command for manual wiki updates- README badges: version + last commit date
- All CLAUDE.md path references updated
Full changelog: CHANGELOG.md
v3.0.1 — compile.py silent failure fix
[3.0.1] — 2026-04-09
Patch release: critical fix for compile.py silent failure mode discovered during rnd-hub live test of v3.0.0.
Fixed
-
compile.pysilent failure — v3.0.0compile.pyconsidered anyclaude -pexit 0 as a successful compile, updating the state hash for the daily log even when sub-Claude returned a text description instead of actually calling Write/Edit tools. Result: daily log was marked as "compiled" but zero wiki articles were created or modified, and the log was permanently skipped on subsequent runs (hash matched, socompile.py --allwas the only recovery path). Detected during rnd-hub live test Test 10:compile.pyreported "1/1 succeeded" butconcepts/,connections/,knowledge/index.md, andknowledge/log.mdwere all unchanged.Three-layer fix:
- Mtime snapshot verification —
compile_daily_log()now captures wiki state viasnapshot_wiki_state()before runningclaude -p, then compares against post-run state. If zero files were created and zero files were modified,compile_daily_log()returnsFalse, dumps sub-Claude stdout to.claude/state/compile-{daily-stem}-stdout.txtfor debugging, and does NOT update the state hash — so the daily log stays in the queue for the next compile run. - Strengthened prompt —
build_compile_prompt()now opens with an explicit "CRITICAL — this is an automated pipeline, not a chat" preamble warning sub-Claude that the caller verifies success by checking wiki file mtimes. Rules 1-6 now explicitly say "use the Write tool to CREATE" / "use Edit to UPDATE" instead of just "CREATE" / "UPDATE". New Rule 11: "Every action MUST be a tool call (Write/Edit/Read/Glob/Grep). Text-only responses count as a compile failure." Added a "Final step" instructing sub-Claude to return a one-line summary only after all Write/Edit calls succeed. - Added
--permission-mode acceptEditsto theclaude -pinvocation in bothcompile.pyandquery.py. Cole's original SDK code usespermission_mode="acceptEdits"explicitly; this was lost during the SDK → CLI subprocess port in v2. Not always strictly required (control tests showclaude -psometimes accepts Write by default in headless mode), but it's correct by convention and defensive against default-mode drift in future Claude Code versions.
- Mtime snapshot verification —
Changed
compile.pyoutput now includesWiki touched: +{N} new files, {M} updatedline on success, so you can see the pipeline working instead of just "Done. Output: X chars".
Why this matters
The v3.0.0 silent failure was invisible from compile.py output alone — it reported success, lint.py stayed green (because it only checks existing files, not whether compile produced output), and the state hash was updated. The only way to detect it was to manually ls knowledge/ before and after. Without the mtime snapshot guard, users would have assumed their pipeline was working while knowledge accumulated only in daily/ and never compiled.
Credit to rnd-hub's Test 10 protocol for catching this end-to-end — a straight happy-path sanity check would have passed without revealing the bug.
Notes for upgraders from v3.0.0
- If you already have daily logs that v3.0.0 marked as "compiled" but produced no wiki articles: delete their entries from
.claude/state/compile-state.json→ re-runcompile.py. The new mtime guard will correctly fail (instead of silent-success) if sub-Claude still doesn't write, giving you an actionable debug dump at.claude/state/compile-{stem}-stdout.txt. - No breaking changes to file formats, hook protocol, or CLI interface. Pure bug fix.
v3.0.0 — SessionStart injection + end-of-day auto-compile
[3.0.0] — 2026-04-09
Major upgrade: ports 3 zero-cost features from Cole Medin's claude-memory-compiler (the Karpathy-inspired original that Memory Kit v2 was derived from) that were lost in the v1 → v2 stdlib port. Also renames JOURNAL.md → BACKLOG.md (cleaner semantic separation with daily/), collapses knowledge/ from 6 → 3 subdirs, and promotes the CLAUDE_INVOKED_BY recursion guard from hidden quirk to documented feature.
All changes remain on Python stdlib + claude -p subscription. No new dependencies. Zero incremental API cost.
Added
.claude/hooks/session-start.py— new Python hook replacingsession-start.sh. Outputs JSON{"hookSpecificOutput": {"hookEventName": "SessionStart", "additionalContext": "..."}}so Claude Code injectsknowledge/index.md+ recentdaily/YYYY-MM-DD.mdlogs + top 3 recently-modified concepts into every session's initial context. Adapted from coleam00/claude-memory-compiler. Budget: 50K chars default (CMK_INJECT_BUDGETenv var to tune).flush.py—maybe_trigger_compilation()— after 18:00 local time (CMK_COMPILE_AFTER_HOURenv), checks if today'sdaily/YYYY-MM-DD.mdhas changed since last compile via SHA-256 hash comparison. If yes, spawnscompile.pyas a detached background process. End-of-day auto-compile without cron. Logs to.claude/state/compile.log..claude/commands/memory-compile.md— slash command wrapper aroundcompile.py. Manual override alongside auto-trigger..claude/commands/memory-lint.md— slash command wrapper aroundlint.py. Pass--fixfor auto-backlinks..claude/commands/memory-query.md— slash command wrapper aroundquery.py. Natural-language queries with index-guided retrieval.- CLAUDE.md sections:
SessionStart Injection— describes additionalContext pattern, budget, priority orderEnd-of-day Auto-Compile— describes 18:00 trigger, hash skip logic,/memory-compilemanual overrideCLAUDE_INVOKED_BY — recursion guard (critical)— documents the recursion path that prompted the guard (was hidden quirk in v2)
Changed
JOURNAL.md→BACKLOG.mdthroughout the template. Renamed 3 example projects (example-webapp,example-saas,my-first-project). Updated all references inCLAUDE.md,README.md,.claude/hooks/periodic-save.sh,.claude/hooks/pre-compact.sh,.claude/skills/tour/SKILL.md,experiments/README.md,experiments/001-*/EXPERIMENT.md,context/next-session-prompt.md. Rationale:BACKLOG= task queue (future-forward),daily/= chronological log (past-forward). Two distinct files with clear semantics.JOURNALwas ambiguous — it conflated both..claude/memory/knowledge/collapsed from 6 → 3 subdirectories. Kept:concepts/,connections/,meetings/. Removed:qa/(empty in practice — compounding loop rarely fired manually),projects/(duplicated root-levelprojects/X/BACKLOG.md),experiments/(duplicated root-levelexperiments/NNN/EXPERIMENT.md). Updatedconfig.py,compile.py,lint.py,query.py,knowledge/index.md,CLAUDE.md.lint.pychecks: 7 → 6. Removedcheck_stale_experimentsbecause it requiredknowledge/experiments/which no longer exists. Remaining: broken links, orphan pages, orphan sources, missing backlinks, sparse articles, missing frontmatter.query.py: removed--file-backflag. It filed answers toknowledge/qa/which no longer exists. Query remains read-only, index-guided. If you miss it, the answer is in git history..claude/settings.json— SessionStart hook command updated frombash ".../session-start.sh"topython3 ".../session-start.py".
Removed
.claude/hooks/session-start.sh— replaced bysession-start.py..claude/memory/knowledge/qa/directory (and.gitkeep)..claude/memory/knowledge/projects/directory (and.gitkeep)..claude/memory/knowledge/experiments/directory (and.gitkeep).check_stale_experiments()function fromlint.py.parse_frontmatter()helper fromlint.py(became unused after stale_experiments removal).QA_DIR,EXPERIMENTS_WIKI_DIR,PROJECTS_WIKI_DIRconstants fromconfig.py.EXPERIMENTS_RAW_DIRconstant fromconfig.py(was only used by check_stale_experiments).
Migration notes for v2 → v3
Existing users with a v2 clone must:
- Rename project files:
find projects -name JOURNAL.md -exec sh -c 'mv "$0" "${0%JOURNAL.md}BACKLOG.md"' {} \;(or do it manually per project). - Update internal references in
context/next-session-prompt.md,CLAUDE.md, and any custom rules that mentionJOURNAL.md. - If you had content in
knowledge/qa/,knowledge/projects/, orknowledge/experiments/: move articles toknowledge/concepts/(they lose their subdir categorization but content is preserved). The v3 wiki has only 3 subdirs. - Update hook command in
.claude/settings.json: change SessionStart command frombash .../session-start.shtopython3 .../session-start.py. Or re-copysettings.jsonfrom the updated template. - Replace
session-start.shwithsession-start.pyfrom v3. - Pull updated
flush.pyto getmaybe_trigger_compilation(). - Optional but recommended: enable end-of-day auto-compile by leaving default
CMK_COMPILE_AFTER_HOUR=18, or disable with a high value like99. query.py --file-backusers: the flag is gone. Answers are no longer filed automatically. If you want this back, copy the pre-v3 version from git history.
Breaking changes summary:
- File rename:
JOURNAL.md→BACKLOG.md - Wiki structure: 6 → 3 subdirs
- Query flag:
--file-backremoved - Hook command: bash → python3
Not breaking:
- MEMORY.md format unchanged
next-session-prompt.mdformat unchanged (<!-- PROJECT:name -->tags still work)daily/format unchangedcompile.pyCLI args unchanged- All of v2's other hooks (
session-end.sh,pre-compact.sh,periodic-save.sh,protect-tests.sh) unchanged
Fixed
compile.pyused to have an outdated prompt template that instructed the LLM to write toknowledge/{qa,projects,experiments}/subdirs. Now strictly referencesconcepts/andconnections/(and implicitlymeetings/when applicable).pre-compact.shcounted project files by looking forJOURNAL.md. Now looks forBACKLOG.md.periodic-save.shblock message mentionedprojects/*/JOURNAL.md. Now saysprojects/*/BACKLOG.md.
v2.0.1 — Post-launch polish
Post-launch polish release. Fixes issues found after v2.0.0 shipped, adds brand asset, corrects terminology leftovers.
Fixed
- README Mermaid diagram truncation — Long node labels in the architecture diagram were truncated on GitHub's rendered view. Fixed by wrapping labels with
<br/>in quoted syntax. Verified via Chrome browser automation on live GitHub render. (#4a37c00) /tourskill obsolete content — The tour still referenced v1 architecture (3 hooks,topics/layer). Now reflects v2: 5 hooks,knowledge/wiki layer, new Step 5 for Memory Kit v2 Scripts. (#6da1f19)- Terminology leftovers:
topics/→knowledge/— Systematic audit caught 4 lingering v1 references in MEMORY.md template and CLAUDE.md. All migrated toknowledge/concepts/naming. (#ab1b0b5) - Missing CONTRIBUTING.md — README linked to
CONTRIBUTING.mdthat didn't exist (broken link). Created minimal guide with PR rules and ground rules (zero dependencies, pure Markdown, Obsidian optional). (#ab1b0b5)
Added
- GitHub Social Preview banner — `.github/assets/og-banner.png` (1280×640). Dark editorial design with isometric 5-layer glass stack (BRAIN/MEMORY/RULES/JOURNAL/CONTEXT). Generated via Gemini Nano Banana Pro. Upload via repo Settings → Social preview. (#29afd04, #b9cd78e)
- Hero banner in README — Banner now renders as the first element of README via pure Markdown. Stays compliant with H3 Hybrid structure (no HTML wrappers in top zone). (#de0990b)
Upgrading from v2.0.0
No breaking changes. Pure additive + fixes.
If you already cloned v2.0.0:
```bash
git pull origin main
```
- The `/tour` skill will show the updated v2 walkthrough automatically on next invocation
- The Mermaid diagram fix only affects rendered view; no behavior change
- No migration steps needed
Full changelog
See CHANGELOG.md for complete details.
Full diff: v2.0.0...v2.0.1
v2.0.0 — Memory Kit v2: Pipeline, Knowledge Wiki, Self-Selling README
Major upgrade from v1. Full memory pipeline + structural refactor + marketing-ready README.
Highlights
New pipeline (Python stdlib only, zero pip install):
compile.py— daily logs → knowledge wiki articles (incremental via SHA-256)lint.py— 7 structural health checks +--fixauto-repairquery.py— index-guided retrieval with optional--file-backcompounding loopflush.py— session-end background transcript extractor (Opus, 100 turns / 50KB)config.py— path constants
New hooks:
session-end.sh— auto-captures conversation transcripts todaily/YYYY-MM-DD.mdprotect-tests.sh— blocks edits to existing test files (creates allowed)
Structural:
.claude/memory/knowledge/— 6-subdir wiki (concepts/connections/meetings/qa/projects/experiments) withindex.md+log.mddaily/— auto-captured session logs (gitignored content).claude/state/— project-local runtime state (replaces legacy~/.claude-starter-kit/hook_state/)
README refactor (H3 Hybrid):
- 237 → 169 lines (tighter, less filler)
- Pain-first hero + 5-layer component table
- Install CTA moved from line 77 → line 18
- GitHub admonitions, Mermaid architecture diagram, FAQ collapsibles
- New positioning: "The OS layer for Claude Code. Not just memory — the entire context management lifecycle."
CLAUDE.md fixes:
- Added
@README.mdimport so README loads automatically at session start (Claude Code does NOT auto-load README otherwise) topics/terminology replaced withknowledge/throughout- Periodic save default: 15 → 50 exchanges
Migration notes (v1 → v2)
- Existing users: the session counter at
~/.claude-starter-kit/hook_state/session_countis no longer read. Counter resets to 1. Non-critical (cosmetic). MEMORY.md,JOURNAL.md, andnext-session-prompt.mdformats are unchanged — your existing content continues to work.- After pulling v2: run
chmod +x .claude/hooks/session-end.sh .claude/hooks/protect-tests.shif the executable bit didn't survive.
Dependencies
- Python 3.9+ (stdlib only — no
pip install) - Claude Code CLI (existing)
- Claude Pro/Max subscription or API credits (existing)
- Obsidian is NOT required — the wiki works in any Markdown editor. Obsidian is only for the optional visual graph view.
See CHANGELOG.md for the full changelog.