Builds out locode's Claude Code plugin parity: MCP servers, slash commands,
sub-agents, hooks (12 lifecycle events), and skills, all loadable from a
local path or git URL. Also adds image support (read_file, /import), @-mention
file autocomplete, a /dashboard stats view, /export with an editable filename
prompt, an expanded git tool (reset/stash/merge/rebase/delete_branch), and a
redesigned status bar.
On top of that, a review pass found and fixed 10 correctness/stability bugs:
argument-injection in git reset/merge/rebase (a ref like "--hard" was parsed
as a flag), tool-call image results interleaving with native tool_call_id
messages and breaking OpenAI-compatible message ordering, backgrounded bash
jobs still being silently killed by their original timeout with the kill
masked as a clean exit, a SubagentStart hook's block being ignored, the
sub-agent timeout clock starting before the hook it should exclude, a
template-expansion bug that could re-substitute $1..$9 placeholders,
unbounded background-job output buffers, a missing directory-target fallback
in /export, and image size caps checked after reading the whole file instead
of before.
Session saves and exports now go through a shared atomic
write-then-rename helper so a crash can't leave a truncated file.
Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
2026-07-03-134954.txt was a stray captured session log containing an
email address, tracked since the initial commit. Ignore future files
matching the same timestamped naming pattern.
Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
The 8-iteration-per-turn cap was hardcoded from before this session's feature work and
too tight for genuine multi-file tasks, causing "Max tool-call iterations reached" on
legitimately multi-step work. Raised the default to 25 and made it configurable via
`locode config set maxIterations <n>` / $LOCODE_MAX_ITERATIONS, mirroring the existing
contextWindow config pattern.
Also bumps the version to 0.2.0 (package.json, --version, and the MCP client's
self-reported identity) to reflect the substantial feature additions since 0.1.0.
Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
Substantially expands locode's tool loop toward feature parity with Claude Code:
- web_search / web_fetch: DuckDuckGo-backed search and URL fetching (HTML stripped to text)
- git_status / git_commit: structured git tools with real diff/status/commit-list previews
before any mutating operation is confirmed
- agent tool: sub-agents run an isolated, headless tool loop sharing the parent's permissions;
bounded by an explicit depth guard (no nested sub-agents) and a 120s hard timeout, independent
of the toolset already excluding `agent` for sub-agent sessions
- MCP client support (stdio + streamable HTTP transports) via the official SDK: locode connects
to servers configured in `.mcp.json` or via `locode mcp add`, and exposes their tools alongside
the built-in ones, namespaced as `mcp__<server>__<tool>`
- Session persistence: conversations auto-save after every turn; `--continue`/`--resume`,
`locode sessions list/rm`, and an interactive resume picker
- Context compaction: tracks real token usage via `stream_options.include_usage` (falling back to
a char-based estimate), auto-detects the model's context window (Ollama/LM Studio native APIs,
cached, else a configurable default), and auto-summarizes the conversation at 85% usage or on
demand via /compact
- Status bar and welcome banner: added a context-usage indicator and fixed several dim-by-default
colors that were hard to read
Session/loop architecture changed to support all of this: Session now carries its own toolset
(tools + registry + OpenAI schemas) built from local + MCP tools, so runTurn no longer depends on
a fixed global tool list — the same mechanism that lets sub-agents inherit MCP tools while
excluding `agent` itself.
Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>