cyberuni/cyber-agent-harness
A toolkit for working with AI agent harnesses: detect which one is running, query its managed-policy locations, plugin storage, enabled plugins, and skill naming, and resolve layered reference documents.
@cyberuni/agent-harness
0.5.0
Minor Changes
- dae27d3: Rename the agent plugin from
agent-harnesstocyber-agent-harness, so its skills no longer share a namespace with any other marketplace's plugin of that generic name. Claude Code's typed form is now/cyber-agent-harness:reference; uninstallagent-harnessand run/plugin install cyber-agent-harness@cyberplace. Thereferencecommand's own plugin layer is now namedcyber-agent-harness, read fromplugin.json, socyber-agent-harness/<name>selects it. The npm package, theagent-harnesscommand, and the library API are unchanged.
0.4.0
Minor Changes
- 9ca2ca0: Add
headlessInvocation()andheadlessCommand(): how to run Claude Code, Codex, Copilot CLI, Cursor, Gemini CLI, or Qwen Code on one prompt with no user present — the command, model and permission flags, output formats and where token usage and cost appear, the transcript location, and the documented exit codes. Copilot in VS Code reports no headless mode, and the harnesses whose one-shot flags are not yet verified reportunknown. - 7151efb:
skillInvocation('kilo', …)now returns/<skill>(not namespaced by plugin) instead ofundefined: Kilo Code's CLI and VS Code extension both register every loaded skill as a slash command. - 9002ef2: Add
reference delete <name>. It deletes the project (.agents/references/) or user (~/.agents/references/) copy of a reference, with--scopeand--dry-run, and reports which copy answers the name afterwards. It refuses a plugin-shipped or managed copy. - 849cff0: Add reference documents:
loadReference()and the functions behind it resolve a named Markdown document across the managed, project, user, and plugin tiers, merging each override as its frontmattermergeasks. The package also ships anagent-harness referencecommand, andcreateReferenceCommand()andcreateReferenceCommands()at@cyberuni/agent-harness/commandsfor hosting it in another clibuilder CLI. It now has runtime dependencies (yaml,clibuilder,@toon-format/toon), none of them an agent tool. - f634c3c: Ship the
referenceskill in theagent-harnessplugin, moved frombuddy-agent-harness. Type/reference(/agent-harness:referencein Claude Code) to load, create, update, delete, find, or inspect a reference, or to wire a skill to load one. It runs this package'sreferencecommand from a bundledscripts/reference.mjsthat needs nonode_modules, and falls back tonpx -y @cyberuni/agent-harnessoutside Load. - 5a3e631:
skillsDirectories()now returns Kilo Code's directories (.kilo/skills,.agents/skills,.claude/skills) instead ofundefined, adds.claude/skillsand.agents/skillsfor the Auggie CLI, and adds.agents/skillsfor Cline, at both project and user scope.
Patch Changes
- 2823c69: Document that the OpenHands CLI 1.16.0 marks only its hook commands. Its shell commands carry no
AI_AGENT=openhands, because it bundles an OpenHands SDK older than that variable. Detection is unchanged.
0.3.0
Minor Changes
- b60b4e7: Add
installedPlugins(harness): each installed plugin with the folder the harness loads it from, its version, and, for Claude Code, its install scope. It reads Claude Code'sinstalled_plugins.json, Copilot CLI'sconfig.json, and Codex's plugin cache, where it applies Codex's own active-version rule. Every other harness reportssupported: false.
0.2.0
Minor Changes
- 0f40b36: Add
skillsDirectories(harness): the project and user directories a harness reads skills from, with the evidence IDs behind them. It returnsundefinedfor Kilo Code, Qwen Code, Crush, and OpenHands, where the directories are not confirmed. - 2c66fbf:
detectHarness()now also detects Crush (CRUSH=1), OpenHands (AI_AGENT=openhands, or its hook variables), and the Auggie CLI (in hook commands only), andpluginStorage(),managedPolicyLocations(),enabledPlugins(),skillInvocation(), andsupportsPluginDependencies()answer for them.AI_AGENTcounts as evidence only with the exact valueopenhands; other values, andAGENT=crush, are still ignored. Goose, Antigravity, Rovo Dev, Kiro, Amp, Factory Droid, Devin Desktop, and Warp are not detected, because none has a verified signal.
0.1.0
Minor Changes
-
f3a9e78:
detectHarness()now detects Claude Code, Cursor, Codex, and GitHub Copilot CLI from the process environment. It reports the matchedharness, every signal it found asevidence(each with the research claim ID behind it), and thecandidatesit matched. It reportsunknownwhen no harness matches and when more than one does, as happens when one harness runs inside another. -
f44d752: Add
enabledPlugins(harness, { env, homedir, cwd, platform }). For Claude Code, Codex, and GitHub Copilot CLI it reads the settings files that record enabled plugins and resolves each plugin by scope precedence: managed, then local, then project, then user. It lists the files it read, and inunreadit names the policy sources it cannot read, such as MDM and server-managed settings. Cursor reportssupported: false, because Cursor keeps no record of enabled plugins. -
5823a1b: Add
managedPolicyLocations(harness, { platform }). It lists where each harness keeps managed policy: local files and directories, macOS managed-preferences domains, Windows registry keys, and server-side sources that cannot be read locally. Each entry names the research claim behind it. -
a78c46a:
detectHarness()now also detects OpenCode, Kilo Code, Gemini CLI, Qwen Code, GitHub Copilot in VS Code, and Cline, andpluginStorage(),managedPolicyLocations(),enabledPlugins(),skillInvocation(), andsupportsPluginDependencies()answer for them. Kilo Code still sets OpenCode'sOPENCODE=1, but it is detected askilo;AGENTandAI_AGENT, which several vendors share, are not treated as evidence.skillInvocation()now returnsundefinedfor a harness with no typed skill invocation: OpenCode, Kilo Code, Gemini CLI, and Qwen Code load skills through a model tool call. -
68fce08: Add
pluginStorage(harness, { env, homedir }). It returns a harness's user-level config directory, afterCLAUDE_CONFIG_DIR,CODEX_HOME, orCOPILOT_HOME, and where it keeps installed plugins, marketplaces, the install record, and the enabled record. -
e6165bf: Add
skillInvocation(harness, { plugin, skill }), which returns what a user types to invoke a plugin skill:/<plugin>:<skill>in Claude Code,/<skill>in Cursor and GitHub Copilot CLI, and$<skill>in Codex. AddsupportsPluginDependencies(harness), which istrueonly for Claude Code.
Patch Changes
- b0de9bb: The plugin manifests no longer point
skillsat a./skills/folder the package does not ship, and the packagefileslist no longer names acom.github.copilotfolder: Copilot CLI reads the rootplugin.json. - 9d4b8d2: A release now carries the package version into
plugin.jsonand the per-harness plugin manifests, so they no longer stay at0.0.0. - 120b0b3: The published types no longer reference
NodeJS.Platform, so a TypeScript project without@types/nodein itstypescan import the package. Theplatformoption now takes the exportedPlatformtype, a union of the valuesprocess.platformreports.