Repository navigation
Everett v1.1.0
First public release. It includes the 1.0.0 work prepared on 2026-09-24, which was never published on its own.
Sessions
- Lists Claude Code, Codex, OMP, Pi, Hermes Agent, and Grok CLI sessions from the stores those harnesses already write. Everett never writes to them. It reads only the first and last 64 KB of transcript files and opens SQLite stores with
mode=ro. - Hermes:
~/.hermes/state.dband~/.hermes/profiles/*/state.db. The profile name is kept. Chat-platform sessions (Telegram, Discord, and so on) are list/route only. Cron, oneshot, and webhook runs are hidden as automated. - Pi:
~/.pi/agent/sessions/<cwd-slug>/*.jsonl, in the same format as OMP. - Grok CLI:
~/.grok/sessions/<url-encoded cwd>/<id>/. Everett readssummary.jsonfor the id, folder, title, andsession_kind, andprompt_history.jsonlfor the typed requests, falling back to<user_query>blocks inchat_history.jsonl. A session is running while~/.grok/active_sessions.jsonnames it with a live pid. Headless runs are hidden as automated. - T3 Code: each thread runs Codex, Claude Code, or Grok underneath, and
~/.t3/userdata/state.sqlitenames the underlying session. Those sessions are marked sourcet3code([t3code]inls) and take the thread title when they have none, so nothing is listed twice. Codex sessions started by T3 are also recognized by theirt3code_desktoporiginator. everett ls [--json] [--all] [--harness H].--harnessfilters before the 40-session cap.
Jev first
everett_send(andeverett send) route by default: omittoand Everett picks the session (jev when a key is configured, else the local matcher) instead of an agent eyeballingeverett_lsand sending straighttoan id.tois now documented as for a named session or a reply only. The MCP server instructions and theeverett_ls/everett_route/everett_sendtool descriptions say so explicitly, andeverett_ls's says it is for overview, not for picking a send target.- The
everett_sendresponse and theeverett sendCLI report the routing decision (routerjev/local, chosen session, confidence): the CLI printsrouted by jev → [claude] ~/src/api — ... (0.87)before delivering. On anASKdecision nothing is sent; the response now carriescandidates(up to 3 close sessions) instead of a singlesuggestedguess.
Routing and delivery
- Local router (default without a Jev key): BM25 over each session's card, title, first and last requests, and project folder, weighted by recency. The Jev router is used when a key is set. Both return
SESSION/NEW/ASKwith a confidence. everett sendwaits for the target to go idle (up to 2 minutes), then resumes it headless and prints the reply.--to <id-prefix|name>skips routing.--spawnstarts a new headless session on a confidentNEWand records it in~/.everett/spawned.jsonl.- Resume and spawn commands:
claude --resume/--session-id,codex exec resume/codex exec,omp -r,pi --session,hermes -p <profile> chat --resume, andgrok --resume <id> -p/grok --session-id <uuid> -p.sendrefuses T3 Code sessions, because T3 keeps its own resume point and a CLI resume would fork the thread. - Safety: a hop guard (
EVERETT_HOPS, max 3, exit 7), refusal to send to the calling session, and spawning only on request.
Live delivery
- Running sessions are reachable.
send --mode auto(the default) puts a request for a session with a live harness process into~/.everett/inbox/<session-id>.jsonlinstead of refusing it or forking it with a headless resume; idle sessions are still resumed headless.--mode resume|inboxforces a path. T3 Code sessions now take inbox delivery instead of being refused. - The session's own hooks inject pending messages (at most 5 per hook, 6,000 characters) marked as coming from Everett with the sender's session and card: Claude Code and Codex at
UserPromptSubmitandPostToolUse(hookSpecificOutput.additionalContext; the Codex contract checked against the 0.155.1 binary's embedded schemas), Grok atPostToolUseonly (it discardsUserPromptSubmitcontext), and OMP through its extension (before_agent_start, plustool_resultsteering). About 40 ms per hook, silent on every error. - Replies:
everett reply <id> "<text>"oreverett_send(reply_to=…)deliver to the sender's inbox.send --wait S/everett_send(wait=S)wait for the reply.everett inboxand theeverett_inboxMCP tool read an inbox directly (for Pi, Hermes, and humans). Reply chains stop at 3 hops. install-hooksadds the new hooks (backup first, idempotent).install-mcp --grokregisters the MCP server in~/.grok/config.toml.everett onboardoffers the new hooks.- Not used: Claude Code's own
<cross-session-message>socket channel, which has no public way to send.
Events
everett event done|blocked|needs-input|info "<msg>" [--project P]andeverett_event. Stored in~/.everett/events.jsonl, with each session's current state (and since when) in~/.everett/state/.everett lsflags blocked and waiting sessions (⚠ blocked 32h: waiting on Max prompt),everett_lsreturnsstatefor each session, andeverett events [--since 24h]lists them.- Stop hooks detect events deterministically from the turn's last assistant message: a closing question or an ask ("need you to", "should I", "please confirm") →
needs-input; "blocked" / "stuck" / "waiting on" / "can't proceed" (not negated, not asked) →blocked; otherwisedone. Repeats of the current state within 10 minutes are dropped. everett subscribe <session|project>/everett_subscriberoute events into the subscriber's inbox.blockedandneeds-inputnotify the human: a macOS notification by default, plusnotify_command(config orEVERETT_NOTIFY_COMMAND) for your own channel, and one escalation afterescalate_minutes(default 30).everett events --checkruns the escalation from cron.
Cards and shared core
- Session cards in
~/.everett/cards/: the SessionStart hook asks the agent to write one, and the Stop hook writes a deterministic fallback.everett install-hooks [--claude] [--codex] [--omp] [--grok] [--apply]backs up the config first and merges idempotently. Grok gets the Stop hook only (~/.grok/hooks/everett.json), because Grok ignoresSessionStartoutput. - Shared core:
everett learn(secret-filtered, capped at 500 characters),everett trunk merge [--llm claude|codex|none](capped at 300 words, with history snapshots), andeverett core. SessionStart hooks for Claude Code, Codex, and OMP inject the global and project core, at most 350 words.
For agents
everett mcp: a stdio MCP server built on the standard library, with the toolseverett_ls,everett_route,everett_send,everett_learn,everett_core,everett_card, andeverett_whoami. Calls are logged to~/.everett/mcp.log.everett install-mcpregisters it for Claude Code, Codex, and OMP.- Caller identity comes from
CLAUDE_CODE_SESSION_ID,CODEX_THREAD_ID,HERMES_SESSION_ID,PI_SESSION_FILE, orGROK_SESSION_ID, andEVERETT_SESSION_IDoverrides them all.
Setup
everett onboard: a friendly first-time-setup TUI (curses, with a plain-prompt fallback when not a TTY) -- welcome, detected harnesses, per-hook toggles with the exact files that will change, MCP registration toggles, and an optional card-backfill step (deterministic AUTO cards, no LLM calls) with a progress bar. Nothing is written before the final confirm.--yes [--span-days N] [--no-backfill] [--no-mcp]runs it non-interactively.~/.everett/config.toml(vault,vault_dir,default_harness,router,merge_llm, Jev key), with environment overrides. No vault path is hardcoded.everett doctorshows the Python version, session stores (including Grok and T3 Code), hooks, MCP registration, card coverage, router, and vault.brew install raitoxlol/tap/everettorpipx install git+https://github.com/raitoxlol/everett,python -m everett, andeverett --version. No runtime dependencies. MIT license.
Verified
Live round trips on throwaway sessions (2026-09-24):
- Claude Code
sendreplied in 10.3 s. Codexsendreplied in 43.8 s, including the idle wait; an earlier attempt was correctly refused as busy. OMPsendreplied in 60.5 s. spawn('claude', ...)replied in 5.6 s, and the new session appeared ineverett ls.- Not live-checked: the Hermes, Pi, and Grok resume and spawn commands, which come from each CLI's
--helpand docs. Pi was not installed on the test machine. The Grok and T3 Code listings were checked read-only against real stores.