Repository navigation
Lemon 2026.10.5 (stable)
·
1602 commits
to main
since this release
Added
- omp and Claude Code subagent definitions. Task personas are also
discovered from project.omp/agents/and.claude/agents/(cwd up to the
Git root) and from~/.omp/agent/agents/and~/.claude/agents/, below the
.lemondirectories. Those files are read tolerantly (ID fromname,
unknown fields ignored, invalid files skipped). All definitions accept
comma-separatedtools/model, omp/Claude tool names, thinking-level
aliases,spawns, and anoutputschema in JSON Schema or JTD form (JSON
Schema constraints are preserved even without an explicittype). New
shipped personas: read-onlysecurity-reviewerand the@smolmechanical
workersonic. - Task worktrees can merge back.
taskgainsmerge(none,patch,
branch; default[runtime.task].worktree_merge) forworktree: true
children.patchreplays the parent's uncommitted work into the worktree
and, when the child succeeds, applies its changes to the parent checkout,
failing closed on conflicts with the patch kept for review.branchcommits
the child's work on its keptlemon/task-<id>branch without merging it.
Merge-back rechecks cancellation before mutation and retains detached or
switched-branch worktrees for manual review. Both patch and branch modes retain
committed or staged submodule changes, including index-only pins, and initialized
HEAD/content changes even underignore = all, without overwriting the original
index or deleting recoverable work. Results reportdetails.merge. - Task runtime parity with omp.
taskaccepts a top-levelcontext
shared by every child of a run, batch, or swarm. Persona thinking levels and
output schemas become child defaults. Invalid structured output is
re-prompted in the same child up to twice;schema_mode: "permissive"
returns the text withstructured_output_errorinstead of failing.
read agent://<id-or-name>returns an owned child's status and output (even
after it finishes), andagent://<id>/<key>/…extracts astructured_output
field. New[runtime.task]settings:max_depth(default 2) caps nesting
and personaspawnsgrants allowlisted delegation below it,
max_runtime_mslimits each child,disabled_agentshides personas, and
agent_modelsoverrides persona models.
Child depth/allowlists survive extension reloads, resumed user forks can
still delegate, and liveagent://names override completed namesakes. - Context parity hardening: overlapping secret sources are redacted without
exposing credential fragments; malformed secret YAML does not echo values
into logs. Private plan tools restore placeholders and enforce interception
hooks without bypassing their directory boundary. Foreign-global MCP configs
still require opt-in when launched from home, enabling a server clears every
matching denylist entry, and hidden skills stay out of missing-key suggestions.
File commands preserve empty positional arguments, consume one-shot submission
modes, and expand on local steering/redirect without expanding internal or
named-destination prompts. Inline-code imports respect matching backtick runs
across lines. - Secret placeholders now protect friendly labels against every contextual
regex value in the current input and previously matched session values,
including overlap constituents, cached labels and forged token-shaped
prefixes. Regexes retain context across protected tokens, and self-overlapping
literal secrets redact their complete union without leaving a credential
suffix visible. Provider batches collect regex values and reserve original raw
tokens before emitting any message, block or nested argument, preventing
cross-field label leaks and accidental restoration of original token-shaped
text while retaining the existing system/image/metadata exclusions. - Skills with
hide: trueordisable-model-invocation: truefrontmatter are
omitted from the model-visible skill listing and per-turn relevant-skill
hints, yet stay listed and loadable by name (read_skill,skill://,
/skill:<name>). See skill manifest. - File slash commands from Claude Code (
.claude/commands, nesteda:b),
Codex (.codex/prompts), Copilot (.github/prompts/*.prompt.md), Gemini
(.gemini/commands/*.toml), omp and.agentsroots, plus their user-global
dirs:/name argsexpands server-side for TUI, ACP and channel prompts, and
the TUI palette,/helpand ACP command list show them. Skills also load from
.codex/skills,.github/skillsand~/.codex/skills. See
File slash commands. - Secret obfuscation (opt-in). With
[runtime.secret_obfuscation] enabled = true, native sessions replace secret-shaped environment values,
secrets.ymlentries (global and project; plain or regex, obfuscate or
replace) and GitHub/GitLab/OpenAI/Anthropic-style tokens in provider-visible
messages with keyed$$…$$placeholders, and restore them in tool arguments
before a tool runs. Session history keeps the original text. See
Secret obfuscation. - MCP servers from other tools. Lemon now also loads MCP servers declared in
omp, Claude Code, Codex, Gemini CLI, OpenCode, Cursor, Windsurf and VS Code
configs and rootmcp.json/.mcp.json(project files by default; other
tools'~/files withLEMON_MCP_EXTERNAL_USER_DISCOVERY=1), below Lemon's
own files.lemon mcp enable|disable NAMEtoggles any server per project or
--global, andlemon mcp list --allshows the effective set with sources.
Turn the import off withLEMON_MCP_EXTERNAL_DISCOVERY=0. See
Skills: Servers from other tools. - Native sessions load other agents' instruction files:
GEMINI.md,
CLAUDE.local.md,.gemini/,.agent(s)/,.omp/and
.github/copilot-instructions.mdper directory, plus Gemini, Codex, OpenCode,
.agentsand Copilot globals, with@pathimports expanded. Cursor,
Windsurf, Cline, GitHub Copilot,.agentsand.lemon/rulesrule files are
injected when always-apply and otherwise listed in a rulebook the model reads
on demand. See Instruction files and rules. - Extension hooks can intercept tools:
on_tool_callblocks a call or
replaces its arguments (a raising handler blocks), andon_tool_result
replaces a successful result's content/details. Newon_session_startand
on_session_shutdownhooks observe session lifecycle. See
Extensions: Intercepting tool calls.
Fixed
- Extension result presentation hooks preserve authoritative checkpoint receipts
and affected paths. Content-only or custom display details cannot erase real
mutation provenance or fabricate receipts; omitted details retain the original.
Reserved diff aliases, resolved locations and mutation line numbers are protected
in both key forms; omitted snapshots and absent location lines remain absent. - Direct, deferred and WASM-host targets restore secrets before interception
under both disclosure profiles, including after reload. Private plan writes
retain their restricted file boundary, and repeated plan refreshes no longer
capture earlier wrapper generations. - Active plan-mode extension reload now binds private writes, edits and proposals
to newly loaded hooks immediately, preventing stale handlers from bypassing a
new mutation blocker. - OpenCode MCP discovery substitutes environment and file placeholders once in
decoded JSONC string values. Quotes, backslashes and multiline environment
values no longer invalidate the config and silently drop servers; inserted
text cannot trigger another interpolation or file import. File path resolution,
trimming and missing-value behavior are preserved.