@renxqoo/agent-cli-sdk
为你公司的 API 打造的 skill 工厂

一次声明。
一份 CLI & 一个 agent skill。

描述一次公司 API,你的 agent 就能生成 命令行 agent skill——鉴权、统一输出、类型化错误、渐进式披露全都有。 无需学习框架,无需手写样板。

在 GitHub 查看 工作原理
Node ≥ 20 ESM 9 类类型化错误 0 配置 MIT
zsh — 安装 exit 0
$ npm install @renxqoo/agent-cli-sdk
已安装 1 个包,耗时 2.1s
# 包内置 skills/agent-cli-builder —— 把它装进你的 agent:
# "帮我安装这个 skill: github.com/renxqoo/agent-cli-sdk/tree/main/skills/agent-cli-builder"
$ acme orders list --limit 5 | jq .data
01 / 工作流

工作原理

从「这是我的 API」到「所有 agent 都能调用」,三步完成。

1

安装

直接让 agent 安装内置的 agent-cli-builder skill——告诉它「帮我安装这个 skill:github.com/renxqoo/agent-cli-sdk/tree/main/skills/agent-cli-builder」。它教 agent 生成 CLI,而不只是会读 CLI。

2

描述

把 API 规范交给 agent——OpenAPI、一个 cURL 示例,或一段大白话。它用 defineCommand 声明写出约 20 行的命令代码。

3

生成与同步

skills gen 写出 SKILL.md;skills sync 把它分发到 Claude、Codex 及所有其他 agent 目录。

02 / 唯一事实来源

一次声明,双端复用

同一条命令既是人类 CLI 又是 agent skill——单一来源,永不漂移。

一条命令的全部业务代码
import { defineCliApp, defineCommand } from "@renxqoo/agent-cli-sdk";
import * as z from "zod";

const app = await defineCliApp({
  name: "acme",
  binName: "acme",
  baseUrl: "https://api.acme.com",
  commands: {
    orders: defineCommand({
      name: "orders",
      description: "List orders",
      args: { schema: z.object({ limit: z.coerce.number().default(20) }) },
      async run(ctx, args) {
        const res = await ctx.get("/orders", { limit: args.limit });
        return { data: res.data, meta: { count: res.data.length } };
      },
    }),
  },
});

人类运行 acme orders list | jq。 Agent 读取 skills/acme/SKILL.md,用同样的方式调用。

03 / 为 agent 而生

agent 所需的一切

可靠地调用 API——开箱即用。

01 / output

JSON 统一输出格式

成功是 stdout 上的 {ok, data, meta};其余一切都在 stderr。可 | jq 组合。

02 / errors

9 类类型化错误

校验、鉴权、网络、未找到、策略……各自映射到一个 exit code,agent 可据此分支。

03 / auth

OAuth 2.1

设备码流程、PKCE、client-credentials,带 401 自动续期——一行配置搞定。

04 / disclosure

渐进式披露

SKILL.md 自动生成并同步;agent 按需懒加载,未用到的 API 零 token 开销。

05 / schema

Zod 单一来源

一份 schema 同时驱动校验、类型、帮助与 --input-schema。没有第二套协议。

06 / plugins

插件系统

Vite 式 apply + provides + 生命周期钩子。鉴权和安装器本身也只是插件。