Skip to content

Releases: hkcanan/katmer-code

0.5.2 — Review hygiene + refreshed screenshot

26 May 11:54

Choose a tag to compare

Cleans up the warnings flagged by the Obsidian community plugin automated review. The plugin already passed in 0.5.1; this just clears the warning list.

Changes

  • Removed builtin-modules package — replaced with Node's module.builtinModules.
  • Pinned all dependency versions exactly (no ^ / ~ ranges).
  • Committed package-lock.json so the automated review can verify the bundle.
  • Replaced 7 of 8 !important CSS rules with .claude-native-root specificity.
  • Dropped the :has() selector for the diff line-border indicator (perf warning).
  • Refreshed the top README screenshot showing the new Modern Sharp picker with multi-provider tabs and reasoning-effort selector.

No functional changes.

0.5.1 — Community plugin compliance

26 May 11:32

Choose a tag to compare

Fixes the automated plugin-check errors so the community directory check passes.

Changes

  • minAppVersion: 1.4.0 → 1.8.7 — plugin uses APIs introduced after 1.4.0 (Workspace.revealLeaf from 1.7.2, Notice.noticeEl from 1.8.7). The previous minimum was incorrect.
  • codemirror deps declared@codemirror/state and @codemirror/view were used transitively; now in dependencies.
  • Removed unused imports (rejectAllChanges, type InlineChange).
  • Replaced Element.innerHTML with textContent in CodeMirror hover widgets — addresses Obsidian's XSS guidance.

No functional changes for users — same multi-provider sidebar as v0.5.0, just plumbing fixes.

See CHANGELOG.md for the full v0.5.0 multi-provider feature list.

0.5.0 — Multi-provider: Claude + Gemini + Codex + Antigravity

26 May 11:01

Choose a tag to compare

Plugin is no longer Claude-only. Pick a provider per tab, run them side-by-side, and consult any model from another model's reply — all in the same conversation.

Why this rebuild

Anthropic's June 15 billing change moved Agent SDK and programmatic use off the Pro/Max subscription pool onto separately metered credits at full API rates. The plugin (which uses the SDK) effectively became a metered API client overnight. Rebuilt so it can drive your ChatGPT Plus and Google AI Pro plans too — three subscriptions you may already pay for, one sidebar.

What's in it

Four providers, per-tab routing

  • Claude Code — Anthropic SDK + Pro/Max subscription
  • Geminigemini CLI + Google AI Pro / One OAuth
  • Codexcodex exec --json + ChatGPT Plus/Pro OAuth, reasoning effort wired through model_reasoning_effort
  • Antigravityagy --print (chat only, until agy exposes structured output)

Each chat tab pins its own provider and model independently. New tabs inherit the active tab's provider. Tab strip shows a small provider-colored dot per tab.

Same-tab consult
Every assistant reply gets a small Consult button. Pick a provider (and optionally a specific model from the inline submenu) → that provider runs in the background → its response renders as a consultation card → active model synthesizes the two views — all without leaving the conversation.

In-plugin login
Provider chips with three states: ✓ ready / ⚠ login required / ✗ not installed. Click an amber chip:

  • Claude / Codex: plugin spawns claude auth login / codex login itself, polls auth status until completion
  • Gemini / Antigravity: plugin opens Terminal.app with the right command (these are interactive TUIs)

CLAUDE.md auto-mirror
Toggle in settings. Mirrors both global (~/CLAUDE.md~/.gemini/GEMINI.md + ~/.codex/AGENTS.md) and vault scope (<vault>/CLAUDE.md → vault GEMINI.md + AGENTS.md). Watched with fs.watch. Only files written by the plugin (tagged with a header) are overwritten — your hand-written ones are left alone.

Mid-conversation switch markers
Horizontal divider when you flip provider or model. Provider switches add a warning that prior conversation context isn't carried across CLIs.

Per-model context tracking
Real input tokens against the model's actual window: Claude 200K–1M, Gemini 2.5/3.x ≈1M, Codex GPT-5.x 400K (mini 128K), Antigravity 1M. Catalog-driven, not a generic 200K fallback.

Skills run on every provider
/peer-review, /cite-verify, /lit-search etc. Native on Claude via ~/.claude/commands/; on other providers the plugin reads the skill markdown and prepends it to your prompt as system context.

Modern Sharp UI redesign
Mono brand header, segmented tab control, brand-color rails on tool calls and trigger, Raycast-style picker with sliding underline indicator, compact message footer (Copy + Consult), bottom-anchored "is thinking…" placeholder.

Bug fixes

  • Tab switch was re-pushing already-accepted diffs to the editor — fixed by suppressing inline-diff replay during re-render. changeRegistry StateField now also dedupes by id as defense-in-depth.
  • Gemini's [Thought: true] reasoning markers stripped from text.
  • Tool calls that never receive a result event no longer hang on "Running" — marked as stalled when turn completes.
  • 429 / capacity-exhausted responses surface a friendly hint instead of a Gaxios stack trace.
  • Antigravity no longer hangs in "Thinking" — stdin closed immediately + TERM=dumb so output flushes.
  • Codex flag corrections: --json (not --experimental-json), --config web_search="live" (not --search), --sandbox workspace-write so edits actually apply.
  • Codex auth detection falls back to auth.json when codex login status returns empty stdout in Electron's non-TTY context.
  • Provider switch no longer rewrites the global default.

Known limitations

  • Antigravity is text chat only until agy adds structured output. No tool calls, no inline diff.
  • Gemini 3.x has thinking_level in the API but Gemini CLI hasn't exposed the flag yet (see google-gemini/gemini-cli#25122). Effort slider hidden on Gemini.
  • Gemini 3.x preview models hit Google capacity limits frequently — fallback to 2.5 Pro is one click in the picker.
  • Switching provider mid-conversation works but loses context (each CLI has its own session state). The divider warns you about this.
  • xhigh effort on Codex is only reachable by editing ~/.codex/config.toml directly; plugin maps "max" → "high" for broad model compatibility.

Install

  1. Install at least one provider CLI:
    • `npm install -g @anthropic-ai/claude-code && claude`
    • `npm install -g @google/gemini-cli && gemini`
    • `npm install -g @openai/codex && codex login`
    • `curl -fsSL https://antigravity.google/cli/install.sh | bash && agy`
  2. Download `main.js`, `manifest.json`, `styles.css` from this release.
  3. Copy them into `/.obsidian/plugins/katmer-code/`.
  4. Enable KatmerCode in Obsidian → Settings → Community Plugins.
  5. (Optional) Settings → KatmerCode → toggle Auto-mirror CLAUDE.md to other providers.

See CHANGELOG.md for the full list.

0.3.0 — SDK Compatibility & Stability Fixes

30 Mar 09:44

Choose a tag to compare

What's New

SDK Type Compatibility (fixes #2)

  • Removed unsafe type casts for BetaUsage — direct property access instead of Record<string, number> cast
  • Added intermediate unknown cast for stream_event to satisfy stricter TypeScript definitions
  • Upgraded @anthropic-ai/claude-agent-sdk to ^0.2.86

Permission Handling

  • MCP tools now auto-allowed without permission prompt
  • Abort signal support in canUseTool — prevents dangling permission promises
  • Permission prompts dismissed automatically on session abort

Editor Stability

  • Fixed decoration ordering in RangeSetBuilder (collect-sort-build pattern)
  • Inline diffs suppressed during session resume replay — no ghost diffs on reopen
  • Button placement improved: appears after last visual change, not end of range

Full Changelog

0.2.0...0.3.0

0.2.0 — Semantic Diff & Multi-Change Tracking

23 Mar 19:35

Choose a tag to compare

What's New

1M Context Window Fix

  • Opus 4.6 now correctly gets 1M context (was stuck at 200K)
  • CLI handles [1m] suffix natively — removed unnecessary beta flag splitting

Semantic Diff (diff-match-patch)

  • Word-level diffing instead of prefix/suffix — only actually changed words are highlighted
  • Unchanged words in a rewritten paragraph stay normal (no more wall of red/green)

Multi-Change Tracking

  • Multiple edits in one turn now all persist and can be individually accepted/rejected
  • Content-based re-anchoring — changes survive external file reloads

Diff Bar

  • Navigation bar above input: ◀ 1/3 ▶ to jump between changes
  • Per-change Accept/Undo + bulk "✓ All" from one place
  • Auto-hides when no pending changes

UI Improvements

  • Always-visible colored ✓/✕ buttons on each change in the editor
  • Compact chat cards (navigation moved to diff bar)
  • Stable click handlers via CM6 widget eq()
  • Yellow left-border on lines with pending changes

0.1.0

23 Mar 14:10

Choose a tag to compare

Initial release