Agent skill

Opencode Lane

by VKirill in VKirill/claude-lane-stack

Claude Lane OpenCode half. An agent skill from VKirill/claude-lane-stack.

MITAuto-check passedAgent Workflows

Install Opencode Lane

skills CLI
$ npx skills add VKirill/claude-lane-stack --skill opencode-lane -a claude-code

Project install by default; add -g for ~/.claude/skills/.

GitHub CLI
$ gh skill install VKirill/claude-lane-stack opencode-lane --agent claude-code

Project scope by default; add --scope user for a personal install. Needs GitHub CLI 2.90.0 or later (public preview).

Manual copy
$ git clone --depth 1 https://github.com/VKirill/claude-lane-stack.git skills-src && mkdir -p .claude/skills && cp -r skills-src/plugins/lane-stack/skills/opencode-lane .claude/skills/opencode-lane && rm -rf skills-src

Use ~/.claude/skills/ instead of .claude/skills for a personal install. The folder must contain SKILL.md.

Claude Code skills documentation · loads skills from .claude/skills/

Facts

Skill name
opencode-lane
GitHub stars
122
Token cost
~3.1k tokens
SKILL.md length
1,245 words
Files
1
Skills in repo
53
Repo updated
First seen
Licence
MIT

At a glance

Claude Lane OpenCode half. An agent skill from VKirill/claude-lane-stack.

  • Works in 7 steps: One module under… → Wire it in index.ts. Re-export from… → Fail-open: catch, laneLog({ mod, ok:… → …
  • User says opencode-lane
  • SKILL.md covers Info (print and stop), Split (do not blur), Add an OpenCode change and Diagnose a writer run, plus 3 more sections
  • Calls git and opencode; needs TYPESAFE_API_KEY

What it does

Opencode Lane is an agent skill from VKirill/claude-lane-stack. Claude Lane OpenCode half. How to add OpenCode behavior, diagnose a writer run, and what stays in lane-ctl. Use when user says opencode-lane, делай диагноз, OpenCode plugin, sticky contract, winnow on OpenCode, Jev effort, writer session plugin, or any new OpenCode feature in claude-lane-stack. SKIP: product task YAML (lane-contract); run DAG (orchestrator-lanes); third-party OpenCode plugins (agentmemory, gemini-auth, open-cursor).

Its SKILL.md is about 3.1k tokens, which your agent loads only when the skill is triggered. It is a single SKILL.md file with no bundled scripts.

It sits in Agent Workflows. The repository describes itself as: Multi-agent AI coding factory for one person — Claude Code PM + Codex/Qwen/Grok/Kimi/AGY writers, durable conveyor, auto-merge to main. The licence is MIT.

When your agent uses it

  • User says opencode-lane
  • OpenCode plugin
  • Sticky contract
  • Winnow on OpenCode

Example prompts

  • “/opencode-lane”

Requirements

  • A credential in TYPESAFE_API_KEY

Workflow steps

7 steps, taken from the first numbered list in SKILL.md.

  1. One module under profiles/opencode/opencode-lane/. One hook concern.
  2. Wire it in index.ts. Re-export from opencode-lane.ts only if tests
  3. Fail-open: catch, laneLog({ mod, ok: false, err }), keep the session.
  4. Brand every user-visible string [opencode-lane ].
  5. install.sh already copies opencode-lane.ts + the folder. Do not add
  6. Copy live: ~/.config/opencode/plugins/opencode-lane.ts and
  7. One smallest test in tests/test_jev_route.py (string wire or a node

What it can do on your machine

Read from SKILL.md and the folder at commit ad5d501. It shows what the files ask for, not the result of running them.

  • Tool permissions

    Pre-approves nothing: there is no allowed-tools line, so your agent's usual permission prompts apply.

    From allowed-tools in the SKILL.md frontmatter.

  • Runs code

    Shell commands in SKILL.md call:

    • git
    • opencode

    From the folder's file list and the shell code blocks in SKILL.md.

  • Network

    Links to these hosts (documentation or services it may open):

    • opencode.ai
    • docs.typesafe.ai

    From URLs in SKILL.md, links to its own repository left out.

  • Credentials

    Names these keys or tokens, usually read from environment variables:

    • TYPESAFE_API_KEY

    From names ending in _API_KEY, _TOKEN, _SECRET, _KEY or _PASSWORD in SKILL.md.

Context cost

Opencode Lane loads about 3.1k tokens when it runs. Until then it costs about 113 tokens; SKILL.md has 1,245 words of instructions outside code blocks.

Always · name and description, kept in context so the agent knows when to use it
~113
When it runs · the whole SKILL.md, loaded when a task matches
~3.1k

Estimates: characters ÷ 4, the usual rule of thumb; real counts depend on the model's tokenizer. Scripts and assets cost tokens only if the agent reads them.

Safety

Auto-check passed

The automated check found no risky patterns in SKILL.md.

Automated static check — not a guarantee. Review scripts before installing. It scans the text of SKILL.md for risky patterns (piping downloads into a shell, reading credential files, hidden Unicode, destructive commands); files beside SKILL.md are not scanned.

SKILL.md

The full file from VKirill/claude-lane-stack at commit ad5d501, republished under its MIT licence (© VKirill). 1,245 words, ~3,125 tokens.

Download SKILL.mdSave it as .claude/skills/opencode-lane/SKILL.md (or your agent's skills folder).
name
opencode-lane
description
Claude Lane OpenCode half. How to add OpenCode behavior, diagnose a writer run, and what stays in lane-ctl. Use when user says opencode-lane, делай диагноз, OpenCode plugin, sticky contract, winnow on OpenCode, Jev effort, writer session plugin, or any new OpenCode feature in claude-lane-stack. SKIP: product task YAML (lane-contract); run DAG (orchestrator-lanes); third-party OpenCode plugins (agentmemory, gemini-auth, open-cursor).
argument-hint
[info]

opencode-lane

Info (print and stop)

If $ARGUMENTS is info, or the user says info / справка / как запускать this skill: print the block below verbatim (Russian), then stop. Do not edit the plugin.

text
opencode-lane — OpenCode-половина Claude Lane

Роли
- Claude Code = PM: run-init, run-supervisor, lane-ctl owns/verify/accept.
- OpenCode = писатели (Grok и любой другой model через lane-session).
- Этот плагин = единственное НАШЕ нововведение внутри OpenCode-сессии.

Куда класть код
- Вход: profiles/opencode/opencode-lane.ts (только re-export).
- Код:  profiles/opencode/opencode-lane/<mod>.ts + проводка в index.ts.
- Живое: ~/.config/opencode/plugins/opencode-lane.ts + plugins/opencode-lane/.
- Не второй plugin-файл. Не новое имя в opencode.json.

Конвейер
- lane-session без --pure (плагин должен грузиться).
- Env: LANE_TASK_FILE, LANE_PROMPT_FILE, LANE_STACK_ROOT, TYPESAFE_API_KEY.
- Выкл Jev extra: LANE_OPENCODE_JEV=0. Выкл effort: LANE_JEV_EFFORT=0.
- Fail-open: Jev/winnow упал → сессия как без плагина, строка в jsonl.

Нельзя
- owns / verify / accept / retry — не сюда (lane-ctl, lane-session).
- Глотать чужие плагины (agentmemory-capture, gemini-auth, open-cursor).
- Второй планировщик на Jev. Jev = System One, не coding LLM.

Как открыть шпаргалку
- Claude Code: /lane-stack:opencode-lane info
- OpenCode TUI: /opencode-lane  (файл ~/.config/opencode/commands/opencode-lane.md)
- Не /lane-stack:… в палитре OpenCode — это namespace Claude-плагина, там его нет.

Диагноз прогона
- Сказать «делай диагноз».
- Лог: сосед LANE_PROMPT_FILE → opencode-lane.jsonl
  при read-only .agents → ~/.config/opencode/opencode-lane.jsonl
- Запуск/инструменты/stderr: provider.events.jsonl рядом с provider.out.
- Связь: task + session + call/message ID; log_origin указывает попытку.

Canonical files: profiles/opencode/opencode-lane.ts, profiles/opencode/opencode-lane/index.ts, bin/lane-session (attach_lane_contract_env, opencode argv). Skills lane-contract (YAML) and orchestrator-lanes (DAG) stay separate.

Load typesafe-ai when adding a Jev question. Keep known rules in code; Jev only supplies a typed judgment.


Split (do not blur)

LayerOwnerLives in
Task YAML, owns, acceptancePM.agents/runs/ + lane-contract
Dispatch, retry, session idControllerbin/lane-session, lane-ctl
L1 verify / acceptControllerlane-ctl — never the plugin
Sticky YAML contractPluginsticky.ts
Winnow large tool outputPluginindex.ts → sidecar :47311
Effort routePluginchat.params + jev-route-core.ts
History compactionOpenCodeNo extra plugin compaction; message transforms preserve tool history
Diagnose a failed toolPlugindiagnose.ts (hint only)
Write-skill hintPluginskill-hint.ts
Acceptance vs last toolPluginevidence.ts
Failure telemetryPluginlog.ts → opencode-lane.jsonl
All-tool progressPluginbudget.ts + telemetry.ts: full input/output fingerprints, call-ID deduplication, advisory repeat hints

A judgment that changes accept/retry/merge belongs in lane-ctl, not here. The plugin may only append a [opencode-lane …] note and a jsonl row. The writer still decides; the controller still gates.


Add an OpenCode change

  1. One module under profiles/opencode/opencode-lane/. One hook concern.
  2. Wire it in index.ts. Re-export from opencode-lane.ts only if tests or agents import the symbol.
  3. Fail-open: catch, laneLog({ mod, ok: false, err }), keep the session.
  4. Brand every user-visible string [opencode-lane <mod>].
  5. install.sh already copies opencode-lane.ts + the folder. Do not add a second plugin list entry.
  6. Copy live: ~/.config/opencode/plugins/opencode-lane.ts and plugins/opencode-lane/*.ts. A checkout-only fix is not shipped.
  7. One smallest test in tests/test_jev_route.py (string wire or a node --experimental-strip-types check). No extra harness.

OpenCode hooks this plugin uses:

  • chat.message — remember prompt, skill-hint
  • chat.params — Jev effort
  • tool.execute.before — block write over an existing file and git checkout/restore/reset/switch
  • tool.execute.after — winnow, diagnose
  • All tool events, including glob/MCP/edit/write/errors, feed progress diagnostics; Winnow still filters only read/grep/bash/shell. Novel output is evidence to inspect, not proof of task completion. first_edit_callback_ms measures a callback, not a verified file change.
  • experimental.chat.messages.transform — evidence, sticky; no extra history compaction

If OpenCode grows a new hook, handle it in index.ts, not a sibling plugin.


Diagnose a writer run

User said «делай диагноз» — do this, then stop unless they said «чини».

  1. Read the jsonl (newest last):
bash
f="${LANE_PROMPT_FILE%/*}/opencode-lane.jsonl"
[ -f "$f" ] || f="$HOME/.config/opencode/opencode-lane.jsonl"
tail -n 40 "$f"
  1. Filter by task, session, and log_origin (the fallback is shared). Classify rows by mod: startup telemetry jev route winnow sticky diagnose skill-hint evidence budget. ok: false is an error or retry. telemetry records session errors, assistant errors, tool running/completed/error, permission events, and lifecycle events. budget rows with dup: true are repeated results. On the third identical read/grep result, repeated_read emits a deterministic hint to reuse the result or report a blocker. It does not terminate the writer or change controller retry/acceptance policy.
  2. Confirm the conveyor actually loaded us:
    • argv has no --pure
    • ~/.config/opencode/opencode.json plugin contains ./plugins/opencode-lane.ts
    • LANE_TASK_FILE was in the process env (sticky empty without it)
  3. Report: module, last err, whether the session continued (fail-open). Do not patch until asked.
Provider and startup diagnostics

lane-session launches OpenCode with --print-logs --log-level WARN and writes provider.events.jsonl next to provider.out. This works even if the plugin never loads. It includes startup stderr, protocol errors, tool status/call/message IDs, input/output hashes, safe path/offset fields, step boundaries, and the final process result. provider.out retains the writer text; prompt.md is the exact dispatch prompt. Cursor ACP warnings/errors are forwarded to the same stderr journal via CURSOR_ACP_LOG_CONSOLE=1 and CURSOR_ACP_LOG_LEVEL=warn, because its default ~/.opencode-cursor file logger is outside the sandbox's writable mounts.

Lane writers set OPENCODE_CONFIG_CONTENT={"snapshot":false,"compaction":{"auto":false,"prune":false}}. Parallel writers in the same checkout otherwise race on OpenCode's shared snapshot Git index; stale root-owned snapshot objects can also reject writes. This disables OpenCode UI undo for lane writers only. Lane's own change tracking, owns/verify/accept gates, and interactive OpenCode config stay intact. See https://opencode.ai/docs/config/#snapshot.

Jev failure diagnosis requires a nonzero integer metadata.exit from the tool result. Successful reads/grep and results without an exit code are not failure evidence, even if their text contains error or failed. The existing failure-text gate still applies; known credentials are redacted from the task/output excerpt before it is sent to Jev. Actual tool errors remain in event telemetry regardless of Jev diagnosis.

The plugin uses OpenCode's documented event hook and mirrors its errors through client.app.log(). Native logs live under ~/.local/share/opencode/log/. Find full tool arguments/results by session and call ID in OpenCode's session store (opencode export <sessionID>). Telemetry intentionally excludes full file contents, reasoning, and shell arguments; known credential patterns and environment secret values are redacted.

Plugin journals rotate at 5 MiB; provider journals at 1 MiB; each keeps one backup (.1). Missing startup records can mean an old process, disabled logging, a load failure, or an unwritable log destination. Check stderr and the native log before assuming that a missing journal means no errors. A heartbeat proves process activity, not progress or successful acceptance.

Sources: https://opencode.ai/docs/plugins/#events, https://opencode.ai/docs/plugins/#logging, https://opencode.ai/docs/troubleshooting/#logs.


Show full SKILL.md (429 more words)Show less

Current gaps (2026-09-22)

Do-now (can pay, bounded):

  1. Conveyor dropped --pure, so every opencode.json plugin loads (agentmemory-capture, gemini-auth, open-cursor). Need a lane-only config or an allowlist so only opencode-lane runs in writer sessions.
  2. attach_lane_contract_env now always pins LANE_STACK_ROOT (install.json if ~/.agents/bin has no sidecar). LANE_OPENCODE_JEV still only if already in the parent env.
  3. evidenceNotes still run once per evidence hash (early empty skips). skillHint is once per task, not per tool.
  4. Diagnose notes are not consumed by lane-ctl retry (controller backlog).
  5. experimental.chat.messages.transform may omit sessionID → notes keyed as "".
  6. This host: GitNexus MCP Ladybug v41 vs index v42 — impact fails; CLI still works.

Later (TypeSafe skill, keep the idea, do not reject). Not new plugins. Each item is a module under profiles/opencode/opencode-lane/ or a lane-ctl / lane-session change. Jev judges; code owns the rest.

Token sinks (measure before cutting): unfamiliar-repo search, debug without repro, large refactor/review, browser/DOM dumps, multi-agent re-reads.

IdeaWhereStatus
budget log (insights)budget.ts jsonl mod:budgetnow — chars, fingerprint, dup count
Repeat-loop hintbudget.ts repeatHint on bash ×3now — hint only, never deny
Rerank before ReadGitNexus/rg shortlist + Jev Score per candidate (rerank)next after jsonl shows wasteful reads
Re-read only if neededhash + range; Jev only for “is the old span enough?”. Never replace a missing source with “you already saw this”.after budget data
Structured tool stubsextend winnow/fast-jev for test/API/pagelater
Claude↔OpenCode min packsticky + lane-session handoff; Jev picks extra candidates; artifacts stay linkedlater (lane-ctl owns retry)
Resume after crashlane-session lease already resumes; add freshness check of files/envlater, not the plugin
Independent acceptGemini lane-reviewer + existing L1; Jev evidence alreadylater in lane-ctl, not a plugin
Replay benchsequential fixtures, no prod side effectslater, not OpenCode

Cache trap: shrinking context can cost more if it busts the prompt cache. Net = cost_without − cost_with − Jev − extra retries from lost context. Compare equal-quality tasks; subscription ≠ API invoice.

Do not: mutation-testing harness, model-stats auto-router, merging agentmemory into this plugin, Jev as a coding agent, separate lane-budget / lane-insights / lane-resume plugins.


TypeSafe rules for new judgments

  • Choice = one of a set. Noul = yes/no (no separate confidence). Score = degree. One narrow question per id. Independent questions in one request.
  • Thresholds are ours (diagnose conf ≥ 0.5, skill-hint ≥ 0.55, evidence supports ≥ 0.8). Re-evaluate on real jsonl, not cookbook demos.
  • Extra Jev is off with LANE_OPENCODE_JEV=0. Effort router is separate (LANE_JEV_EFFORT=0).

NEVER

  • A second OpenCode plugin branded as ours.
  • Accept / merge / retry policy inside the plugin.
  • Swallowing third-party plugins.
  • Inventing API keys or reading opencode.json secrets into chat.
  • Docs/README besides this skill unless the user asked.

© VKirill, MIT. Rendered from Markdown: HTML in the file is shown as text, images as links, and headings moved down two levels. Raw file

Files

Just SKILL.md in plugins/lane-stack/skills/opencode-lane of VKirill/claude-lane-stack.

Open the folder on GitHubat commit ad5d501

Compare with similar skills

Opencode Lane next to the 5 skills that share the most tags, products or categories with it. Stars are the repository's; “used in” counts other GitHub owners with a copy.

Opencode Lane compared with similar skills
SkillStarsUsed inTokensAuto-checkLicenceRepo updated
Opencode Lane this skillVKirill/claude-lane-stack122—~3.1kAutomated safety check: PassMIT
MCP Server Builderanthropics/skills180k62 repos~2.3kAutomated safety check: PassApache-2.0
Hook Development for Claude Code Pluginsanthropics/claude-plugins-official37k11 repos~4.1kAutomated safety check: NotesApache-2.0
Using Superpowersfarm-fe/farm5.6k34 repos~1.4kAutomated safety check: PassMIT
Executing Plans Inlineobra/superpowers296k2 repos~5.1kAutomated safety check: PassMIT
Claude Code Agent Developmentanthropics/claude-plugins-official37k8 repos~2.8kAutomated safety check: PassApache-2.0

Similar skills

  • MCP Server Builder

    anthropics/skills

    Official

    Guides the design and implementation of Model Context Protocol servers in TypeScript or Python, from tool naming and error messages to evaluation.

    180k GitHub starsUsed in 62 repos~2.3k tokens
    Agent WorkflowsAuto-check passed
  • Hook Development for Claude Code Plugins

    anthropics/claude-plugins-official

    Official

    Explains how to write Claude Code plugin hooks, both prompt-based checks and bash commands, for events such as PreToolUse, Stop and SessionStart.

    37k GitHub starsUsed in 11 repos~4.1k tokens
    Agent WorkflowsAuto-check: notes
  • Using Superpowers

    farm-fe/farm

    A skill your agent uses when starting any conversation - establishes how to find and use skills, requiring Skill tool invocation before ANY response including clarifying questions

    5.6k GitHub starsUsed in 34 repos~1.4k tokens
    Agent WorkflowsAuto-check passed
  • Executing Plans Inline

    obra/superpowers

    Has the agent carry out an implementation plan itself, task by task in the current session, keeping a ledger, proving each step with a test and ending with one whole-branch review.

    296k GitHub starsUsed in 2 repos~5.1k tokens
    Agent WorkflowsAuto-check passed
  • Claude Code Agent Development

    anthropics/claude-plugins-official

    Official

    Explains how to write agents for Claude Code plugins: the markdown file with YAML frontmatter, trigger descriptions, model and color settings, and system prompt design.

    37k GitHub starsUsed in 8 repos~2.8k tokens
    Agent WorkflowsAuto-check passed
  • Skill Creator

    Azure/azqr

    Official

    Create new skills, modify and improve existing skills, and measure skill performance.

    794 GitHub starsUsed in 89 repos~8.2k tokens
    Agent WorkflowsAuto-check passed

More from VKirill/claude-lane-stack

All 53 skills in this repo
  • UI UX Pro Max

    VKirill/claude-lane-stack

    Lane-stack design + brand intelligence (vendored ui-ux-pro-max).

    122 GitHub stars~4.7k tokensUpdated yesterday
    Auto-check passed
  • App Architect

    VKirill/claude-lane-stack

    Owner-facing architect for a new app or service. An agent skill from VKirill/claude-lane-stack.

    122 GitHub stars~1.2k tokensUpdated yesterday
    Auto-check passed
  • Browser QA

    VKirill/claude-lane-stack

    Live browser QA + Playwright-compatible replay. An agent skill from VKirill/claude-lane-stack.

    122 GitHub stars~2.1k tokensUpdated yesterday
    Auto-check passed
  • Copy Project Life

    VKirill/claude-lane-stack

    Карта файлов копирайта в .agents/copy/: шаблоны, статусы, цепочка audience→headlines→ux.

    122 GitHub stars~534 tokensUpdated yesterday
    Auto-check passed
  • Copy Research

    VKirill/claude-lane-stack

    Dispatch copy-lead helpers: Tavily, Codex luna/terra, grok/X, OpenCode DeepSeek, Cursor Grok 4.6 medium-fast.

    122 GitHub stars~827 tokensUpdated yesterday
    Auto-check passed
  • Docs Maintain

    VKirill/claude-lane-stack

    Keep living docs/ honest after code changes. An agent skill from VKirill/claude-lane-stack.

    122 GitHub stars~459 tokensUpdated yesterday
    Auto-check passed

Categories

Questions about Opencode Lane

What does Opencode Lane do?

Claude Lane OpenCode half. An agent skill from VKirill/claude-lane-stack. Opencode Lane is an agent skill from VKirill/claude-lane-stack. Claude Lane OpenCode half.

When should I use Opencode Lane?

Opencode Lane fits situations like: user says opencode-lane; openCode plugin; sticky contract; winnow on OpenCode.

How do I install Opencode Lane in Claude Code?

Run `npx skills add VKirill/claude-lane-stack --skill opencode-lane -a claude-code`. Or copy the skill folder (plugins/lane-stack/skills/opencode-lane in VKirill/claude-lane-stack) into .claude/skills/opencode-lane in your project. Claude Code loads it when a task matches its description.

How do I install Opencode Lane in Codex?

Run `npx skills add VKirill/claude-lane-stack --skill opencode-lane -a codex`. Or copy the skill folder (plugins/lane-stack/skills/opencode-lane in VKirill/claude-lane-stack) into .agents/skills/opencode-lane in your project. Codex loads it when a task matches its description.

Can I use Opencode Lane in Cursor, Gemini CLI or GitHub Copilot?

Cursor, Gemini CLI, GitHub Copilot and OpenCode also load SKILL.md folders. With the skills CLI, run `npx skills add VKirill/claude-lane-stack --skill opencode-lane -a cursor` (or -a gemini-cli, github-copilot or opencode for the others). To copy it by hand, put the folder in .cursor/skills/opencode-lane, .gemini/skills/opencode-lane, .github/skills/opencode-lane and .opencode/skills/opencode-lane in your project.

What does Opencode Lane need to run?

Going by SKILL.md and its folder, Opencode Lane needs the command-line tools its instructions call (git and opencode) and credentials named TYPESAFE_API_KEY. Our summary lists: A credential in TYPESAFE_API_KEY.

Does Opencode Lane access the network?

SKILL.md names 2 domains. As links in the text: opencode.ai and docs.typesafe.ai. This is read from the text; nothing was executed.

Is Opencode Lane safe to install?

Our automated static check of SKILL.md found no risky patterns, such as piping downloads into a shell, reading credential files or hidden Unicode. It is not a guarantee. Review the folder before installing.

What licence does Opencode Lane use?

Opencode Lane is published under the MIT licence (the repository's licence). It allows redistribution, so the full SKILL.md is shown on this page.

How many tokens does Opencode Lane use?

About 3.1k tokens (SKILL.md is roughly 13k characters). Agents keep only the skill's name and description in context until a task matches; then they load SKILL.md in full.

What are the alternatives to Opencode Lane?

Skills that share tags, products or a category with Opencode Lane: MCP Server Builder (anthropics/skills, 180k stars), Hook Development for Claude Code Plugins (anthropics/claude-plugins-official, 37k stars), Using Superpowers (farm-fe/farm, 5.6k stars) and Executing Plans Inline (obra/superpowers, 296k stars). The comparison table on this page puts their stars, adoption, token cost, safety result and licence side by side.

Who maintains Opencode Lane?

VKirill (a GitHub user) maintains it in VKirill/claude-lane-stack, which has 122 GitHub stars. The repository holds 53 skills in this directory. The repository was last updated on October 6, 2026.

Source: VKirill/claude-lane-stack on GitHub. Facts on this page come from the repository at the commit we read; the author's words are quoted as theirs.