You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
First-class onboarding for Antigravity, which follows the Gemini CLI contract.
- install antigravity / install --all / init / uninstall / install-status wired.
MCP registration into ~/.gemini/settings.json rides the existing json_patch
client path (Antigravity is detected when ~/.gemini exists; "antigravity"
added to _AGENT_ALIASES). Skill bundle -> ~/.gemini/antigravity/skills/.
- New cli/antigravity.py owns the Gemini-family paths + skill install/uninstall/
status. cli/skills.py refactored to a directory-keyed core
(_install_skill_at / _uninstall_skill_at / _skill_status_at) shared by the
Claude and Antigravity bundles; Claude skill return strings byte-identical.
- install_status reports skills.antigravity; README/CLAUDE.md/CHANGELOG updated.
Scope = PRD phase 1 (MCP + skills). The AfterTool context-enrichment hook is a
later phase; #307 stays open pending a real-Antigravity end-to-end check (unit
tests can't prove the live channel). New tests/test_antigravity_install.py (13).
Full suite 4885 passed / 10 skipped. No INDEX_VERSION bump.
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
Copy file name to clipboardExpand all lines: CLAUDE.md
+4-1Lines changed: 4 additions & 1 deletion
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -1,6 +1,8 @@
1
1
# jcodemunch-mcp — Project Brief
2
2
3
3
## Current State
4
+
- **Version:** 1.108.88 — Antigravity (Google) install target (#307). Antigravity follows the Gemini CLI contract: MCP servers in `~/.gemini/settings.json` under a top-level `mcpServers` object (same shape as every other json_patch client), skills under `~/.gemini/antigravity/skills/`. So MCP registration rides the existing path: `_detect_clients()` adds an `MCPClient("Antigravity", ~/.gemini/settings.json, "json_patch")` when `~/.gemini` exists, and `"antigravity"` is in `_AGENT_ALIASES` → `install antigravity` / `install --all` / `init` / `uninstall` / `install-status` all work. New `cli/antigravity.py` owns the Antigravity paths + skill install (`install_antigravity_skill`/`uninstall_antigravity_skill`/`antigravity_skill_status`). `cli/skills.py` refactored: new directory-keyed core (`_install_skill_at`/`_uninstall_skill_at`/`_skill_status_at`) shared by Claude + Antigravity bundles — Claude skill behavior/return-strings byte-identical (existing tests pass). `run_init` installs the Antigravity skill when `antigravity_present()`; `install_status` reports it under `skills.antigravity`. **Scope = PRD phase 1 (MCP + skills only); the AfterTool context-enrichment hook is a later phase, and #307 stays OPEN pending a real-Antigravity end-to-end confirmation (unit tests can't prove the live channel — verification asymmetry).** New `tests/test_antigravity_install.py` (13). NO INDEX_VERSION bump. Files: `cli/antigravity.py` (new), `cli/skills.py`, `cli/init.py`, `server.py` (install help). PRD: `docs/prd-antigravity-hooks.md`. Clean-room competitive response (see memory `reference_competitor_gitnexus`).
5
+
-**Versions 1.108.85–1.108.87** (all 2026-06-30): **.85** install-mechanism-aware `watch` hint (`watch_extra_install_command()` → pipx inject / uv tool install / uvx --with) + migration-warning de-spam (`_MIGRATION_SCHEMA_WARNED` warn-once per repo) — #357 follow-up @zakblacki. **.86**`watch-all` prints a steady-state line (Ctrl+C / `watch-install`) + per-repo "Now watching … (idle until you edit a file)" so the post-index silence isn't read as a hang. **.87** License v1.1: non-commercial use/copy/modify stay free but redistribution narrowed (no registry republish, no rename/rebrand, no false-authorship, no name/marks) — response to the AnimAIOS `animamunch` PyPI fork; see memory `project_animamunch_fork`.
4
6
- **Version:** 1.108.84 — Install-mechanism-aware `upgrade` (#357, reported by @zakblacki on a pipx install). `jcodemunch-mcp upgrade` ran `sys.executable -m pip install -U` blindly; pipx/uv venvs ship NO `pip` module → `No module named pip`, pip exited non-zero, and the command **bailed before refreshing hooks**. Compounding it: the startup version-drift warning (`server.py`) told the user to run `jcodemunch-mcp upgrade` to clear the stale-hook nag — the exact pip-less-failing command — so it never cleared. Fix (rewrote `cli/upgrade.py`): new `detect_install_mechanism()` (path/env heuristic, no subprocess) → `(mechanism, upgrade_command)` for pip/pipx/uv/uvx/venv. `_pip_available()` gates the in-process `pip install -U`: present → runs as before (a genuine pip *failure* now refreshes hooks anyway + preserves the non-zero rc, was: skip-and-bail); **absent → does NOT shell out to a foreign package manager** (honors jjg's stated "detect then tell, don't guess-and-run" stance from the issue thread), prints the exact command (`pipx upgrade` / `uv tool upgrade`), and refreshes hooks in-process via `init --hooks` (pip-free, stamps `last_init_version.txt` so the nag clears). The nag warning now leads with `init --hooks`. NO INDEX_VERSION bump. New `tests/test_v1_108_84.py` (11). Files: `cli/upgrade.py` (rewrite), `server.py` (warning text). Side issues answered in #357 reply (not bugs): `.pack/nodejs` migration warning = stale starter-pack index; `find_dead_code` `framework_warning` inflated dead-code % on a Node project because its entry-point heuristic looks for `main.py`/`app.py` (pass `entry_point_patterns` or reindex); real-time freshness = `watch-all`. See [[project_jmunch_console]].
5
7
- **Version:** 1.108.83 — Tame `watch-all` CPU under WSL (#356, reported by @Blainexi). `watch-all` pegged 15-30% CPU non-stop on WSL. NOT a busy loop: **`watchfiles` auto-enables polling whenever it detects WSL** (inotify unreliable across the boundary, confirmed in watchfiles docs), and its default 300ms poll re-stats the whole watched tree several times/sec — multiplied across every indexed repo. `DefaultFilter` drops `node_modules`/`.git` *events* but the polling walk still stats them (structural cost). Fix: the `awatch` call now passes `poll_delay_ms=_watch_poll_delay_ms()` (resolves `JCODEMUNCH_WATCH_POLL_DELAY_MS` → `WATCHFILES_POLL_DELAY_MS` → `DEFAULT_WATCH_POLL_DELAY_MS=1000`; non-positive/garbage → default); ignored when native FS events are used (no-op off WSL). Plus a one-time WSL startup hint (`_is_wsl()`) naming the two levers: raise the poll delay, or set `WATCHFILES_FORCE_POLLING=false` for Linux-filesystem repos to use native inotify (~0 idle CPU); `/mnt/*` repos need polling. NO INDEX_VERSION bump. New `tests/test_v1_108_83.py` (11); `test_watch_all.py`/`test_watcher_lock.py` green. Files: `watcher.py`, `watch_all.py`. See [[project_jmunch_console]].
6
8
- **Version:** 1.108.82 — Exclude `org_savings.db` from `list_repos`. The team-SKU org-rollup store (`org_savings.db`, written by `org/store.py`) sits in `~/.code-index/` next to per-repo index `.db` files, but `_NON_REPO_DB_FILES` only excluded `telemetry.db` → `list_repos` enumerated it as a phantom `local/org_savings` repo (sym 0, empty source_root, display==repo_id). In the jMunch Console it showed an un-removable card; `delete-index local/org_savings` failed (no matching `local-org_savings.db` index → non-zero exit), which the Console surfaced as the misleading "needs jcodemunch-mcp >= 1.108.50". Fix: `_NON_REPO_DB_FILES = frozenset({"telemetry.db", "org_savings.db"})` (1-line). NO INDEX_VERSION bump. New `tests/test_telemetry_db_skip.py::test_list_repos_skips_org_savings_db`; storage/sqlite_store suites green. Files: `storage/sqlite_store.py`. Console-side companion: the Console's delete-failure message now surfaces jcm's real error instead of the hard-coded version hint (jmunch-console). See [[project_jmunch_console]], [[project_org_rollup_sku]].
Copy file name to clipboardExpand all lines: README.md
+2-1Lines changed: 2 additions & 1 deletion
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -369,7 +369,7 @@ pip install jcodemunch-mcp
369
369
jcodemunch-mcp init
370
370
```
371
371
372
-
`init` auto-detects your MCP clients (Claude Code, Claude Desktop, Cursor, Windsurf, Continue), writes their config entries, installs the CLAUDE.md prompt policy so your agent actually uses jCodeMunch, optionally installs enforcement hooks (PreToolUse read guard + PostToolUse auto-reindex + PreCompact session snapshot), optionally indexes your project, and audits your agent config files for token waste. Run `jcodemunch-mcp init --help` for all flags.
372
+
`init` auto-detects your MCP clients (Claude Code, Claude Desktop, Cursor, Windsurf, Continue, Antigravity), writes their config entries, installs the CLAUDE.md prompt policy so your agent actually uses jCodeMunch, optionally installs enforcement hooks (PreToolUse read guard + PostToolUse auto-reindex + PreCompact session snapshot), optionally indexes your project, and audits your agent config files for token waste. Run `jcodemunch-mcp init --help` for all flags.
373
373
374
374
> **Prefer a one-line CLAUDE.md?** From v1.71.0 the server exposes a
375
375
> `jcodemunch_guide` tool that returns the same policy snippet `claude-md
@@ -862,6 +862,7 @@ Tested configurations:
862
862
|----------|--------|
863
863
| **Claude Code / Claude Desktop** | `jcodemunch-mcp init` (auto-detects and patches config) |
| **Antigravity (Google)** | `jcodemunch-mcp install antigravity` — registers the MCP server in `~/.gemini/settings.json` and installs the skill bundle under `~/.gemini/antigravity/skills/` |
865
866
| **OpenAI Codex CLI** | Add `[mcp_servers.jcodemunch]` block to `~/.codex/config.toml` (see below) |
866
867
| **Cline / Roo Code** | Add via the MCP marketplace UI or paste `command: uvx`, `args: ["jcodemunch-mcp"]` |
867
868
| **Zed** | Add to `settings.json` under `context_servers` |
0 commit comments