关于 agent-native
agent-native 是用于启动和观察指定 Agent 会话的技能,可按角色协调任务包执行并报告运行时事实;验证和生命周期决策则由其他方负责。
主要功能
- 01启动前校验批次
- 02启动选定运行时角色
- 03观察会话活动与状态
- 04跟踪任务包结果与缺口
- 05隔离写入范围
- 06报告运行时证据
适用场景
- 01向选定 Agent 分派限定范围的任务
- 02观察并发工作会话
- 03返回任务包级执行证据
安装
复制下面的命令,在终端中运行。
npx skills add https:/ / github.com/ boshu2/ agentops --skill agent-native安装后在 Claude Code 中输入/agent-native确认已加载。
包含的文件
除 SKILL.md 外,安装时一起下载的参考资料和脚本。
agents/bulk-reader.tomlcode-writer.tomlreferences/context-budget-delegation.mdjudgment-receipts.mdlaunch-and-isolation.mdmodel-dispatch.mdRAW_SOURCE_READS.mdsession-associations.mdscripts/fake_model_runner.py详细介绍
Agent Native
以明确角色启动并观察由调用方选定的 Agent 会话,并按数据包返回运行时事实。执行不会验证输出,运行时也绝不会成为 AgentOps 生命周期的权威来源:适配器不能选择 AgentOps 语义、给出具有约束力的判定,或将工厂完成转化为交付或验证证明。Orchestrate 决定要分派什么以及何时分派;此技能负责启动和观察。
启动前及运行期间
- 先验证整个批次。 每个数据包都需要指定的执行器、数据包身份、所有传递影响、不得执行的操作(例如推送、合并、重写历史记录、写入跟踪系统或外部系统),以及位于独立隔离环境中的规范工作区相对写入范围。只要有一个数据包无效,就不要启动任何数据包:先启动有效的数据包、之后再修复其余数据包,属于部分启动。
- 比较规范化范围。 解析符号链接、规范化路径并进行大小写不敏感的比较,避免别名掩盖冲突。仅靠词法检查无法证明符号链接或运行时隔离。文件互不重叠不代表互不影响:工作者(包括读取者)可能会争用某个由其中一个工作者写入、安装到其中或独占持有的资源,例如绑定端口、写入中的数据库、被修改的软件包安装环境,或已锁定的浏览器配置文件;应为每个工作者提供独立实例,或者仅将这些工作者串行化。共享模型提供方的限额属于背压,应分批启动,而非串行化(共享运行时)。
- 交付不等于参与。 提示词已交付或收到确认,只能证明传输成功;把它当作工作者正在工作的证据,是对提示词发送效果的乐观臆断。应通过可观察状态证明工作者已参与:会话输出、工具活动、文件变更。
- 重启前先留存证据。 在发送提醒、更换工作者或重启之前,先捕获工作者的可观察状态。重启会销毁其停滞原因的证据,而进行救援通常比重新运行成本低。单凭沉默或急躁不足以证明有理由重启;任何替换都必须遵守授权和剩余限额。
- 只分派一次。 将每个数据包的身份与其结果一并保留。执行器错误本身就是一种结果,不是重试触发条件;修复和后续处理属于调用方的权限。运行时拒绝某个启动调用,导致工作者从未启动,这不算启动:只修正格式错误的调用一次;遇到并发或容量限制时,则应视为背压,在运行时原生等待空位,并在限制下分批启动已验证的批次;每个空出的空位优先运行什么,仍由调用方决定(Orchestrate)。选择在本地或其他位置运行数据包,是调用方应披露的决定(启动被拒)。
- 核对每项输入。 当数据包包含许多项目(文件、记录、问题)时,在启动前为每个项目分配稳定 ID,并将返回结果与该列表关联起来。没有结果的项目属于缺失,并非已完成;没有匹配输入的输出则无法解释。按 ID 报告两者。如果结果将用于计数、排序、去重或比较,应在数据包中注明每个返回字段的名称及其允许值;解析散文式输出会导致计数偏差。
- 移除前证明已集成。 在调用方授权移除已完成工作者的工作区、分支或储藏之前,应通过补丁或文件差异,将其内容与当前集成目标进行比较,而不是依赖合并状态或匹配已合并的提交:压缩合并和变基会隐藏祖先关系。首先以可恢复的形式(例如归档引用或捆绑包)保留未提交、独有或尚未集成的内容。报告保留和移除了哪些内容,以及各自的证据。
角色
- **协调者:**传递明确的意图、范围和证据引用,指定集成/最终审查负责人,并报告运行时事实。只有在存在重大不确定性时才检索额外历史;新上下文不一定更小。新目标不会清除历史记录,也不会重置已用尽的限额。
- **实施者:**只能修改其任务包中声明的主题。
- **验证者:**在全新的只读上下文中接收确切的候选内容。它可以向 Validate 提供判断;只有 Validate 会写入
verdict.v2。 - **记录员:**记录运行时证据,不判断是否接受。
Reader 和 Writer 是受限的低成本委派,并非拥有权限的角色。Reader 会针对调用方从未加载的文件,返回带行号引用的要点,每次最多处理 350 行。Writer 根据规格和必需的参考文件,落地一个符合模式的文件,并返回调用方不会回读的回执。每次调用均由调用方选择 Reader 或 Writer,且它们只提供运行时事实;回执不等于验证。对于 Codex,请使用源项目自有的 bulk-reader 和 code-writer 原生角色;其模型和沙盒在 agents/bulk-reader.toml 和 agents/code-writer.toml 中固定。
上下文预算委派介绍安装、原生调用、选择性启用的拒绝钩子,以及角色指令的局限。
启动与观察
- 启动工作器之前,要求调用方明确意图、角色、工作区、起始提交、获授权的源代码/输出范围和证据存放位置。在执行可能失败之前,先在调用方拥有的原生通道中记录派发关联。请求的 ID 并非观测到的 ID;在运行时报告工作器身份之前,该身份始终未知。
- 启动时,在开展实质性工作之前,捕获观测到的运行时、会话和上下文身份,并通过该通道返回。首次编辑之前,工作器须确认其 HEAD 为该起始提交;若不匹配,则启动失败,绝不可通过重置修复。报告启动失败、记录缺失和未知信息;绝不可自行补全。沙盒启动时出现类似身份验证的错误,并不能证明账户已退出登录 (启动与隔离)。 会话关联 负责管理父级与恢复链接、多工作跨度以及冻结的源代码边界。
- 保持并发写入互不重叠且相互隔离;运行时具备自身隔离机制时,使用该机制,且绝不在会话自身的工作树内嵌套另一工作树 (工作区隔离)。 运行时协调并不意味着 AgentOps 中存在声明、租约、队列或完成状态。
- 通过原生等待机制或状态通知进行观察;观察会消耗时间和上下文。状态未变化,不构成再次分析、审查或复盘的理由;而已知的阻塞性故障即使在其他任务运行时也应采取行动。到达终止状态或调用方时间窗口结束时停止。
- 无法向人提问的工作器遇到其任务说明中未明确的选择时,不会凭猜测采取不可逆或超出范围的步骤,而是将该选择放入
gaps返回 (未决选择)。 工作器完成后,要开展新的获授权工作(包括意图已由答复明确的情况),请使用运行时有文档说明的后续操作或恢复操作来启动新一轮。消息操作只会将文本排入运行中工作器的队列;排队的修复请求并不代表已恢复尝试。 - 记录提供商状态、对话记录引用、产物和终止状态。提供商重试、重新连接、空闲状态和故障都只是运行时事实,绝不可作为计划、候选项或裁决状态。若观测到的工具活动显示结果包含被排除的操作,则该结果超出授权范围,不属于候选项,无论其检查结果如何。
批处理契约的参考实现 scripts/swarm/dispatch_once.py 需要 AgentOps 源代码检出,且不随已安装的技能一同打包;安装后的使用方式是通过所选的原生运行时进行派发。由于无法保证其证明满足排除条件,它会拒绝非空的 write_scope.exclude。批处理模式不会选择待处理工作、创建队列或集成任何更改。
适配器与判断
NTM、本地进程、Agent Mail、Gas City 和一次性无头运行器 (codex-exec、claude-exec、 agy-native) 都是可替换的适配器。仅当调用方选择了相应的执行形式时才使用其中一个;单个本地 Agent 无须承担工厂协调成本。
对于判断,默认在作者所用的模型系列中创建全新上下文。跨模型验证、混合评审团以及对决式模型视角,均由调用方显式选择。模型调度负责每个环节的主机授权、隔离、有限输入与输出、超时和清理;工作会话就是控制器,不需要工厂,Agent Mail 绝不是判断途径。角色请求会声明权限,但只有原生运行时/操作系统文件系统和出站流量控制才能强制执行权限。 原生判断回执定义回执引用以及调用方要求模型多样性时的检查;缺少原生身份信息绝不能满足某个环节的要求。若要读取精确的原生源代码片段,请遵循有界原始源代码读取及其中的访问和输出限制。
每个数据包的结果
packet_id: the caller's packet id
executor: selected runtime; requested model; observed model if reported
observed_session: session/context id the runtime reported, else unknown
engagement: observable evidence the worker started, else unobserved
last_activity: time and kind of the last observed tool call, output or file change, else unobserved
terminal_status: exit or terminal state | running | launch failed | not launched
result: candidate <ref> | evidence <ref> | out of authority <action> | error <verbatim>
gaps: recording failures and unknowns