Encode intention. Decode software.
Bun ベースの AI コーディングエージェント CLI — インタビュー、レビュー済みプラン、ゲート付き実行、誠実な検証。
` | 直前要求の再試行 · 履歴に残らないサイド質問 | | `/usage` · `/context` · `/compact` | トークン使用量、コンテキスト内訳、手動コンパクション | | `/theme` · `/config` · `/help` | テーマ、ランタイム設定、ヘルプ | | `jeo autopilot status` | スコア方向、keep/revert 数、次アクションを示す ratchet ステータスフィールド | ## Spec-first ワークフロー 要件 → プラン → 承認 → 実行 → 検証が `.jeo/state/` で繋がり、各ハンドオフに**ブロック可能な本物のゲート**があります: ```bash jeo deep-interview "作りたいものを説明" jeo ralplan jeo approve <プランパス> jeo team jeo ultragoal ``` ``` ┌──────────────────────┐ │ deep-interview │ Socratic ambiguity gate · seed frozen when concrete └──────────┬───────────┘ │ .jeo/state/.json ▼ ┌──────────────────────┐ │ ralplan │ Draft + repo-grounded critic → [OKAY] persisted └──────────┬───────────┘ │ requires [OKAY] verdict ▼ ┌──────────────────────┐ │ approve │ Schema + roles + [OKAY] — unlocks execution └──────────┬───────────┘ │ ▼ ┌──────────────────────┐ │ team │ Serial executor · run lock · mutation audit └──────────┬───────────┘ │ all tasks done ▼ ┌──────────────────────┐ │ ultragoal │ Honest verification — suite once, no fabrication └──────────────────────┘ ``` - **deep-interview** — 曖昧度スコアリングのソクラテス式ループ。基準が具体的な場合のみシードを凍結(曖昧のみの基準は拒否)、シードは自身のパーサをラウンドトリップで通過する必要があります。新しいアイデアが完了済みインタビューを黙って再利用することはありません。 - **ralplan** — ドラフトパス + **リポジトリを実際に読む critic サブエージェントゲート**: `[OKAY]`/`[ITERATE]`/`[REJECT]` 評決が強制・永続化されます。無効なプラン(スキーマ・未知ロール)は complete になりません。 - **approve** — `team` が実行する契約(スキーマ+ロール)を検証し、永続化された `[OKAY]` 評決まで要求します。 - **team** — 直列プラン実行器: プロセス間ロック、stale プランのリセット、タスク別サブエージェント契約、親側の変更監査(書き込み0件の「完了」はフラグ)、失敗マーカー + 再開時の部分編集警告。 - **ultragoal** — 誠実な検証: スイートはグローバル信号として1回実行され、基準は記録されるのみで個別合格には捏造されません。 ## 検証フック(自己修正) グローバルで一度有効化(`~/.jeo/config.json` に `"hooks": { "enabled": true }`)し、プロジェクトごとに post-edit チェックを追加すると、エージェントは失敗を読み `done` の前に修正します: ```jsonc // .jeo/hooks.json { "enabled": true, "hooks": [ { "event": "post-turn", "match": { "tool": "edit|write" }, "run": "bun x tsc --noEmit" } ] } ``` 非ゼロ終了したフックの出力はモデルが読むツール結果に付加され(バッチ内で重複排除)、フックが赤のまま `done` を呼ぶとフック名付きでプッシュバックされます。 ## メモリフロー `jeo` は `.jeo/memory/` 配下に **ローカルファースト・蒸留されたプロジェクトメモリ** を保持します(リモートバックエンドなし、ネイティブ依存ゼロ)。過去のセッションは [OKF](docs/okf_mem/) コンセプトバンドルへ蒸留され、次のセッションは関連性の高い予算内のスライスだけをシステムプロンプトへ再注入します — 指示ではなく DATA として堅牢化されます。`JEO_NO_MEMORY=1` ですべて無効化。 **移行(`jeo memory-migrate`、ワンショット・冪等).** レガシーの単一ドキュメント `MEMORY.md` をロスレスでバンドルへ変換します: `## 見出し → タイプ`、各箇条書き → タイプ別コンセプト、インデント行 → 本文; `index.md`/`log.md` を再構築し、元ファイルを `MEMORY.md.bak` にリネームします。バンドルにコンセプトができた後の再実行は no-op です。**ロールバック:** `JEO_MEMORY_LEGACY=1` はバンドルを無視し、同じ注入堅牢化を通して `MEMORY.md`/`.bak` を読みます(`JEO_NO_MEMORY=1` がすべてに優先)。 ## 既存のエージェントやボットとの連携 (Works beside your existing agent or bot) | ツールまたはボット | 推奨される jeo コマンド | 境界 | | ----------- | ----------------------- | -------- | | Codex CLI | `jeo --tmux --worktree ` または `jeo` | `--worktree` は jeo が管理する兄弟 git worktree を指定します(basename → 新しいブランチ)。既存のパスは先に `cd` してください。 | | Claude Code | `jeo --tmux` または `jeo --tmux --worktree ` | jeo は Claude Code の拡張機能にはなりません。 | | OpenCode | `jeo` または `jeo --tmux` | 外部ランナーのワークフローのみ。 | | Claw Code | `jeo --tmux --worktree ` | jeo は Claw Code にインストールされたり、置き換えたりしません。 | | 外部コントローラー / ボット | `jeo mcp serve` (MCP stdio サーバー) | 外部コントローラーはスクロールバックのスクレイピングではなく、MCP ツール契約を介して jeo を駆動します。 | `--worktree ` は隔離された兄弟 git worktree で jeo を実行するため(パスがあれば再利用、なければ basename ブランチで作成)、リスクのある作業やレビュー対象の作業がメインのチェックアウトに触れることはありません。`jeo mcp serve` は stdio を介して MCP 対応のあらゆるコントローラーに jeo のツールを公開します(`jeo mcp tools` で一覧表示)。`-q`/`--quiet` (または `JEO_QUIET=1`) を追加すると、起動バナー・ウェルカムアニメーション・リリースノート・再開ヒントが抑制され、jeo を別のエージェントと並べて実行したりボットから駆動したりできます。`-p`/`--print` は quiet を含みます。 ## ローカルモデル ```bash ollama pull qwen2.5:0.5b export JEO_DEFAULT_MODEL=ollama/qwen2.5:0.5b jeo doctor && jeo ``` ## 設定 - グローバル設定: `~/.jeo/config.json`(モデル選択は MRU 永続) - プロジェクト状態/セッション: ` /.jeo/` ```bash ANTHROPIC_API_KEY=... OPENAI_API_KEY=... GEMINI_API_KEY=... JEO_DEFAULT_MODEL=... # 例: ollama/qwen2.5:0.5b OLLAMA_HOST=http://localhost:11434 JEO_TUI_THEME=cosmic # cosmic/matrix/solar/red-claw/blue-crab/mono/aurora/synthwave/sakura JEO_TUI_ALT_SCREEN=1 # レガシー alt-screen ターン(デフォルト: インラインスクロールバック) JEO_STEP_BASE=24 # 動的ステップ予算のローリングベース JEO_STEP_HARD_CAP=600 # 絶対終了保証 JEO_STREAM_MAX_MS=300000 # オプトインの全体ストリーム期限(デフォルト off; スロードリップ遮断) JEO_TOOL_OUTPUT_MAX=4000 # モデル可視のツール出力上限(全文はアーティファクトへ) ``` リトライ動作は `~/.jeo/config.json` の `retry` で調整します(`requestMaxRetries`、`streamMaxRetries`、`rateLimitRetries`、`failFastStatuses` など)。ステップ予算はデフォルトで動的 — 新規進捗が見える間は延長され、停滞時は要約に収束します。`--max-steps N` で有限フローに戻ります。 ## 公開 (Publishing) CI は `.github/workflows/npm-publish.yml` で公開します — GitHub リリース公開時に自動、または `workflow_dispatch` の手動実行(ドライラン可)。ワークフローは型チェック・テスト・トークン検証(`npm whoami`)の後、`npm publish --provenance` を実行します。 必要な npm トークン権限(リポジトリシークレット `NPM_TOKEN`): - `jeo-code` パッケージへの Read/Write 権限を持つ **Granular Access Token**、またはクラシック **Automation** トークン - 「公開時の **bypass 2FA**」許可が必須 — Automation トークンは常にバイパス、granular トークンはオプションの有効化が必要 ## 謝辞 (Acknowledgements) [gajae-code](https://github.com/Yeachan-Heo/gajae-code) に多大な感謝を。 ## 変更履歴 (Changelog) - **[0.7.21]** (2026-06-26) — Global llm-wiki vault integration, Gemini/Antigravity thinking indicators, generous file-reading windows, and autopilot flag validation. Adds a shared global wiki root configuration with a /wiki slash command, fires reasoning start signals up front for Gemini/Antigravity models, adjusts the large-file reading discipline to use generous windows, and validates autopilot goal and integer flags. - **[0.7.20]** (2026-06-26) — OKF concept-memory retrieval gains a hybrid reranker ported from memsearch. Injection priority no longer rides one raw keyword score — it fuses two complementary ranked channels by Reciprocal Rank Fusion (RRF): IDF-weighted lexical relevance (the sparse/BM25 channel, so rare discriminating terms steer recall) and concept-graph proximity (the local dense/semantic-neighbour channel, so a hub linked from multiple query hits surfaces even with no keyword of its own). All embedding-free and deterministic, layered atop the existing failure-first tier and pinned-invariant reserved budget. - **[0.7.19]** (2026-06-26) — The live model picker gains gajae-code's `/model` provider tabs, and skill invocation is consolidated onto a single `$` entrypoint. The picker now shows an `ALL` tab plus one tab per provider that `tab`/`shift+tab` cycles, and skills (including their declared aliases) are invoked only via `$` — the slash palette stays builtins-only. - **[0.7.18]** (2026-06-26) — Slash-command discovery and the `/model` flow reach gajae-code parity. The slash palette/autocomplete now fuzzy-matches command names (with a description fallback for intent-style queries), resolved skills can contribute their own `/aliases` as real dispatchable commands, and `/model` runs gjc's two-menu target → reasoning flow so a picked model can be assigned to the default or any subagent role with its own thinking budget. - **[0.7.17]** (2026-06-25) — Developer workflow parity (gjc `dev:link`/`dev:doctor`, adapted for jeo's zero-native-dep Bun runtime): the global `jeo` command can be linked to run this checkout's source hot to every edit, with a drift doctor that flags when `jeo` resolves to a compiled binary or an installed copy instead. README gains "Skill migration and bundled skill inspection" + "Development" sections. Also ships OKF concept-memory search/scoring with budget-aware injection and a round of workflow-prompt hardening (anti-punt, todo-first planning, verdict discipline) that keeps every loop escape hatch intact. See [CHANGELOG.md](CHANGELOG.md) for the full history.