Releases: LocalKinAI/kincode
v0.10.0 — image input + plan mode
Image input + plan mode. Two capability additions on top of v0.9.0's named subagents — closes the bulk of the Claude Code parity gap for day-to-day coding.
✨ Image input (vision blocks)
Multimodal user turns. Provider layer translates attached images into Anthropic content blocks (type:image with base64 source) and OpenAI content parts (image_url with data URL).
POST /api/chat
{
"message": "what's wrong with this UI?",
"images": [
{"media_type": "image/png", "data": "iVBORw0..."}
]
}
Works on Anthropic claude-3+ and OpenAI gpt-4o. Empty-text turns valid when images are present (drop a screenshot, ask "what's this?").
✨ Plan mode (read-only gate)
Toggle via POST /api/plan_mode {enabled}. While on:
permission.Manager.CheckPlanModedenies any tool outside the read-only allowlist (file_read,glob,grep,web_fetch,web_search)- Agent prepends a directive teaching the model to investigate + draft a markdown plan instead of modifying
Server surface:
POST /api/plan_mode {enabled} → {enabled}(server may refuse mid-turn)- SSE
plan_modeevent broadcasts on toggle GET /api/stategrowsplan_modefield- Toggling cancels any in-flight turn
Mac shell (KinClaw Mac v0.3.0+) ships paperclip + drag-and-drop image input and a plan-mode toggle button in Code mode.
What changed
provider.MessagegainsBlocks []ContentBlock(back-compat — empty Blocks = pure text path)agent.Agent.RunWithImagesAndEventsfor multimodal turnspermission.Manager.{SetPlanMode, CheckPlanMode, PlanMode}- New
POST /api/plan_modeendpoint +plan_modeSSE event
Tests: TestMultimodalMessageBlocks, TestPlanModeOff_AllowsEverything, TestPlanModeOn_AllowsReadOnlyDeniesWrite.
Install
go install github.com/LocalKinAI/kincode/cmd/kincode@latest
# or:
git clone https://github.com/LocalKinAI/kincode && cd kincode && ./scripts/install.shFull changelog: CHANGELOG.md
v0.9.0 — named subagents
Named subagents. Mirrors Claude Code's named-subagent convention: drop a .md file with YAML frontmatter at ~/.kincode/agents/<name>.md (preferred) or ~/.localkin/agents/<name>.md (family-shared) and the parent model gets a dispatchable specialist persona it can call as agent_spawn(agent="code-reviewer", task="...").
✨ Persona dispatch
---
name: code-reviewer
description: Senior code reviewer — flags bugs, security, style.
tools: ["bash", "file_read", "glob", "grep"] # optional restrict
model: "claude-sonnet-4-6" # optional override
---
You are a senior code reviewer...The parent agent sees available personas in agent_spawn's tool description and dispatches by name. Empty / missing agent param falls back to the legacy generic-spawn flow (subagent inherits parent's system prompt) — no breaking change.
What changed
pkg/agent/persona.go—SubAgentPersonatype,LoadSubAgentPersona,ListSubAgentPersonas. Walks both directories, dedups by name (user-level wins).pkg/tools/agent_spawn.go—SubAgentFactorysignature changed tofunc(personaName string) SubAgentRunner. NewPersonas []PersonaInfofield surfaces names + descriptions in tool description.pkg/tools/tools.go—RegisterDefaultsWithAgent(r, factory, personas...)variadic personas.cmd/kincode/main.go— discovers personas at boot, factory closure loads persona's body as subagent system prompt.
PersonaInfo struct prevents pkg/tools → pkg/agent circular import.
Install
go install github.com/LocalKinAI/kincode/cmd/kincode@v0.9.0Full changelog: CHANGELOG.md
v0.8.0 — skill forge + project memory + multi_edit + todo_write
Five Tier-S/A capability additions in one push, closing the most-cited Claude Code gaps.
✨ External skill forge
pkg/tools/external.go — kincode's external skill loader matches kinclaw kernel's SKILL.md format, so the LocalKin family shares one skill marketplace at ~/.localkin/skills/. LoadAllExternalSkills() searches ~/.kincode/skills/ (kincode-specific) then ~/.localkin/skills/ (family-shared), dedups by name. Each skill becomes a regular tool the agent can invoke alongside the 10 builtins — keeps binary at 17MB while supporting Playwright / browser-use / image-gen via external dirs with their own deps.
✨ Project memory
pkg/agent/memory.go — LoadProjectMemory(startDir) walks up at most 10 levels looking for KINCODE.md (preferred) or CLAUDE.md (cross-tool portability fallback). Stops at $HOME or root. Auto-prepended to system prompt at boot.
✨ multi_edit tool
pkg/tools/multi_edit.go — atomic multi-place find-replace. Sequential edits in one call (each sees prior edits' state); failure mode names the failing edit (1-indexed) with no partial writes. Matches Claude Code's MultiEdit shape.
✨ todo_write tool
pkg/tools/todo_write.go — in-process per-agent TodoItem list across rounds. Status enum: pending / in_progress / completed. Full-list-overwrite semantics (matches Claude Code).
✨ scripts/install.sh
go build → codesign --force --sign - --identifier dev.localkin.kincode --options=runtime → install to ~/.localkin/bin/kincode. Stable bundle ID across rebuilds means macOS TCC remembers grants.
✨ JSON-encoded SSE event params
stringifyArgs JSON-encodes complex args (arrays / maps) instead of fmt.Sprint. Lets desktop shells parse structured tool args (e.g. todos array for inline checklist UI).
Install
go install github.com/LocalKinAI/kincode/cmd/kincode@v0.8.0Full changelog: CHANGELOG.md