Update Plugin Harness Targets
SkillAI & modelsUpdate the target OpenCode, Codex, GitHub Copilot, Cursor, DeepSeek, Grok Build, Claude Code, Hermes Agent, Pi, and OMP CLI versions used by the Sesori bridge. Use when asked to update, bump, or refresh coding harness targets, managed runtimes, or release checksums while preserving compatibility minimums.
Available today. Use it from your connected AI after setup.
No other account needed.
Connect ahel once, and every AI you use reads what you have installed.
Then ask your AI: use the Update Plugin Harness Targets skill
What this skill tells your AI
The instructions your AI receives, as published by sesori-ai/sesori_apps_monorepo in .opencode/skills/update-backend-runtimes/SKILL.md and read by ahel’s review.
Update every registered bridge harness target to its latest stable release. This includes managed-runtime pins and direct-CLI validation metadata, never an implicit compatibility-floor increase, and is separate from the general Dart/Flutter dependency update workflow.
Scope
- OpenCode managed target and PATH minimum:
bridge/sesori_plugin_opencode/lib/src/runtime/open_code_runtime_manifest.dart - OpenCode API surface metadata:
bridge/sesori_plugin_opencode/tool/opencode_v1_surface.json - OpenCode manifest tests:
bridge/sesori_plugin_opencode/test/runtime/open_code_runtime_manifest_test.dart - Codex managed target and PATH minimum:
bridge/sesori_plugin_codex/lib/src/runtime/codex_runtime_manifest.dart - Codex manifest tests:
bridge/sesori_plugin_codex/test/runtime/codex_runtime_manifest_test.dart - GitHub Copilot managed target, PATH minimum, and per-platform checksums:
bridge/sesori_plugin_copilot/lib/src/runtime/copilot_runtime_manifest.dart - GitHub Copilot manifest and lifecycle tests:
bridge/sesori_plugin_copilot/test/copilot_runtime_manifest_test.dartbridge/sesori_plugin_copilot/test/copilot_plugin_descriptor_test.dart - Claude Code direct-CLI target and minimum:
bridge/sesori_plugin_claude/lib/src/runtime/claude_plugin_descriptor.dart - Claude Code descriptor tests:
bridge/sesori_plugin_claude/test/runtime/claude_plugin_descriptor_test.dart - Cursor managed target, PATH minimum, and per-platform checksums:
bridge/sesori_plugin_cursor/lib/src/runtime/cursor_runtime_manifest.dart - Cursor manifest tests:
bridge/sesori_plugin_cursor/test/runtime/cursor_runtime_manifest_test.dart - Cursor availability tests:
bridge/sesori_plugin_cursor/test/cursor_plugin_descriptor_availability_test.dart - DeepSeek managed adapter target, PATH minimum, package archives, and per-platform checksums:
bridge/sesori_plugin_deepseek/lib/src/runtime/deepseek_runtime_manifest.dart - DeepSeek runtime and lifecycle tests:
bridge/sesori_plugin_deepseek/test/deepseek_runtime_manifest_test.dartbridge/sesori_plugin_deepseek/test/deepseek_plugin_descriptor_test.dart - Grok Build direct-CLI target and minimum:
bridge/sesori_plugin_grok/lib/src/runtime/grok_plugin_descriptor.dart - Grok Build descriptor tests:
bridge/sesori_plugin_grok/test/grok_plugin_descriptor_test.dart - Hermes Agent direct-CLI target and minimum:
bridge/sesori_plugin_hermes/lib/src/runtime/hermes_plugin_descriptor.dart - Hermes Agent descriptor tests:
bridge/sesori_plugin_hermes/test/hermes_plugin_descriptor_test.dart - Pi managed target, PATH minimum, package archives, and per-platform checksums:
bridge/sesori_plugin_pi/lib/src/runtime/pi_runtime_manifest.dart - Pi runtime and lifecycle tests:
bridge/sesori_plugin_pi/test/pi_runtime_manifest_test.dartbridge/sesori_plugin_pi/test/pi_plugin_descriptor_test.dart - OMP managed target, PATH minimum, direct assets, and per-platform checksums:
bridge/sesori_plugin_omp/lib/src/runtime/omp_runtime_manifest.dart - OMP runtime and lifecycle tests:
bridge/sesori_plugin_omp/test/omp_runtime_manifest_test.dartbridge/sesori_plugin_omp/test/omp_plugin_descriptor_test.dart - Registered harness source of truth:
bridge/app/lib/src/runtime/plugin_registry.dart - Setup and lifecycle regression contract when a compatibility floor changes:
docs/regression/plugin-setup-and-lifecycle.md
Read bridge/AGENTS.md before editing. Never hand-edit generated files.
Before release discovery, inspect knownPlugins in plugin_registry.dart and
confirm every concrete descriptor has a section in this skill. The current
closed set is OpenCode, Codex, GitHub Copilot, Cursor, DeepSeek, Grok Build,
Claude Code, Hermes Agent, Pi, and Oh My Pi. Shared interface, runtime, and ACP packages are
not harnesses. If the
registry has gained another harness, extend this skill for it as part of the
same change instead of silently skipping it.
Every harness must expose an independent compatibility minimum and target:
| Harness | Compatibility minimum | Latest target |
|---|---|---|
| OpenCode | OpenCodeRuntimeManifest.minPathVersion | OpenCodeRuntimeManifest.targetVersion |
| Codex | CodexRuntimeManifest.minPathVersion | CodexRuntimeManifest.targetVersion |
| GitHub Copilot | CopilotRuntimeManifest.minPathVersion | CopilotRuntimeManifest.targetVersion |
| Claude Code | ClaudePluginDescriptor.minVersion | ClaudePluginDescriptor.targetVersion |
| Cursor | CursorRuntimeManifest.minPathVersion | CursorRuntimeManifest.targetVersion |
| DeepSeek | DeepSeekRuntimeManifest.minPathVersion | DeepSeekRuntimeManifest.targetVersion |
| Grok Build | GrokPluginDescriptor.minVersion | GrokPluginDescriptor.targetVersion |
| Hermes Agent | HermesPluginDescriptor.minVersion | HermesPluginDescriptor.targetVersion |
| Pi | PiRuntimeManifest.minPathVersion | PiRuntimeManifest.targetVersion |
| Oh My Pi | OmpRuntimeManifest.minPathVersion | OmpRuntimeManifest.targetVersion |
For managed runtimes, bundledVersion is the parsed exact target used for
download and installation. Direct-CLI targets record the latest release whose
surface was validated; they do not gate otherwise-compatible local installs.
Version Policy
- A target refresh preserves every compatibility minimum byte-for-byte. Never derive a minimum from the latest target or raise one merely because a newer release exists.
- Update OpenCode's
targetVersionto the latest stableanomalyco/opencodeGitHub release. - Update Codex's
targetVersionto the latest stableopenai/codexGitHub release. - Update GitHub Copilot's
targetVersionto the latest stablegithub/copilot-clirelease after its official six-archive metadata and ACP v1 handshake pass the checks below. - Update Claude Code's direct-CLI
targetVersionto the latest stableanthropics/claude-coderelease after the candidate stream-json surface probe passes. - Update Cursor's
targetVersionto the current build advertised by the official installer athttps://cursor.com/install. - Update DeepSeek's
targetVersionto the latest stablesesori-ai/sesori-deepseek-acprelease only after its six package archives, extension protocol v1, and reported DeepSeek Harness pin pass the release checks below. - Update Grok Build's direct-CLI
targetVersionto the official xAI stable channel only after the dedicated no-auto-update/no-leader ACP v1 probe passes. - Update Hermes Agent's direct-CLI
targetVersionto the semantic package version in the latest stableNousResearch/hermes-agentrelease after its ACP v1 probe passes. Its calendar release tag is not the CLI version. - Update Pi's
targetVersionto the latest stableearendil-works/piGitHub release only after its JSONL RPC probe passes. - Update OMP's
targetVersionto the latest stablecan1357/oh-my-piGitHub release only after its ACP v1 probe passes. - Change a compatibility minimum only for a separate, explicit requirement
backed by a concrete newer capability. If OpenCode's minimum changes under
such a requirement, keep
opencode_v1_surface.jsonmetadata aligned. - Ignore prereleases. Confirm GitHub's
latestrelease and the corresponding npm package version agree for OpenCode, Codex, and Claude Code when npm is available.
Discover Releases
Fetch concise release data instead of printing complete release payloads.
OpenCode
gh api repos/anomalyco/opencode/releases/latest --jq '{tag: .tag_name, prerelease: .prerelease, assets: [.assets[] | select(.name == "opencode-darwin-arm64.zip" or .name == "opencode-darwin-x64.zip" or .name == "opencode-linux-arm64.tar.gz" or .name == "opencode-linux-x64.tar.gz" or .name == "opencode-windows-arm64.zip" or .name == "opencode-windows-x64.zip") | {name, digest}]}'
npm view opencode-ai version
Require exactly these six assets and a non-null sha256: digest for each:
opencode-darwin-arm64.zipopencode-darwin-x64.zipopencode-linux-arm64.tar.gzopencode-linux-x64.tar.gzopencode-windows-arm64.zipopencode-windows-x64.zip
Strip the sha256: prefix when writing each digest into the manifest.
Codex
gh api repos/openai/codex/releases/latest --jq '{tag: .tag_name, prerelease: .prerelease, assets: [.assets[] | select(.name == "codex-aarch64-apple-darwin.tar.gz" or .name == "codex-x86_64-apple-darwin.tar.gz" or .name == "codex-aarch64-unknown-linux-musl.tar.gz" or .name == "codex-x86_64-unknown-linux-musl.tar.gz" or .name == "codex-aarch64-pc-windows-msvc.exe.zip" or .name == "codex-x86_64-pc-windows-msvc.exe.zip") | {name, digest}]}'
npm view @openai/codex version
Codex release tags use rust-vX.Y.Z; store only X.Y.Z in the manifest. Require exactly these six assets and strip the sha256: prefix from their digests:
codex-aarch64-apple-darwin.tar.gzcodex-x86_64-apple-darwin.tar.gzcodex-aarch64-unknown-linux-musl.tar.gzcodex-x86_64-unknown-linux-musl.tar.gzcodex-aarch64-pc-windows-msvc.exe.zipcodex-x86_64-pc-windows-msvc.exe.zip
Confirm asset filenames have not changed before editing. Do not guess mappings for renamed or missing assets.
GitHub Copilot
gh api repos/github/copilot-cli/releases/latest --jq '{tag: .tag_name, prerelease: .prerelease, assets: [.assets[] | select(.name == "copilot-darwin-arm64.tar.gz" or .name == "copilot-darwin-x64.tar.gz" or .name == "copilot-linux-arm64.tar.gz" or .name == "copilot-linux-x64.tar.gz" or .name == "copilot-win32-arm64.zip" or .name == "copilot-win32-x64.zip") | {name, digest}]}'
npm view @github/copilot version
Require the stable GitHub vX.Y.Z tag and @github/copilot version to agree.
Require exactly these six assets with non-null GitHub sha256: digests, and
strip that prefix when writing the manifest:
copilot-darwin-arm64.tar.gzcopilot-darwin-x64.tar.gzcopilot-linux-arm64.tar.gzcopilot-linux-x64.tar.gzcopilot-win32-arm64.zipcopilot-win32-x64.zip
Before changing the pin, run the official current-host package with an isolated
COPILOT_HOME. Verify its branded GitHub Copilot CLI X.Y.Z. version, then
launch --no-auto-update --acp and confirm ACP v1 initialize plus the
copilot-login authentication method without prompting or reading the user's
normal profile. Preserve the PATH minimum unless a separate capability requires
raising it.
Claude Code
gh api repos/anthropics/claude-code/releases/latest --jq '{tag: .tag_name, prerelease: .prerelease, publishedAt: .published_at}'
npm view @anthropic-ai/claude-code version
npm view @anthropic-ai/claude-agent-sdk version
Require the stable GitHub vX.Y.Z tag and @anthropic-ai/claude-code npm
version to agree. Confirm the current Agent SDK release associated with that CLI;
its patch currently tracks the CLI patch under the 0.3.x line, but inspect the
published versions rather than assuming that scheme will never change.
Use the official current-host CLI package in an isolated temporary directory to
verify claude --version. Check claude --help for every public flag in
ClaudeLaunchSpec, and inspect the matching Agent SDK launch code for the
headless stream-json and stdio permission flags. Stop if a flag the production
launch requires disappeared or changed semantics. A version/help/source smoke
does not re-verify wire observations, so preserve historical protocol documents
and Verified against comments unless a live protocol trace was actually
repeated.
Cursor
Fetch the official installer without executing it:
curl -fsSL https://cursor.com/install
Extract the build identifier used in both the version directory and download URL, for example 2026.07.16-899851b. Do not install or update Cursor locally just to discover the version. If the installer does not expose one unambiguous build identifier, stop and report the blocker rather than guessing.
Cursor comparison parses only the leading YYYY.MM.DD calendar version. Preserve
the current minPathVersion unless a concrete capability requirement changes;
the bundled build remains an independent exact pin.
Cursor managed runtime checksums
Cursor publishes no digest manifest, so the manifest's SHA-256 values are computed by us at pin time. Download all four published packages for the build and hash them:
BUILD=2026.08.11-e8db854 # the installer's build identifier
D=$(mktemp -d)
for t in darwin/arm64 darwin/x64 linux/arm64 linux/x64; do
name=${t//\//-}
curl -fsSL -o "$D/$name.tar.gz" \
"https://downloads.cursor.com/lab/$BUILD/$t/agent-cli-package.tar.gz"
done
shasum -a 256 "$D"/*.tar.gz
Write targetVersion as the exact published build string (for example 2026.08.11-e8db854) and derive _bundledVersion from it. Preserve its CalendarRuntimeVersion.raw value in the download URL and version directory. There is no Windows package — leave PlatformOs.windows absent so the install capability stays off there.
Cursor ships a dist-package/ directory whose cursor-agent entry binary loads sibling files, so its assets use RuntimeAssetLayout.packageDirectory. If a future build ships a single self-contained binary instead, switch the layout rather than flattening the tree.
Because the digests are self-computed, a silently re-published asset fails checksum verification at install time with a clear message. That is intended: re-pin rather than relaxing verification.
DeepSeek
gh api repos/sesori-ai/sesori-deepseek-acp/releases/latest --jq '{tag: .tag_name, prerelease: .prerelease, assets: [.assets[] | {name, digest}]}'
Require one stable vX.Y.Z release, the aggregate checksums.txt, and exactly
these six package-directory archives with non-null GitHub sha256: digests:
sesori-deepseek-acp-vX.Y.Z-darwin-arm64.tar.gzsesori-deepseek-acp-vX.Y.Z-darwin-x64.tar.gzsesori-deepseek-acp-vX.Y.Z-linux-arm64.tar.gzsesori-deepseek-acp-vX.Y.Z-linux-x64.tar.gzsesori-deepseek-acp-vX.Y.Z-windows-arm64.zipsesori-deepseek-acp-vX.Y.Z-windows-x64.zip
Substitute the candidate version for X.Y.Z. Require each GitHub digest to
match its line in checksums.txt, then strip the sha256: prefix when writing
the manifest. Preserve RuntimeArchiveLayout.packageDirectory: the launcher
depends on bundled Node, production dependencies, protocol files, and runtime
assets beside it.
Run one current-host archive with an isolated home and state directory. Verify
--version reports the candidate adapter, extension protocol acp/1, and the
expected pinned DeepSeek Harness version. Then run check and the packaged ACP
smoke through initialize, list, new, prompt, history, restart/load, and close.
Stop if the extension version or reported DeepSeek pin changes unexpectedly;
update the adapter and consumer contract together rather than accepting drift.
Grok Build
Read the current release from xAI's official stable channel at
https://x.ai/cli/stable and confirm the corresponding public
xai-org/grok-build source revision. Do not execute the remote installer merely
to discover a version, and do not add Sesori-managed artifacts or checksums:
Grok remains a user-installed direct CLI.
Download the official current-host candidate into an isolated temporary
directory and verify its branded grok <version> (<build>) output. Launch it
with an isolated home through the exact production entry point,
grok --no-auto-update agent --no-leader stdio; never pass --always-approve
or --yolo. Verify ACP v1 initialize identity and advertised list/load/resume/
close capabilities. With safe authenticated test credentials, also verify new,
prompt, replay, model selection, and close. Stop rather than updating the target
when required authenticated evidence is unavailable or the Grok-owned model
metadata/session/set_model surface changes.
Hermes Agent
gh api repos/NousResearch/hermes-agent/releases/latest --jq '{tag: .tag_name, name: .name, prerelease: .prerelease, publishedAt: .published_at}'
Hermes uses calendar Git tags such as v2026.8.18 while
hermes acp --version reports a semantic package version such as 0.20.4. Read the
semantic version from the release name and the tagged pyproject.toml, and
require them to agree. PyPI is not the release source: Hermes is distributed by
its shell installer, Docker, and Nix, and its PyPI project may lag.
Do not execute the remote installer merely to discover a version. Check out the
exact release tag in an isolated temporary directory, install the tagged source
with its acp extra in an isolated environment, and verify
hermes acp --version, ACP v1 initialize, advertised list/load capabilities, and
session/list. Use an isolated HOME so the probe cannot read or mutate the
user's Hermes profile. A fresh profile has no model/provider, so session/new
may remain setup-blocked; when a safe configured fixture is available, also
probe session/new and session/load. Stop on protocol regression.
Pi
gh api repos/earendil-works/pi/releases/latest --jq '{tag: .tag_name, prerelease: .prerelease, assets: [.assets[] | select(.name == "pi-darwin-arm64.tar.gz" or .name == "pi-darwin-x64.tar.gz" or .name == "pi-linux-arm64.tar.gz" or .name == "pi-linux-x64.tar.gz" or .name == "pi-windows-arm64.zip" or .name == "pi-windows-x64.zip") | {name, digest}]}'
Require exactly six archive assets with non-null GitHub sha256: digests. macOS and Linux archives wrap a complete pi/ package tree; Windows archives are flat package trees. Preserve RuntimeArchiveLayout.packageDirectory so the managed entry remains beside its assets, native modules, and metadata. Never flatten these archives to a lone executable or invoke Pi's installer scripts.
Before changing the pin, install one official current-host archive into an isolated temporary directory, verify pi --version, then launch pi --mode rpc --no-session --approve with PI_SKIP_VERSION_CHECK=1 and verify a correlated get_state response. Preserve the user's normal Pi profile/config variables and stop if the RPC probe regresses.
OMP
gh api repos/can1357/oh-my-pi/releases/latest --jq '{tag: .tag_name, prerelease: .prerelease, assets: [.assets[] | select(.name == "omp-darwin-arm64" or .name == "omp-darwin-x64" or .name == "omp-linux-arm64" or .name == "omp-linux-x64" or .name == "omp-linux-musl-arm64" or .name == "omp-linux-musl-x64" or .name == "omp-windows-x64.exe" or .name == "SHA256SUMS.txt") | {name, digest}]}'
Require exactly seven bare executable assets plus SHA256SUMS.txt: macOS arm64/x64, Linux glibc arm64/x64, Linux musl arm64/x64, and Windows x64. OMP publishes no Windows arm64 executable. Confirm each executable digest against both GitHub's sha256: digest and SHA256SUMS.txt; never model these raw files as archives.
Before changing the pin, run the official candidate in an isolated temporary cwd/profile and verify omp/<version>, ACP v1 initialize, authenticate(agent), session/list, session/new, session/load, and persisted cleanup. Point PI_CODING_AGENT_DIR at the temporary profile, inherit the remaining environment, and do not alter the user's normal profile or approval policy. Stop if any protocol check regresses.
Edit
- Update OpenCode's target version and all six matching SHA-256 values.
- Update Codex's target version, release-version documentation, and all six matching SHA-256 values.
- Update GitHub Copilot's target version and all six matching SHA-256 values after the candidate ACP probe passes.
- Update Claude Code's direct-CLI target and descriptor test fixtures after the candidate probe passes.
- Update
CursorRuntimeManifest.targetVersionto the official current build and refresh all four computed SHA-256 values. - Update
DeepSeekRuntimeManifest.targetVersiononly after all six release digests, the aggregate manifest, and the isolated packaged ACP probe agree. - Update Grok Build's direct-CLI target and descriptor fixtures only after the isolated ACP probe passes.
- Update Hermes Agent's direct-CLI target and descriptor test fixtures after the tagged-source ACP probe passes.
- Update
PiRuntimeManifest.targetVersiononly after the isolated JSONL RPC probe passes; refresh all six SHA-256 values and preserve complete package-directory placement. - Update
OmpRuntimeManifest.targetVersiononly after the isolated ACP probe passes; refresh all seven SHA-256 values and preserve glibc/musl and unsupported Windows arm64 mapping. - Verify every minimum is unchanged from the base branch. A target-only update must not modify a minimum-version line or an outdated-version test boundary.
- Update hard-coded version URLs, version assertions, and recent-target fixtures in all manifest/availability tests.
- Search affected plugin packages for the replaced target versions. Update only references that describe the current target; preserve minimum-version fixtures, historical comments, and protocol observations tied to older versions.
- Update the setup/lifecycle regression document only for a separately
requested compatibility-floor change, then run
dart formaton changed Dart files.
Use apply_patch for manual edits.
Verify
Run the plugin suites independently; they may run in parallel:
(cd bridge/sesori_plugin_opencode && dart test && dart analyze --fatal-infos)
(cd bridge/sesori_plugin_codex && dart test && dart analyze --fatal-infos)
(cd bridge/sesori_plugin_copilot && dart test && dart analyze --fatal-infos)
(cd bridge/sesori_plugin_claude && dart test && dart analyze --fatal-infos)
(cd bridge/sesori_plugin_cursor && dart test && dart analyze --fatal-infos)
(cd bridge/sesori_plugin_deepseek && dart test && dart analyze --fatal-infos)
(cd bridge/sesori_plugin_grok && dart test && dart analyze --fatal-infos)
(cd bridge/sesori_plugin_hermes && dart test && dart analyze --fatal-infos)
(cd bridge/sesori_plugin_pi && dart test && dart analyze --fatal-infos)
(cd bridge/sesori_plugin_omp && dart test && dart analyze --fatal-infos)
(cd bridge/sesori_plugin_runtime && dart test && dart analyze --fatal-infos)
git diff --check
For Cursor, also confirm the pinned download URL resolves before committing (a wrong build string 404s only at install time on a user's machine):
BUILD=2026.08.11-e8db854
curl -fsSI --output /dev/null "https://downloads.cursor.com/lab/$BUILD/darwin/arm64/agent-cli-package.tar.gz"
If tests fail only because old versions are hard-coded in manifest assertions or availability fixtures, update those assertions to the new targets and rerun. Investigate all other failures normally.
Before finishing, report:
- old and new target versions plus the unchanged minimum for every registered harness
- confirmation that no compatibility floor changed
- whether all twelve GitHub asset digests were refreshed
- GitHub Copilot's stable GitHub/npm target, unchanged PATH floor, six verified archive digests, and isolated ACP handshake result
- Claude Code's stable GitHub/npm target, matching Agent SDK version, unchanged direct-CLI floor, and stream-json surface probe result
- Cursor's installer-advertised build, and whether its four managed-runtime digests were recomputed
- DeepSeek's adapter release, six verified package-archive digests, reported DeepSeek Harness pin, and packaged ACP probe result
- Grok Build's xAI stable release, build identifier, unchanged direct-CLI floor, and isolated ACP probe result
- Hermes Agent's calendar release tag, semantic CLI target, unchanged direct-CLI floor, and isolated ACP probe result
- Pi's release, six verified package-archive digests, and JSONL RPC probe result
- OMP's release, seven verified bare-executable digests, and ACP probe result
- test and analyzer results
Shortened here. Read the whole file on GitHub.
Signals
- GitHub stars
- 119
- Forks
- 8
- Last commit
- Sep 2026
Advanced
- Catalog kind
- skill
- Gateway key
update-backend-runtimes- Source
- github.com/sesori-ai/sesori_apps_monorepo