The Agent Supervisor Layer for Autonomous Development.
Geminy Cricket is the reliability control plane for coding agents. It provides the Agent Supervisor Layer that sits between an autonomous agent and your production codebase.
Instead of just "running code," Geminy Cricket enforces a supervised loop:
- Durable State: Persists plans, steps, and reasoning across sessions (DuckDB).
- Verification: Normalizes test failures into compact "chirps" for efficient agent self-correction.
- Resumability: Supports checkpoints, pause/resume, and context compaction for long-running tasks.
- Auditability: Keeps a durable journal of every decision and outcome.
For agent behavior policy and prompt guidance, see AGENTS.md.
As agents move from "chat" to "autonomy," generation speed matters less than supervision quality.
Geminy Cricket fills the gap between the Agent (which wants to go fast) and the Repository (which needs to stay safe). It acts as the "Flight Recorder" and "Mission Control" for the agent's inner loop, ensuring that even if the agent crashes or hallucinates, the state of the work is preserved and recoverable.
Geminy Cricket uses Repository-Scoped Isolation. Each project you supervise has its own private state.
- Initialize the project folder:
mkdir .geminy-cricket
- Update your
.gitignore: Add the supervisor state folder to your.gitignoreto avoid committing binary DB files:echo ".geminy-cricket/" >> .gitignore
Default runtime model is single-owner: one supervisor server process owns DuckDB, and CLI/MCP clients call that process over HTTP.
- Requirements:
- Ruby 3.3+
- Bundler
- Install gems:
bundle install- Optional executable bits:
chmod +x bin/geminy-cricket bin/geminy-cricket-mcp bin/geminy-cricket-serverEnvironment variables:
GC_DB_PATH(defaultdb/geminy_cricket.duckdb)GC_DASHBOARD_PORT(default48203)GC_SNIPPET_RADIUS(default3)GC_EMBEDDING_MODEL(defaultsentence-transformers/all-MiniLM-L6-v2)GC_EMBEDDING_DIMS(default384)GC_CONTEXT_TOKEN_BUDGET(default6000)GC_COMPACTION_LOOP_INTERVAL(default20)GC_COMPACTION_MAX_HISTORY_ENTRIES(default12)GC_SERVER_URL(defaulthttp://127.0.0.1:$GC_DASHBOARD_PORT)GC_SUPERVISOR_MODE(serverdefault,direct, orauto)GC_SERVER_TIMEOUT_SECONDS(default15)GC_BIND_HOST(default127.0.0.1)GC_TOOL_API_KEY(optional; required for/toolauth when set)GC_STRICT_BIND_AUTH(defaultfalse; iftrue, non-local bind withoutGC_TOOL_API_KEYaborts boot)GC_DB_MUTEX_DISABLED(defaultfalse; keeps DB connection mutex enabled)PUMA_MIN_THREADS(default0)PUMA_MAX_THREADS(default1)
Start dashboard:
bundle exec ruby bin/geminy-cricket-serverRun tools from another terminal after this starts.
Health endpoint:
curl http://127.0.0.1:48203/healthSecure local tool endpoint example:
GC_TOOL_API_KEY=dev-secret bundle exec ruby bin/geminy-cricket-server
GC_TOOL_API_KEY=dev-secret bundle exec ruby -e "require_relative 'lib/geminy_cricket'; s=GeminyCricket::SupervisorFactory.build; p s.dispatch('gc_health', {})"Core:
gc_start(goal)gc_plan_step(desc, session_id?)gc_verify(scope, framework:auto|rspec|minitest, session_id?, run_id?)gc_recall(query, mode:hybrid|lexical|semantic, limit?, session_id?)gc_record_logic(summary, session_id?, run_id?)gc_reindex_embeddings(session_id?, entity_type?)
Run orchestration:
gc_begin_run(agent_id, session_id?)gc_checkpoint(run_id, summary, metadata?)gc_heartbeat(run_id, status, metadata?)gc_pause(run_id, reason)gc_resume(run_id)gc_end_run(run_id, outcome, summary)gc_next_step(session_id?, run_id?)gc_context_packet(run_id, budget_tokens?)gc_compact(run_id, reason, budget_tokens?)gc_health()
Note: gc_verify scope is restricted to spec/ and test/ roots for safety.
Roles:
- User: sets goal, reviews progress, intervenes on blockers.
- Agent (Codex/Gemini): edits code, runs tests, calls
gc_*tools. - Supervisor (Geminy Cricket): stores durable state, verifies, recalls, compacts context.
Day-to-day loop:
- Start session:
gc_start. - Create plan steps:
gc_plan_step. - Start run:
gc_begin_run. - Ask next action:
gc_next_step. - Implement code in repo.
- Verify with
gc_verify(narrow scope first). - Heartbeat/checkpoint with
gc_heartbeatandgc_checkpoint. - On context growth, call
gc_compact. - On interruption,
gc_resume+gc_context_packetin new agent thread. - Finish with
gc_end_run.
Restart recovery example:
- Agent process dies.
- Start new process and call
gc_resume(run_id). - Use returned context packet (goal, active step, latest chirp, blockers, next action).
- Continue loop without old chat history.
Geminy Cricket exposes tools via MCP through bin/geminy-cricket-mcp.
codex mcp add geminy-cricket -- bundle exec ruby bin/geminy-cricket-mcp
codex mcp list[mcp_servers.geminy-cricket]
command = "bundle"
args = ["exec", "ruby", "/ABSOLUTE/PATH/geminy-cricket/bin/geminy-cricket-mcp"]
cwd = "/ABSOLUTE/PATH/geminy-cricket"Configure Gemini CLI to launch this MCP server command:
bundle exec ruby /ABSOLUTE/PATH/geminy-cricket/bin/geminy-cricket-mcpUse your Gemini CLI MCP config format to register that command with the project cwd set to this repo.
Build gem:
gem build geminy-cricket.gemspecRelease instructions: RELEASING.md.
Install dev/test dependencies, then run the full beta checks:
bundle install
make checkUseful individual commands:
make syntaxmake lintmake testmake securitymake security-strictmake smokemake release-checkmake release-check-install
Notes:
make securityruns Brakeman andbundle-audit.make security-strictenforces advisory DB update/check and fails on any bundle-audit issue.- If you are offline,
bundle-auditupdate may fail; non-strictmake securitywarns and continues. make smokesupportsSMOKE_MODE=auto|server|direct(defaultauto), whereautofalls back to direct mode when localhost bind is unavailable.make release-checkis offline-safe (build + package + executable sanity checks);make release-check-installadditionally verifies local gem install paths.
If you see lock errors, more than one process is opening the same DuckDB file for writes.
- Recommended: keep
GC_SUPERVISOR_MODE=server(default) and run onebundle exec ruby bin/geminy-cricket-serverprocess. - Use
GC_SUPERVISOR_MODE=directonly for one-off local commands when the server is not running.
If you see DuckDB::Error - Failed to execute prepared statement during dashboard polling:
- Ensure you are on the latest code (store-level DB mutex enabled by default).
- Keep server threading conservative (
PUMA_MAX_THREADS=1default). - Confirm
/healthreports"db_mutex_enabled":true.