認証や権限、APIプロキシの失敗をVictoriaLogsの実行ログから調べ、状態コードやシークレット解決エラーなど、原因の手掛かりを整理するスキルです。
- 401・403・503の原因を調べたいとき
- 連携機能の認証失敗を追跡したいとき
- シークレットの解決状況を確認したいとき
CentaurのハーネスサーバーにCLIバックエンドを追加・修正し、各エージェントの出力変換やストリーミング、割り込み、再開などを調査します。
Add, modify, or debug Centaur harness-server backends in crates/harness-server. Use when adding a new harness CLI, changing how Codex, Claude Code, Amp, Pi, Nanocodex, or Hermes output is normalized, or investigating harness streaming, interrupt, resume, model, or reasoning-effort behavior.
実行スコア 未検証
インストール方法を見るcrates/harness-server のハーネスバックエンドを追加・変更・デバッグするための手順と設計上の決まりを示します。各CLIの実際の入力・出力を観察し、Rustの HarnessServer 実装でイベントを型付きデータとして解析し、共通のイベント形式に整えます。Codex、Claude Code、Amp、Pi、Nanocodex、Hermesの出力変換に加え、ストリーミング、割り込み、セッション再開、モデル切り替え、推論レベルの扱いを調べる作業が対象です。新しいハーネスでは、サンドボックスへの導入やAPI、Ingress、Consoleの選択肢など関連箇所も更新します。
新しいハーネスCLIを接続したいときや、既存バックエンドの応答が欠ける、ターン終了がずれる、会話が再開されないといった問題を追う開発者に向いています。テスト用の記録データやフェイクCLIを用いて、プロトコル変換とターンの継続性を確認できます。
RustとCargoを使う開発が前提です。実ハーネスを使う無視対象テストはネットワーク通信を行います。認証情報をログや出力に含めず、実キーをハーネスサーバーへ渡さない制約があります。
この紹介文は、公開されている SKILL.md をもとに AI(OpenAI Codex)が作成しました。正確な仕様は下の原文を確認してください。
インストールする前に、エージェントに与えられる指示の中身を確認できます。
crates/harness-server is the only layer that translates harness output. It is
built into the sandbox image and is the sandbox's PID 1: api-rs launches
harness-server <subcommand> (harness_server_subcommand in
crates/centaur-session-runtime/src/lib.rs). Don't add harness
output parsing in Python, TypeScript, api-rs, or the ingresses.
--mode blocks) stdin carries Centaur blocks NDJSON:
user (text or content blocks, with optional model, provider,
reasoning, and trace context), attachment.chunk, and interrupt. See
parse_blocks_line_with_state in src/server.rs. --mode jsonrpc accepts
Codex App Server requests instead, including turn/steer. It is used for
protocol testing.thread/started, item/*, turn/completed, error), typed in
src/protocol.rs. crates/harness-server-conformance (its own workspace,
so the Codex crates stay out of other lockfiles) round-trips them through
the upstream codex-app-server-protocol types at a pinned revision. Harness
stderr may be logged, but nothing else may reach stdout.Backends:
codex.rs: runs codex app-server and passes its native protocol through.claude.rs, amp.rs, pi.rs: implement HarnessServer (src/traits.rs)
on the shared runner in server.rs. Each one builds the process command and
stdin lines, parses stdout lines into typed events, and normalizes them into
NormalizedEvent. CodexTurnNormalizer (turn.rs) turns those into App
Server items.nanocodex.rs, hermes.rs: their own blocks servers (an in-process library
and a long-lived JSON-RPC gateway). They also feed CodexTurnNormalizer.command_for_turn (or the vendor docs for a new harness). Feed it
hand-written stdin, and save every stdin, stdout, and stderr line to a
temp directory. Establish the real contract: startup args, input shape,
event types, terminal event, session id and resume, tool-call and tool-result
shape, interrupt, model switching, and reasoning controls.HarnessServer in one module, src/<harness>.rs. Use typed
serde event enums. Use serde_json::Value only at the parser boundary.
Override the trait hooks only when the harness needs them:
terminal_assistant_stop_settle, turn_hold, restart_on_model_change,
validate_model, reasoning_effort, and stdin_for_reasoning_effort.src/main.rs, the HarnessKind
variant, and dispatch in src/server.rs. The binary path should be
overridable through an env var (CLAUDE_BIN, AMP_BIN, CENTAUR_PI_BIN)
so tests can substitute a fake. Namespace new settings as CENTAUR_<HARNESS>_*.src/pi.rs and commit
8814c7f8 are the reference:
HarnessType (centaur-session-core), the subcommand mapping, and
auth mode / proxy wiring (centaur-api-server/src/args.rs).services/sandbox/Dockerfile and
entrypoint.sh.services/slackbotv2/src/overrides.ts
and response-context.ts) and in the Console harness list.docs/pages/extend/ and update
docs/pages/reference/configuration.mdx.--resume, threads continue, --session-id). Never
silently start a fresh conversation when the caller expects continuity.userMessage item started and completed events and ends
with exactly one turn/completed that includes all of the turn's items.result, Pi's agent_settled, or Amp's terminal assistant stop, since Amp may
not emit result while stdin is open. Use terminal_assistant_stop_settle
rather than ad hoc timers.turn/interrupt to the app server. The shared runner kills the harness
process and finishes the turn as interrupted, and the next turn respawns the
process and resumes the session.From the repository root:
cargo fmt -p harness-server --check
cargo clippy --locked -p harness-server --all-targets -- -D warnings
cargo test --locked -p harness-server
tests/app_server_stdio.rs, tests/pi_stdio.rs):
run the real harness-server binary against a scripted fake harness that
replays recorded native output from tests/fixtures/<harness>/*.jsonl. Record
fixtures from the real CLI and note the CLI version in the test. Assert on the
emitted App Server stream: item order, phases, turn/completed, interrupt,
resume args, and model switches.#[ignore] tests that spawn installed harnesses
and make network calls. Run them when native behavior is the question:cargo test -p harness-server \
real_harnesses_basic_steer_and_resume -- --ignored --nocapture
Other real tests in tests/app_server_stdio.rs include
real_claude_code_long_streaming_is_anchored_to_native_cli,
real_amp_long_streaming_is_anchored_to_native_cli, and
real_codex_long_streaming_uses_native_app_server_chunks. Read the
--nocapture output, not just the summary. Look for non-JSON stdout, missing
item/completed, duplicate or stale assistant text, wrong thread or turn ids,
and lost session continuity.
For changes that affect the deployed path, also build the sandbox image and run
a real turn through the local stack. e2e/stack.sh test covers the Slack path
with scripted model providers.
Record any native quirk in the backend module or its tests, not only in the PR description.
まだレビューはありません。使ってみた感想をお寄せください。
ログインなしで書き込めます。使ってみた感想、質問、動かなかった環境などを気軽にどうぞ。
まだコメントはありません。最初のコメントを書いてみませんか。
認証や権限、APIプロキシの失敗をVictoriaLogsの実行ログから調べ、状態コードやシークレット解決エラーなど、原因の手掛かりを整理するスキルです。
認証済みのCentaur環境からチーム承認済みツールを探して実行し、利用者の権限や実行結果を踏まえて作業内容をまとめるスキルです。
Centaur Consoleで、Slackのチャンネルやユーザー、ワークフローに付与する権限や共有シークレットを、管理者の依頼に沿って追加・変更・削除します。
VictoriaLogsとVictoriaMetricsでCentaurのログや指標を調べ、停止・未反映などの原因を実行履歴や稼働状況の証拠から切り分けるスキルです。
社内の過去の議論や決定、プロジェクト・会議の状況を、索引化された情報とSlackやLinearなどの原資料を照合して調べるスキルです。
外部サービスのAPIを利用するツール連携を、PythonクライアントやCLI、認証情報の設定、テストを含む所定の構成で新規作成するスキルです。