Skip to content

Releases: LocalKinAI/kincode

v0.10.0 — image input + plan mode

05 May 07:06

Choose a tag to compare

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.CheckPlanMode denies 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_mode event broadcasts on toggle
  • GET /api/state grows plan_mode field
  • 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.Message gains Blocks []ContentBlock (back-compat — empty Blocks = pure text path)
  • agent.Agent.RunWithImagesAndEvents for multimodal turns
  • permission.Manager.{SetPlanMode, CheckPlanMode, PlanMode}
  • New POST /api/plan_mode endpoint + plan_mode SSE 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.sh

Full changelog: CHANGELOG.md

v0.9.0 — named subagents

05 May 07:07

Choose a tag to compare

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.goSubAgentPersona type, LoadSubAgentPersona, ListSubAgentPersonas. Walks both directories, dedups by name (user-level wins).
  • pkg/tools/agent_spawn.goSubAgentFactory signature changed to func(personaName string) SubAgentRunner. New Personas []PersonaInfo field surfaces names + descriptions in tool description.
  • pkg/tools/tools.goRegisterDefaultsWithAgent(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.0

Full changelog: CHANGELOG.md

v0.8.0 — skill forge + project memory + multi_edit + todo_write

05 May 07:07

Choose a tag to compare

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.goLoadProjectMemory(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 buildcodesign --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.0

Full changelog: CHANGELOG.md