framework_eng/skills/tool-usage/v8-runner/SKILL.md
Use when Codex needs to manage v8-runner on local 1C projects through the CLI: configure v8project.yaml, initialize infobases or EDT workspaces, build sources from Designer or EDT, run syntax checks and tests, dump infobase changes, convert source formats, load or export artifacts, launch 1C clients, or choose safe 1C automation command sequences.
npx skillsauth add steelmorgan/1c-agent-based-dev-framework v8-runnerInstall this skill globally with one command. Works with Claude Code, Cursor, and Windsurf.
3 of 9 scanners reported clean
Some scanners were skipped, did not run, or reported a non-clean status. Review each row below.
Use this skill to manage v8-runner as an automation layer for local 1C development projects.
Keep this file as the entry point for decisions. Load only the reference file that matches the task:
references/command-selection.md — for choosing the correct command sequence.references/bootstrap.md — for generating v8project.yaml from an existing repository: what to determine yourself and what to ask the user (decision tree for format, builder, connection).references/config-and-backends.md — about v8project.yaml, source sets, formats, builders, and backend limitations.references/project-workflows.md — typical build, syntax, dump, launch, and source synchronization scenarios for Designer- and EDT-based projects.references/file-and-artifact-workflows.md — about dump, convert, load, make/artifacts, and staged publication.references/testing.md — about YaXUnit, Vanessa Automation, syntax checks, and artifacts.references/troubleshooting.md — about configuration failures, stale state, and environment diagnostics.references/auth-guard.md — hard stop on license patterns, the rule of two candidates, auth/path error classification, storing credentials in v8project.local.yaml.Canonical binary path is tools/external/v8-runner/v8-runner (in the project this works through the tools/ symlink to the framework). The framework installer pulls the latest release from alkoleft/v8-runner-rust on every launch; manual reinstall is python tools/install.py --install-external-tools. If the binary is missing at that path and also not in PATH, ask the user for the path or use the project wrapper script.
v8project.yaml is the default project config name. A neighboring v8project.local.yaml is loaded automatically for machine-local paths, credentials, tools, tests, and MCP settings. Do not pass --config v8project.yaml unless the user explicitly asks for a non-standard command form or the active config path differs from the default; never pass v8project.local.yaml through --config.
Generated v8project.yaml files contain a yaml-language-server modeline that points to the versioned JSON Schema for the current v8-runner release. For v8project.local.yaml, use the corresponding raw URL docs/schemas/v8project.local.schema.json from the GitHub tag in editor settings when schema-assisted editing matters.
Use JSON output only when another tool, script, or the final answer needs structured results:
v8-runner --json-message build
For direct human diagnostics, use text output.
Useful global flags:
--config <CONFIG> — when the active config is not ./v8project.yaml.--json-message — for machine-readable CLI wrappers.--workdir <WORKDIR> — overrides workPath; takes precedence over v8project.local.yaml.--clean-before-execution — clear logs before execution.--log-level <error|warn|info|debug|trace> — for diagnostics.--no-color — plain text output.v8project.yaml exists at the root of the 1C project.v8-runner config init ... command that fits the project form.v8-runner init only when you need to create a file-based infobase or an EDT workspace.Useful initialization commands:
v8-runner config init
v8-runner config init --connection "File=build/ib"
v8-runner config init --format edt
v8-runner config init --builder IBCMD
v8-runner init
v8-runner build.--source-set <NAME> instead of a full rebuild or materializing everything.v8-runner build --full-rebuild.format and builder, then choose syntax designer-modules, syntax designer-config, or syntax edt.v8-runner test ... command; tests build first.v8-runner launch mcp va ... to start the client MCP server with VA loaded.v8-runner extensions or extensions --name <SOURCE_SET>.git status, then run the appropriate v8-runner dump ... command.v8-runner convert; this is CLI-only and does not use the infobase..cf or .cfe artifacts need to be applied to the infobase: use v8-runner load ....v8-runner make ... or the artifacts alias.v8-runner launch designer, launch thin, launch thick, or launch ordinary.v8-runner launch mcp ....--mcp-transport, --manager-url, --client-uid, --corr-id, --mcp-log-level, --mcp-ws-timeout-ms) are available on launch ... and test ... commands in the same way. Subtle clap detail: on test, the flags are placed before the yaxunit/va subcommand (for example, v8-runner test --mcp-transport=ws yaxunit module <NAME>), not after.WS pairing with v8-client-session-manager is a mode in which the 1C client MCP server connects to the manager over WebSocket instead of local HTTP MCP. It is controlled by the same set of CLI flags or by tools.client_mcp.* in v8project.yaml.
The same set of flags works for:
v8-runner launch designer | thin | thick | ordinary — flags are placed after launch.v8-runner launch mcp / launch mcp va — flags are placed after launch mcp [va].v8-runner test yaxunit all / test yaxunit module <NAME> — flags are placed at the test level, BEFORE the yaxunit subcommand.v8-runner test va — flags are placed at the test level, BEFORE the va subcommand.Example (test): v8-runner test --mcp-transport=ws --mcp-log-level=debug yaxunit module mcp_МспПровайдер_Тесты. If you place the WS flags after yaxunit or module <NAME>, clap returns error: unexpected argument because these subcommands do not declare their own McpClientWsArgs.
--mcp-transport={ws|legacy|auto} — auto (default) performs a TCP probe of manager_url for about 200 ms; ws is strict WS and fails if unavailable; legacy is the old HTTP mode without probe.--manager-url <URL> — override tools.client_mcp.manager_url (default ws://127.0.0.1:4000/sessions).--client-uid <UUID> — override the auto-generated v4 UUID.--corr-id <STR> — override vr-<first 8 characters of client_uid>.--mcp-log-level={off|error|warn|info|debug|trace} — log level inside the client.--mcp-ws-timeout-ms <N> — WS handshake timeout (default 1000 ms; relevant for auto fallback).Alternative: all of this can be configured in tools.client_mcp.* in v8project.yaml / v8project.local.yaml — priority order: CLI → yaml → internal defaults.
tools:
client_mcp:
transport: auto # ws | legacy | auto
manager_url: ws://127.0.0.1:4000/sessions
log_level: info
ws_timeout_ms: 1000
kind is fixed by the entry point and cannot be overridden from the CLI in any mode.
kind Mapping| Command | kind |
|---|---|
| launch mcp | v8_runner_client |
| launch mcp va | vanessa_test_client |
| test yaxunit ... | yaxunit_runner |
| test va ... | vanessa_test_client |
/C in the WS Branch/C"mcpMode=ws;manager_url=<URL>;client_uid=<UUID>;kind=<KIND>;corr_id=<CORR>;mcp_log_level=<LVL>;mcp_ws_timeout_ms=<MS>"
For launch, this is the entire /C; for test commands, the WS fragment is appended with ; to the existing RunUnitTests=… / Vanessa player (if transport=ws is selected through the yaml config).
The full payload, the JSON output form (--json-message), probe rules, and behavior when the manager is unavailable are in references/project-workflows.md (section "WS Mode with session-manager"). Bringing up the manager itself is not part of v8-runner — see the v8-session-manager skill.
test yaxunit (DRIVE 2026-05-11)Symptom: yaxunit_runner is NOT registered in the manager's session_list, although v8-runner correctly injects the WS payload into /C (RunUnitTests=...;mcpMode=ws;...;kind=yaxunit_runner;...).
The root cause is a race condition in BSL client_mcp (ManagedApplicationModule.bsl): the idle handler Мсп_ОтложенныйСтарт_Тик was set with a 1 second interval, while YAXUNIT with closeAfterTests: true closed the application about 1 second after startup (the tests run in about 200 ms), so the idle handler did not have time to tick.
Fix: reduce the idle-handler interval from 1 to 0.1:
// exts/client_mcp/Ext/ManagedApplicationModule.bsl
ПодключитьОбработчикОжидания("Мсп_ОтложенныйСтарт_Тик", 0.1, Истина);
After the fix, yaxunit-Enterprise registers as kind=yaxunit_runner in the manager's session_list (confirmed in v8-runner stdout: [MCP INFO ...] WS session registered: uid=... kind=yaxunit_runner ... tools=24).
references/auth-guard.md.1cv8, ibcmd, or 1cedtcli flags; prefer the v8-runner command surface.dump, check git status if the result may overwrite or mix with already applied source edits.workPath/temp/<runner-id>/runs/<run-id>/ for diagnostics; do not clean them immediately.When reporting results, separate:
testing
MUST use BEFORE making a judgment about the cause of a conflict, a test failure, or an artifact dispute. Defines the end-to-end verification method L1→L6 and the classification of the first broken link.
development
MUST use AFTER a work cycle with ≥2 iterations (wrote → error → fixed → success). Provides the retrospective procedure and the format for recording practice/anti-patterns in references/learned-patterns.md or {project}/.context/learned-patterns.md.
tools
MUST use WHEN you are writing reusable knowledge into RLM (pattern / architectural decision / stable domain fact) OR reading it before a non-trivial task/solution in the domain. Provides the breakdown of native-push vs RLM-pull, tools for writing and reading RLM, H-MEM levels, and hygiene.
testing
MUST use WHEN the task is classified as simple (< 20 lines, 1 file, no new metadata objects, no architectural decisions). Provides a short cycle of 3 steps with a guard on the self path and mandatory verify.