Runtime-agnostic execution. E-GEO now runs outside Claude Code through a standalone egeo CLI and a pluggable runtime-adapter layer — without duplicating any optimization logic. Both the Claude Code agents and the CLI share one source of truth (geo_eval.py + llm_client.py).
Highlights
🧩 Runtime adapter layer (egeo/runtimes.py)
RuntimeAdapterinterface + registry (get_runtime,list_runtimes,runtime_status).pythonadapter (aliasescli,local) — in-process, honorsGEO_EVAL_MOCK.claude-codeadapter (aliasclaude) — host-executed descriptor, auto-detected via.claude/.
⌨️ Standalone egeo CLI (python -m egeo)
| Command | Behavior |
|---|---|
optimize <file> |
Full pipeline (analyze → rank → rewrite → schema); writes report.md, optimized/*.md, schema/*.json, analysis.json |
evaluate |
Delegates to geo_eval.py — byte-identical output |
optimize-prompts |
Meta-optimizes the rewriter prompt (non-destructive by default) |
runtimes |
Lists runtime adapters and live status |
Install with pip install -e .. The whole CLI honors GEO_EVAL_MOCK=1 for deterministic, offline runs (no API key).
🤖 Release automation (.github/workflows/release.yml)
- Publishes a GitHub Release on
v*tags (and manualworkflow_dispatch), extracting the matchingCHANGELOG.mdsection. - Uses the GitHub-injected token (
${{ github.token }}) — never a PAT.
✅ CI
- New
egeoCLI smoke test underGEO_EVAL_MOCK=1(runtimes+evaluate+optimize+ JSON-LD validation). Existing quality gates unchanged.
📚 Docs & spec
- README: new "Standalone CLI (
egeo)" and "Supported Runtimes" sections. - OpenSpec change
add-runtime-adapters(proposal, tasks, design, capability spec).
Full changelog: https://github.com/mverab/eGEOagents/blob/main/CHANGELOG.md · PR: #10