@kyo-so/cli 0.1.0 → 0.3.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -0,0 +1,297 @@
1
+ # Kyo-so
2
+
3
+ [English](README.md) | [日本語](README.ja.md) | [简体中文](README.zh-CN.md)
4
+
5
+ 此翻译可能落后于英文版。请参阅英文 README 获取最新信息。
6
+
7
+ Kyo-so (Kyoso / 協奏) 是面向 AI coding workflows 的 MCP-native、ACP-powered multi-agent review gate。
8
+
9
+ 日语词「協奏」在英语中可译为 concerto:多个独立演奏者各司其职,共同完成一部协调的作品。
10
+
11
+ 它会协调 Codex 和 Claude reviewers,用于:
12
+
13
+ - implementation plan review
14
+ - 带有 CISA Secure by Design gates 的 security review
15
+ - 实现后的 diff review
16
+
17
+ Kyoso 不会应用代码更改。
18
+
19
+ ## Quick Start
20
+
21
+ 无需全局安装。通过 `npx` 或 `bunx` 运行 Kyoso。
22
+
23
+ ### Claude Only / Codex Only
24
+
25
+ Kyoso 可以在只有 Claude 或只有 Codex 可用时运行。请在 `kyoso.config.ts` 中禁用缺失的 backend;示例见 `examples/claude-only.config.ts` 和 `examples/codex-only.config.ts`。
26
+
27
+ 在 single-agent mode 中,剩余 backend 会以 `combined_reviewer` 运行一次,同时覆盖 implementation 和 architecture/security 两类关注点。JSON output 会包含 `reviewMode: "single_agent"` 和 `agentsUsed`;Markdown output 会说明未执行 cross-model verification,并将 disagreements 标记为 N/A。
28
+
29
+ 该 mode 不提供独立的 cross-model validation,仍可能有 self-review bias。它仍保留独立只读 review process、temporary snapshots、adversarial review prompts、secret scanning 和 deterministic gates。
30
+
31
+ ### Claude Code
32
+
33
+ 1. 准备 Claude authentication。
34
+
35
+ ```bash
36
+ claude setup-token
37
+ ```
38
+
39
+ 设置该命令得到的 `CLAUDE_CODE_OAUTH_TOKEN`,或设置 `ANTHROPIC_API_KEY` 以使用 direct API billing。
40
+
41
+ 2. 注册 MCP 并安装 review skill。
42
+
43
+ ```bash
44
+ npx @kyo-so/cli setup claude-code --write
45
+ bunx @kyo-so/cli setup claude-code --write
46
+ ```
47
+
48
+ 3. 验证 setup。
49
+
50
+ ```bash
51
+ npx @kyo-so/cli doctor
52
+ bunx @kyo-so/cli doctor
53
+ ```
54
+
55
+ 4. 从 Claude Code 请求 review。
56
+
57
+ ```text
58
+ Use Kyoso plan_review on this plan before implementation.
59
+ ```
60
+
61
+ ### Codex
62
+
63
+ 1. 准备 Codex authentication。
64
+
65
+ ```bash
66
+ codex login
67
+ ```
68
+
69
+ 2. 注册 MCP 并安装 review skill。
70
+
71
+ ```bash
72
+ npx @kyo-so/cli setup codex --write
73
+ bunx @kyo-so/cli setup codex --write
74
+ ```
75
+
76
+ 3. 验证 setup。
77
+
78
+ ```bash
79
+ npx @kyo-so/cli doctor
80
+ bunx @kyo-so/cli doctor
81
+ ```
82
+
83
+ 4. 从 Codex 请求 review。
84
+
85
+ ```text
86
+ Use Kyoso diff_review on the current diff. I need a second opinion before merging.
87
+ ```
88
+
89
+ 手动 setup 示例保留在 `examples/codex-config.toml` 和 `examples/claude-code-mcp.json`。
90
+
91
+ ## Install / Run
92
+
93
+ ```bash
94
+ npx @kyo-so/cli mcp
95
+ bunx @kyo-so/cli mcp
96
+ ```
97
+
98
+ Naming note: npm package 是 `@kyo-so/cli` (对应产品名 Kyo-so),安装后的 CLI command 是更短的 `kyoso`。
99
+
100
+ 本地开发:
101
+
102
+ ```bash
103
+ safe-chain bun install
104
+ safe-chain bun run typecheck
105
+ safe-chain bun test
106
+ safe-chain bun run build
107
+ ```
108
+
109
+ 运行打包后的 CLI 需要 Node.js 20 或更高版本。
110
+
111
+ 已知分发风险:`@modelcontextprotocol/server` 目前还没有 stable release;Kyoso 当前 pin 了 prerelease API,因此 MCP SDK API 变更可能需要后续 release。
112
+
113
+ ## CLI
114
+
115
+ `npx @kyo-so/cli` 和 `bunx @kyo-so/cli` 是正常执行路径。下面的示例将此前缀简写为 `kyoso`。
116
+
117
+ ```bash
118
+ kyoso plan --goal "Review this OAuth callback plan" --plan plan.md
119
+ kyoso security --goal "Review this auth diff" --diff changes.patch
120
+ kyoso diff --base main --head HEAD
121
+ kyoso doctor
122
+ kyoso init
123
+ kyoso setup codex
124
+ kyoso setup claude-code
125
+ ```
126
+
127
+ ## Usage Examples
128
+
129
+ 使用选定代码 review implementation plan:
130
+
131
+ ```bash
132
+ kyoso plan \
133
+ --goal "Review the OAuth callback implementation plan" \
134
+ --plan plan.md \
135
+ --file src/auth/callback.ts
136
+ ```
137
+
138
+ 按从上到下的顺序阅读结果:`Decision` 是 deterministic gate outcome,`Findings` 是 required changes,`Tests to Add` 是 Kyoso 在 approval 前期望的 regression checks。
139
+
140
+ 对 patch 运行 CISA Secure by Design security review:
141
+
142
+ ```bash
143
+ kyoso security \
144
+ --goal "Review auth changes for tenant isolation and secure defaults" \
145
+ --diff changes.patch \
146
+ --json
147
+ ```
148
+
149
+ 在 JSON output 中,`cisaSecureByDesign` 会显示四个 gate dimensions。customer security outcomes 中的 `fail` 会 block review;warning-level dimensions 通常会产生 `approve_with_changes`。
150
+
151
+ 将 Kyoso 注册为 Codex 或 Claude Code 的 MCP server,然后从 client 调用 `plan_review`:
152
+
153
+ ```toml
154
+ # See examples/codex-config.toml
155
+ [mcp_servers.kyoso]
156
+ command = "npx"
157
+ args = ["-y", "@kyo-so/cli", "mcp", "--network", "model_only"]
158
+ ```
159
+
160
+ client request 示例:
161
+
162
+ ```text
163
+ Use Kyoso plan_review on this plan and the selected auth files. I need a second opinion before implementing.
164
+ ```
165
+
166
+ ## MCP
167
+
168
+ ```bash
169
+ npx @kyo-so/cli mcp --network model_only
170
+ bunx @kyo-so/cli mcp --network model_only
171
+ ```
172
+
173
+ 省略 `--network` 时,Kyoso 使用 `model_only`。这意味着 Kyoso 期望 backend agents 只产生 model-provider traffic。这是 policy-level constraint,不是 OS-level network isolation。
174
+
175
+ Kyoso 只暴露以下 MCP tools:
176
+
177
+ - `plan_review`
178
+ - `security_review`
179
+ - `diff_review`
180
+
181
+ MCP stdout 专用于 protocol messages。Logs 会写到 stderr 或 local audit traces。
182
+
183
+ ## Skill
184
+
185
+ 内置的 `kyoso-review` skill 有意保持范围很窄。只有当你明确请求 Kyoso、multi-agent review、plan review、security review、CISA Secure by Design review 或 diff review 时,才应触发它。
186
+
187
+ `npx @kyo-so/cli setup codex --write` 和 `bunx @kyo-so/cli setup codex --write` 默认将其复制到 `.agents/skills/kyoso-review/`。添加 `--global` 会复制到 `~/.agents/skills/kyoso-review/`。
188
+
189
+ `npx @kyo-so/cli setup claude-code --write` 和 `bunx @kyo-so/cli setup claude-code --write` 默认将其复制到 `.claude/skills/kyoso-review/`。添加 `--global` 会复制到 `~/.claude/skills/kyoso-review/`。
190
+
191
+ ## Safety Model
192
+
193
+ Kyoso MVP 使用 disposable temporary snapshot 和 policy-level write denial。它不是完整的 OS sandbox。除非你理解相关风险,否则不要针对 untrusted repositories 运行 Kyoso。
194
+
195
+ Secret detection 是 best-effort。如果 Kyoso 在 request、selected files 或 diff 中检测到疑似 secret,它会 redact 该值,并默认在 backend agents 运行前 block。
196
+
197
+ Kyoso 不存储 provider credentials。Child agent environment variables 使用 allowlist。
198
+
199
+ Repository content、plans、diffs 和 selected files 在 backend prompts 中被视为 untrusted data。Kyoso 会用 `<untrusted-content>` tags 包裹它们,并告诉 agents 不要遵循其中的 instructions。最终 decisions 来自 schema-constrained findings;agents 不能写 files 或运行 commands,judge 不能改变 deterministic decision。
200
+
201
+ ## Agent Auth
202
+
203
+ 可用时,Codex 使用 local `codex` login。默认 subscription-backed path 不需要 API key。
204
+
205
+ Claude 支持两种 auth paths:
206
+
207
+ - `ANTHROPIC_API_KEY`: direct Anthropic API billing
208
+ - `CLAUDE_CODE_OAUTH_TOKEN`: 来自 `claude setup-token` 的 subscription auth
209
+
210
+ 如果同时设置了两个 Claude credentials,Kyoso 默认只将 `CLAUDE_CODE_OAUTH_TOKEN` forward 给 Claude child agent。若只想 forward `ANTHROPIC_API_KEY`,请设置 `agents.claude.auth.preferApiKey: true`。
211
+
212
+ Default child-agent env allowlist:
213
+
214
+ | Agent | Provider env |
215
+ | ------ | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
216
+ | Codex | `CODEX_API_KEY`, `OPENAI_API_KEY`, `CODEX_HOME`, `CODEX_ACCESS_TOKEN` |
217
+ | Claude | `ANTHROPIC_API_KEY`, `CLAUDE_CODE_OAUTH_TOKEN`, `ANTHROPIC_MODEL`, `ANTHROPIC_BASE_URL`, `CLAUDE_CONFIG_DIR`, `CLAUDE_CODE_USE_BEDROCK`, `CLAUDE_CODE_USE_VERTEX`, `CLAUDE_CODE_USE_FOUNDRY` |
218
+
219
+ Kyoso 还会 forward 启动 subprocesses 所需的最小 runtime env:`PATH`, `HOME`, `TMPDIR`, `TEMP`, `TMP`, `LANG`, `LC_ALL`, `SHELL`, `USER`, `USERNAME`, and `SystemRoot`。
220
+
221
+ ## Agent Models
222
+
223
+ 省略 `agents.<name>.model` 时,会使用各 agent 自身的 default。Codex 使用 local Codex config,例如 `~/.codex/config.toml`;Claude 使用 adapter default。
224
+
225
+ ```ts
226
+ export default defineConfig({
227
+ agents: {
228
+ codex: {
229
+ model: "gpt-5.5",
230
+ },
231
+ claude: {
232
+ model: "claude-sonnet-5",
233
+ },
234
+ },
235
+ });
236
+ ```
237
+
238
+ Kyoso 会将 model pins 映射到 adapter-supported configuration:
239
+
240
+ - Claude: 当 `agents.claude.env` 或 whitelisted parent env 中尚未设置时,设置 `ANTHROPIC_MODEL`。
241
+ - Codex: 当 `CODEX_CONFIG` 尚未设置时,设置 `CODEX_CONFIG={"model":"..."}`。若要将 model pin 与其他 Codex session config 组合,请直接设置 `agents.codex.env.CODEX_CONFIG`。
242
+
243
+ ## Audit
244
+
245
+ Audit traces 写入:
246
+
247
+ ```text
248
+ .kyoso/traces/<yyyy-mm-dd>/<traceId>.jsonl
249
+ ```
250
+
251
+ Raw agent output 和 raw file contents 默认禁用。
252
+
253
+ 不要将 `.kyoso/traces/` 提交到 Git。`kyoso init` 会把 `.kyoso/` 添加到 `.gitignore`,本 repository 也同样如此。如果启用 `audit.includeRawAgentOutput`,traces 可能会保留 sensitive review output;请按照 local retention policy 定期删除旧 traces。
254
+
255
+ ## Config
256
+
257
+ `kyoso.config.ts` 只会在 trust-on-first-use approval 之后 load。Trusted hashes 保存在 `~/.kyoso/trusted-configs.json`。
258
+
259
+ TypeScript config files 可以执行任意 code。在 TTY 中,Kyoso 会在执行 untrusted config 前提示确认。在 MCP 或 CI 等 non-interactive mode 中,untrusted config 会被 skip,并使用 defaults。传入 `--trust-config` 可明确 trust 当前 config hash;传入 `--ignore-config` 可始终使用 defaults。
260
+
261
+ Default agent timeouts 是 Codex 120 秒、Claude 240 秒。MCP clients 应允许 tool calls 至少运行 360 秒。
262
+
263
+ Judge LLMs 是 optional。设置 `OPENAI_API_KEY` 或 `CODEX_API_KEY` 可使用 OpenAI judge,设置 `ANTHROPIC_API_KEY` 可使用 Anthropic judge。Optional overrides:
264
+
265
+ - `OPENAI_BASE_URL`: OpenAI-compatible API base URL
266
+ - `KYOSO_OPENAI_JUDGE_MODEL`: OpenAI judge model, default `gpt-5.4-mini`
267
+ - `KYOSO_ANTHROPIC_JUDGE_MODEL`: Anthropic judge model, default `claude-haiku-4-5`
268
+
269
+ Judge defaults 有意使用 lightweight models。若需要更强的 judge,请将 `KYOSO_ANTHROPIC_JUDGE_MODEL` 设置为 Sonnet-class model,例如 `claude-sonnet-5`。
270
+
271
+ Subscription-only setup:
272
+
273
+ - Codex: 使用 local `codex` login
274
+ - Claude: 运行 `claude setup-token`,然后设置 `CLAUDE_CODE_OAUTH_TOKEN`
275
+ - Judge: 不设置 API keys,因此 Kyoso 使用 `deterministic_fallback`
276
+ - 当存在 `OPENAI_API_KEY` 时,如需避免 OpenAI judge calls,请设置 `judgeProvider: "none"`
277
+
278
+ Team admins 还应检查 organization Usage credits。如果启用了 credits,超出 subscription limits 的 billing behavior 由 Kyoso 外部控制。
279
+
280
+ ## Troubleshooting
281
+
282
+ - MCP timeout: 将 client tool timeouts 设置为至少 360 秒。Kyoso defaults 是 Codex 120 秒、Claude 240 秒。
283
+ - Fresh npm release: safe-chain 等 minimum-package-age protection 可能会在 publish 后短时间内 block `npx @kyo-so/cli` resolution。
284
+ - Non-interactive config: 除非传入 `--trust-config`,否则 untrusted `kyoso.config.ts` 会被 skip。
285
+
286
+ ## Development
287
+
288
+ - `KYOSO_TEST_FAKE_AGENTS=1`: test-only fake ACP agents;不要在 production 中设置。
289
+ - `KYOSO_KEEP_TEMP=1`: 为 local debugging 保留 temporary snapshots。
290
+
291
+ ## License
292
+
293
+ Kyoso 使用 GNU Affero General Public License v3.0 or later (`AGPL-3.0-or-later`) 授权。
294
+
295
+ Kyoso 设计为作为 separate CLI 或 MCP server process 使用。将 Kyoso embedding、importing 或 linking 到另一个 program 中,可能会产生不同的 license implications。
296
+
297
+ Copyright (C) 2026 Hokuto TAKEMIYA (hokupod).
@@ -1,2 +1,2 @@
1
- import type { KyosoReviewRequest, ReviewTool } from "../core/types.js";
2
- export declare function buildAgentPrompt(tool: ReviewTool, request: KyosoReviewRequest, agent: "codex" | "claude"): string;
1
+ import type { AgentName, AgentRole, KyosoReviewRequest, ReviewTool } from "../core/types.js";
2
+ export declare function buildAgentPrompt(tool: ReviewTool, request: KyosoReviewRequest, agent: AgentName, role: AgentRole): string;