@cyberuni/agent-harness

中文文档
0.7.1发布于 2026/10/18MITES Module零依赖构建来源已验证近 30 天下载 2906

与 AI 代理 协作的工具包 : 检测哪个正在运行,查询其管理下的政策位置,插件存储,启用插件,以及技能命名,并解决分层的参考文件.

此软件包已被标记为弃用

Renamed to cyber-agentkit

中文使用文档
文档目录13 节
  1. 探测绳子
  2. 管理政策
  3. 插件存储
  4. 已启用的插件
  5. 已安装插件
  6. 技能命名和插件依赖性
  7. 技能目录
  8. 无头运行
  9. 参考文件
  10. 引用命令
  11. 这个 reference 技能
  12. 为什么会这样
  13. 许可证

@ cyberuni/ 代理服务器

license: MIT

与人工智能特工合作的工具包 检测哪个正在运行 克劳德代码,克塞尔, Codex, GitHub 副驾驶 CLI, OpenCode, Kilo 代码,双子座 CLI, Quen 代码, VS 代码中的 GitHub 副驾驶, Cline, Crush, OpenHands, 或 Auggie CLI —— 询问它持有什么(它管理的政策位置, 插件存储、 启用插件、 如何命名插件技能以及如何运行无头设备),以及 解决代理按要求读取的参考文件.

它依赖于没有其它的代理工具,所以其中任何一种工具都可以建立在它上.

状态:释放前. 每一个事实,这个库 编码基于 .research/harness-detection。 。 。 .

探测绳子

import { detectHarness } from '@cyberuni/agent-harness'

const result = detectHarness()
// {
//   harness: 'claude-code',
//   candidates: ['claude-code'],
//   evidence: [
//     { harness: 'claude-code', signal: 'CLAUDECODE', research: 'E-CC-D1', description: '…' },
//     { harness: 'claude-code', signal: 'CLAUDE_CODE_CHILD_SESSION', research: 'E-CC-D3', description: '…' },
//   ],
// }

检测会读取环境变量,每个控制器都设定在其产生的过程上:

节奏从
克劳德代码CLAUDECODE=1 与 CLAUDE_CODE_CHILD_SESSION=1 或者说 CLAUDE_CODE_SESSION_ID
光标CURSOR_AGENT=1,或 CURSOR_VERSION 与 CURSOR_PROJECT_DIR 钩子
代码CODEX_THREAD_ID
GitHub 副驾驶 CLICOPILOT_CLI=1, (中文(简体) ), COPILOT_AGENT_SESSION_ID,或 COPILOT_PLUGIN_ROOT 钩子
打开代码OPENCODE=1 与 OPENCODE_PID
Kilo 代码KILO=1 与 KILO_PID
双子座CLIGEMINI_CLI=1
Quen 代码QWEN_CODE=1
VS 代码中的 GitHub 副驾驶COPILOT_AGENT=1
线CLINE_ACTIVE=true,仅由 VS 代码扩展设置
碾碎CRUSH=1
打开手AI_AGENT=openhands,或 OPENHANDS_EVENT_TYPE 与 OPENHANDS_PROJECT_DIR 钩子
奥吉CLIAUGMENT_HOOK_EVENT 与 AUGMENT_PROJECT_DIR只有钩子

报告 unknown 而不是猜测 :

  • 当没有带匹配,包括 CLAUDECODE=1 a. 本身,IDE扩展也设置;
  • 当一个以上的绳子匹配, 就像一个绳子运行在另一个的外壳。 比赛 列于 candidates· ;
  • 页:1 AGENT 财务报告和审定财务报表 AI_AGENT,几个供应商设定的(只有确切价值) AI_AGENT=openhands (计数)和 OPENCODE=1 单是Kilo代码,即OpenCode分叉,也可以设置;
  • 在吊带没有设置任何自身背景的背景:Codex、双子座CLI和Quen码钩,Quen 代码, Crush, OpenHands, 和 Auggie MCP 服务器, Auggie shell 命令, OpenHands CLI 1.1.6. 0 shell 命令( 其 SDK 先前日期) AI_AGENT=openhands)和线CLI;
  • 没有经过证实的信号的绳索,如:鹅、抗重力、罗沃德夫、基罗、安普、工厂 机器人 德文桌面 和曲速 研究记录了为什么每一个.

过 { env } 检查除 process.env。 。 。 .

管理政策

import { managedPolicyLocations } from '@cyberuni/agent-harness'

managedPolicyLocations('claude-code', { platform: 'linux' })
// [
//   { kind: 'server', location: 'claude.ai admin console or a self-hosted Claude apps gateway', … },
//   { kind: 'file', location: '/etc/claude-code/managed-settings.json', … },
//   { kind: 'directory', location: '/etc/claude-code/managed-settings.d', … },
//   { kind: 'file', location: '/etc/claude-code/managed-mcp.json', … },
// ]

kind 实值 file 或者说 directory 因为一个召唤者能从磁盘上读取什么, macos-managed-preferences 或者说 windows-registry 用于交付MDM,以及 server 供应商持有的保单 组织。 A 类 server 条目意味着本地文件不是整个政策.

插件存储

import { pluginStorage } from '@cyberuni/agent-harness'

pluginStorage('codex')
// {
//   harness: 'codex',
//   configDir: '/home/me/.codex',
//   locations: [
//     { kind: 'plugin-cache', path: '/home/me/.codex/plugins/cache', … },
//     { kind: 'enabled-record', path: '/home/me/.codex/config.toml', … },
//   ],
// }

路径是计算而不是检查的,所以在安装第一个插件之前,一个位置可能不存在. 光标没有 enabled-record: 没有启用其插件的文件记录 .

已启用的插件

import { enabledPlugins } from '@cyberuni/agent-harness'

const result = await enabledPlugins('claude-code')
// {
//   harness: 'claude-code',
//   supported: true,
//   plugins: [{ id: 'my-plugin@my-marketplace', enabled: true, scope: 'project', source: '/repo/.claude/settings.json' }],
//   sources: [{ scope: 'managed', path: '/etc/claude-code/managed-settings.json', found: false }, …],
//   unread: ['server-managed settings (claude.ai admin console or a self-hosted Claude apps gateway)', …],
//   research: ['E-CC-P3', …],
// }
节奏文件已读取, 最高优先
克劳德代码管理 managed-settings.json, (中文(简体) ), .claude/settings.local.json, (中文(简体) ), .claude/settings.json, (中文(简体) ), <config dir>/settings.json
代码<config dir>/config.toml
GitHub 副驾驶 CLI管理 managed-settings.json, (中文(简体) ), .github/copilot/settings.local.json, (中文(简体) ), .github/copilot/settings.json, (中文(简体) ), <config dir>/settings.json
Cursor, OpenCode, Kilo 代码, 双子座 CLI, Quen 代码, VS 代码中的副驾驶, Cline, Crush, OpenHands, Auggie CLI无: supported 实值 false

仅报告有明确条目的插件。 没有条目的插件会回到默认状态 此软件包不知道 。 何时 unread 不为空, MDM 或服务器管理的政策仍然可以 推翻答案.

已安装插件

import { enabledPlugins, installedPlugins } from '@cyberuni/agent-harness'

const installed = await installedPlugins('claude-code')
// {
//   harness: 'claude-code',
//   supported: true,
//   plugins: [{ id: 'my-plugin@my-marketplace', path: '/home/me/.claude/plugins/cache/my-marketplace/my-plugin/1.0.0', version: '1.0.0', scope: 'user', research: ['E-CC-P2'] }],
//   unresolved: [],
//   sources: [{ path: '/home/me/.claude/plugins/installed_plugins.json', found: true }],
//   unread: [],
//   research: ['E-CC-P2'],
// }

// The folder of each enabled plugin:
const enabled = new Set((await enabledPlugins('claude-code')).plugins.filter((p) => p.enabled).map((p) => p.id))
const folders = installed.plugins.filter((p) => enabled.has(p.id)).map((p) => p.path)
节奏从文件夹
克劳德代码<config dir>/plugins/installed_plugins.jsoninstallPath; 每个范围安装一个插件条目
代码<config dir>/plugins/cache/<marketplace>/<plugin>/local 如果存在, 其他最高版本, 如 Codex 所选
GitHub 副驾驶 CLI<config dir>/config.json installedPluginscache_path; 直接安装的 id 它的空名是无
Cursor, OpenCode, Kilo 代码, 双子座 CLI, Quen 代码, VS 代码中的副驾驶, Cline, Crush, OpenHands, Auggie CLI无: supported 实值 false—— 说

unresolved 列出缓存混合 semver 和非 semver 版本文件夹的 Codex 插件, 其中 文件夹 Codex 选择取决于其类型。 从本地添加的市场中加载 CLI 插件 路径到位,没有安装记录,所以它们出现在 unread 换句话说.

技能命名和插件依赖性

import { skillInvocation, supportsPluginDependencies } from '@cyberuni/agent-harness'

skillInvocation('claude-code', { plugin: 'my-plugin', skill: 'review' })?.text // '/my-plugin:review'
skillInvocation('copilot-cli', { plugin: 'my-plugin', skill: 'review' })?.text // '/review'
skillInvocation('codex', { plugin: 'my-plugin', skill: 'review' })?.text // '$review'
skillInvocation('gemini-cli', { plugin: 'my-plugin', skill: 'review' }) // undefined: the model loads skills itself

supportsPluginDependencies('claude-code') // true; false for the others

技能目录

import { skillsDirectories } from '@cyberuni/agent-harness'

skillsDirectories('claude-code') // { project: ['.claude/skills'], user: ['.claude/skills'], research: ['E-CC-L1'] }
skillsDirectories('codex')?.project.includes('.agents/skills') // true
skillsDirectories('qwen-code') // undefined: not confirmed

项目目录与项目根相对,用户目录与主目录相对. 仅 默认读取的目录被列出;管理员,捆绑,插件技能被忽略.

无头运行

如何运行一个没有用户的提示:命令、模型和权限 标记、输出格式以及其中显示符号用途和成本的地方、记录片位置、, 和记录的退出代码。 库只描述运行; 启动进程最多 你吗.

import { headlessCommand, headlessInvocation } from '@cyberuni/agent-harness'

headlessCommand('claude-code', {
  prompt: 'Fix the failing test',
  model: 'sonnet',
  permission: 'unattended',
  outputFormat: 'stream-json',
})
// { executable: 'claude', args: ['-p', '--model', 'sonnet', '--permission-mode', 'bypassPermissions',
//   '--output-format', 'stream-json', '--verbose', 'Fix the failing test'] }

const codex = headlessInvocation('codex')
// codex.outputFormats[1]: { name: 'jsonl', args: ['--json'],
//   usage: { event: 'turn.completed', tokens: 'usage', accumulate: 'sum' } } (no dollar cost)

headlessInvocation('vscode-copilot').supported // false: no headless mode
headlessInvocation('opencode').supported // 'unknown': a one-shot mode exists, but its flags are not verified

Claude Code, Codex, 副驾驶 CLI, Cursor, 双子座 CLI, 和 Quen Code 都涵盖在内. permission: 'unattended' 让运行中编辑文件和运行命令而不询问,所以只用在一个 弃取取出. 退出代码是一个弱信号: Claude 代码只记录零和非零,以及 以转弯停止的运行或预算上限由 result 留言的 subtype。 。 。 .

参考文件

参考文件是名为Markdown的文档,代理人按要求读取,例如核对表或一组 计算技能。 任何人都可以在不编辑传送它的插件的情况下覆盖一个插件: a 项目在 .agents/references/<name>.md,在 ~/.agents/references/<name>.md。 。 。 .

import { loadReference } from '@cyberuni/agent-harness'

const resolved = await loadReference('agent-readiness-weights', {
    root: process.cwd(),
    // The plugin calling the resolver: its own `references/` is the first plugin layer.
    plugin: { name: 'my-plugin', root: pluginRoot },
})
if (resolved.status === 'found') console.log(resolved.content)

status 实值 found, (中文(简体) ), missing,或 ambiguous (两个插件持有此名称; 请求其中之一) resolved.plugins,例如 my-plugin/agent-readiness-weights) (中文(简体) ). trace 说出每一层所持有的东西.

层被读取最高优先 :

级别文件夹
管理管理员 references/ 文件夹和 a references/ 除了每个检测到的被管理的政策文件
项目.agents/references/ 根和上方的每个文件夹,直到寄存器根
用户~/.agents/references/
插件调用插件 references/,每个插件,带启用,然后每个软件包 package.json 声明

每个文件夹中, <name>.md 先回答,然后说 <name>/README.md, (中文(简体) ), <name>/index.md,以及 <name>/SKILL.md. 遗产 governances/ 文件夹仍在读取, 下方 references/ 旁边 他们.

文档的前题 merge 说它如何与下面的地层结合:

  • first-wins (默认值):它取代了下面的一切.
  • combine:放在下层上方,每层保持整齐.
  • merge-sections:其各节取而代之的是下面标题相同的各节,并配以标题路径, 而它没有重新定义的部分被保留下来。 在标题下, <!-- merge: combine --> 附录 改为该节 <!-- merge: remove --> 删除它.

前题读作YAML. merge, (中文(简体) ), description,以及 tags 是解析器读取的密钥; resolved.metadata 持有每把钥匙,更高层的胜利。 不属于YAML 的前题 地图被忽略 警告.

函数对
loadReference(name, options)将根定出一个名称, 每一级改为
referenceLayers(options)构建命令的图层,以解析多个名称
resolveReference(name, layers)决定一个解析后的名称( N)parseReferenceName)对分层
listReferences(layers), (中文(简体) ), referenceNames(layers)层所持的每个名称, 以及每个副本的状态
listReferences(layers, { pattern })按确切名称模式列出的每一个引用,都有层次、插件和模糊状态
searchReferences(query, layers)按名称、描述、标题或正文匹配查询的名称
whereReference(name, layers, options)工程和用户文件可以写入一个覆盖到
managedReferencesDir(), (中文(简体) ), projectReferencesDir(), (中文(简体) ), projectReferenceLayers()单个文件夹和层
declaredDependencies(), (中文(简体) ), packageDir()一份清单申报了包件,每个包装在哪里

引用命令

货包船a reference 命令为 show, (中文(简体) ), list, (中文(简体) ), search, (中文(简体) ), where, (中文(简体) ), create,以及 delete 子命令 :

npx -y @cyberuni/agent-harness reference show <name>... --root <repository root>
npx -y @cyberuni/agent-harness reference list
npx -y @cyberuni/agent-harness reference list 'project-tracker.capabilities.*'
npx -y @cyberuni/agent-harness reference create <name> --scope project
npx -y @cyberuni/agent-harness reference delete <name> --scope project --dry-run

delete 只删除复制到 .agents/references/ (单位:千美元)--scope project)或(或) ~/.agents/references/ (单位:千美元)--scope user,以及复制后答复姓名的报告: 插件的复制件, 一旦一个工程的覆盖器消失 。 它拒绝一个插件已发送或管理的副本.

输出为 东 默认情况下, 代理分析; 通过 --format json 或者说 --format text (单位:千美元)show, (中文(简体) ), create,以及 delete 默认为 text) (中文(简体) ). 格式 跟着 clibuilder 12,其他任何价值均为a 使用错误(退出代码2). 建材制造器制造的CLI 12 可以在自己的插件名称下托管同一命令 ./commands 子路径. --format 是主机的全球选项,所以主机 cli({ format }) 设置每个子命令的默认值; 页:1 text 默认 show, (中文(简体) ), create,以及 delete 属于 agent-harness CLI: 爱丽丝

import { createReferenceCommand } from '@cyberuni/agent-harness/commands'

app.command(createReferenceCommand({ plugin: { name: 'my-plugin', root: pluginRoot } }))

这个 reference 技能

软件包也是一个代理插件, cyber-agent-harness,该船a reference 技术。 类型 /reference (单位:千美元)/cyber-agent-harness:reference 在 Claude 代码中),以加载、创建、更新、删除、查找或 检查一个参考物, 或者用电线来装入一个。 技能只写或删除文件 你同意吗? 它从捆绑中运行命令 scripts/reference.mjs,则不需要 node_modules。 。 。 .

/plugin marketplace add cyberuni/cyberplace
/plugin install cyber-agent-harness@cyberplace

需要一个参考名称的技巧 单行,作为技巧 README.md 显示 :

Load `skill-design` with the `reference` skill in the `cyber-agent-harness` plugin.

为什么会这样

universal-plugin, (中文(简体) ), buddy-agent-harness, (中文(简体) ), repobuddy,以及 cyberlegion/cyber-mux 每一个需要知道 他们正在使用的是什么毒剂, 并且每个人都在重新分别进行检测. 这个软件包是存在的,因此它们共享一个执行.

许可证

麻省理工学院

版本与发布记录

@cyberuni/agent-harness 共发布 9 个版本,首次发布于 2026/09/27;过去 12 个月发布了 9 个版本。最新版本附带 npm provenance 构建来源证明,可追溯到公开的 CI 构建记录。

版本发布日期距今
0.7.1latest2026/10/1824 天前
0.7.02026/10/1328 天前
0.6.02026/10/061 个月前
0.5.02026/10/051 个月前
0.4.02026/10/051 个月前
0.3.02026/09/291 个月前

关于 @cyberuni/agent-harness 的常见问题

@cyberuni/agent-harness 是什么?

与 AI 代理 协作的工具包 : 检测哪个正在运行,查询其管理下的政策位置,插件存储,启用插件,以及技能命名,并解决分层的参考文件.注意:该包已被作者标记为弃用——Renamed to cyber-agentkit

如何安装 @cyberuni/agent-harness?

在项目目录运行 npm install @cyberuni/agent-harness,或使用 pnpm add / yarn add / bun add。它还提供命令行工具 agent-harness,可以用 npx agent-harness 直接运行。

@cyberuni/agent-harness 支持 TypeScript 吗?

该包的 package.json 没有声明类型入口。需要类型提示时,可以在 npm 上查找社区维护的 @types/cyberuni__agent-harness 是否存在。

@cyberuni/agent-harness 支持 ESM 还是 CommonJS?

以 ES Module 形式发布,推荐使用 import 引入。在 CommonJS 项目中,Node.js 20.19+ / 22.12+ 可以直接 require() 不含顶层 await 的 ES Module,更早的版本需要改用动态 import()。

@cyberuni/agent-harness 需要什么版本的 Node.js?

package.json 的 engines 字段要求 Node.js >=22。版本不符时 npm 默认只给出警告,开启 engine-strict 后会拒绝安装。

@cyberuni/agent-harness 可以商用吗?

@cyberuni/agent-harness 使用 MIT 许可。宽松许可:允许商业使用、修改和再分发,通常只需在分发时保留原版权与许可声明。以上为概括,不构成法律意见,请以许可原文为准。

@cyberuni/agent-harness 的下载量有多少?

根据 npm 官方下载统计,@cyberuni/agent-harness 在 2026/10/11 – 2026/11/09 这 30 天内被下载 2,906 次,日均约 97 次。下载量会把 CI 构建、镜像同步和作为其他包依赖的安装一并计入,适合横向比较热度,不能直接等同于使用人数。

@cyberuni/agent-harness 还在维护吗?

最新版本 0.7.1 发布于 2026/10/18(24 天前);至今共发布 9 个版本,其中过去 12 个月发布了 9 个;首次发布于 2026/09/27。作者已将其标记为弃用,新项目建议寻找替代方案。