VexJoy Agent
September 21, 2026 · View on GitHub
Essays and writing behind this toolkit live at vexjoy.com.
VexJoy Agent connects plain-English requests to specialist agents, skills, and workflows. /do selects the knowledge and tools needed for your task. Hooks enforce specific checks, and scripts handle repeatable work.
The aim is to give capable models useful domain knowledge without making you learn the toolkit's catalog.
43 agents, 60 skills, 79 hooks, 161 scripts. Agents carry domain knowledge, skills provide reusable methods, hooks enforce selected checks, and scripts handle repeatable plumbing.
Works across Claude Code (/do), Codex ($do), Factory (/do), Reasonix (/do).
What It Looks Like
$ claude
> /do debug this Go test
Routing: go-engineer + systematic-debugging
Phase 1/4: Reproduce: running test, capturing failure...
Phase 2/4: Hypothesize: 3 candidates from stack trace...
Phase 3/4: Verify: isolated root cause in connection pool timeout
Phase 4/4: Fix: patch applied, test passing, PR opened
✓ Delivered: PR #847, fix connection pool timeout in health check
The router pairs a Go agent with a debugging skill, then follows the task through verification and delivery.
The Pipeline
ROUTE PLAN EXECUTE VERIFY DELIVER RECORD
┌──────┐ ┌──────┐ ┌──────┐ ┌──────┐ ┌──────┐ ┌──────┐
│ /do │───▶│ Task │───▶│Agent │───▶│Tests │───▶│ PR │───▶│Route │
│Router│ │ Plan │ │+Skill│ │Gates │ │Branch│ │Result│
└──────┘ └──────┘ └──────┘ └──────┘ └──────┘ └──────┘
/d — Jev-Powered Router
/d uses TypeSafe's Jev to classify the request
and select the matched agent, skill, and pipeline. Classification failures
fall back to /do selection; they do not bypass the required intent check.
Choose either transport:
# Alternative: Jev through Vercel AI Gateway
export JEV_TRANSPORT=vercel
export AI_GATEWAY_API_KEY=...
# Preferred: Jev's direct API
export JEV_TRANSPORT=direct
export TYPESAFE_API_KEY=...
JEV_TRANSPORT=auto is the default. It prefers the direct API when
TYPESAFE_API_KEY is set, then uses Vercel when only
AI_GATEWAY_API_KEY is set. An explicit transport never silently switches to
the other one. The TypeSafe MCP plugin is not required for /d.
Both /d and /do require every applicable routing phase and a fresh Jev check
of the actual proposed intent before dispatch or direct completion. Trivial,
force, fallback, and injected-result routes use the same gate. Missing evidence
or unavailable, errored, or unaligned intent results block execution; the agent
reports the diagnostic and resolves it before continuing. The shared builder
validates handoffs, while installed hooks enforce supported dispatch/completion
boundaries. Clarifications to unfinished routed tasks retain the intent gate
and require a fresh check with the original request context. Claude also blocks
completion while checked worker prompts remain undispatched; Codex cannot
observe native worker dispatch and has a narrower completion guard. See the required router protocol.
Intent-alignment receipts remain in learning.db. Inspect them with:
python3 scripts/jev-intent-stats.py --days 30
Example:
> /d fix the flaky test in the payments module
ROUTING (/d): testing-automation-engineer + testing
Source: jev (confidence: medium)
Invoking...
Anti-Rationalization
Checks require evidence rather than confidence.
| Agent Says | What Happens |
|---|---|
| "Code looks correct, skip tests" | Exit gate requires test output. Blocked. |
| "Trivial change, no verification" | Hook blocks completion without evidence. |
| "Similar to before" | Skill demands case-specific proof. |
| "User is in a hurry" | Protocol overrides time pressure. |
| "I'm confident" | Gate demands exit code, not assertion. |
Hooks run at configured events. Skills state what to verify; blocking hooks enforce the checks they cover. Coverage depends on the runtime and tool path.
Knowledge Work Is First-Class
The content engine researches, drafts in a calibrated voice, checks 397 writing patterns, and adapts finished pieces for each platform. /html produces a self-contained report, deck, prototype, chart, or diagram.
It Proves Its Own Changes
Toolkit changes use direct review and relevant checks. Model comparisons can settle specific uncertainties; they are not required for every edit. PHILOSOPHY.md explains the validation policy. what-didnt-work.md records failed experiments, routing reversals, unvalidated A/B citations, disabled lint rules, and program refutations.
The automated nightly evolution loop (/evolve, writes to evolution-reports/) ran regularly through mid-May 2026. It is currently dormant; recent evidence has come from manual PRs instead.
Installation
git clone https://github.com/notque/vexjoy-agent.git ~/vexjoy-agent
cd ~/vexjoy-agent
./install.sh
Installs into ~/.claude/ and mirrors into ~/.codex/, ~/.factory/, and ~/.reasonix/ when the runtime command is on PATH or its home directory exists. Choose symlinks for live updates through git pull, or copies for a stable snapshot.
Want only part of the toolkit? Run ./install.sh --configure, or copy .local.example/profile.yaml to .local/profile.yaml and edit it. Without a profile, the full toolkit installs. Details: .local.example/README.md.
| CLI | Entry Point |
|---|---|
| Claude Code | /do |
| Codex | $do |
| Factory | /do |
| Reasonix | /do |
Jev Auto-Compact plugin (optional, requires TYPESAFE_API_KEY):
claude plugin marketplace add ./plugins/jev-auto-compact
claude plugin install jev-auto-compact@jev-auto-compact -y
Replaces generated compaction summaries with Jev-judged verbatim pruning after context reaches 60%. Inspect recorded before/after tokens and duration with python3 scripts/jev-compact-evidence.py.
Full setup: docs/start-here.md
Codex CLI Parity
Mirrors agents, skills, and supported hooks into ~/.codex/. Codex v0.144.1+ supports 59 of the 70 unique Claude hook registrations: 29 native, 30 adapter-backed, and 11 unsupported. These are registrations, not unique hook files.
The adapter converts apply_patch operations into the Write/Edit payload expected by existing guards. It cannot intercept writes through unified_exec, unmatched MCP tools, WebSearch, or other unsupported paths. PreCompact and Stop receive less telemetry than in Claude Code. This is expanded compatibility, not full parity.
After install or any hook-definition change, run /hooks in Codex and review the new definitions before trusting them. Codex hash-trusts hook commands and skips changed, unreviewed definitions.
Factory CLI Support
Mirrors agents (as "droids"), skills, and hooks into ~/.factory/. Hook config merges into ~/.factory/settings.json with paths rewritten.
Reasonix Support
Mirrors skills, 161 scripts, and 10 allowlisted hook registrations into ~/.reasonix/. Reasonix has no agent or custom-command surface; /do arrives as a skill. It exposes four events: PreToolUse, PostToolUse, UserPromptSubmit, and Stop. MCP, model, and permissions in ~/.reasonix/config.json remain user-owned.
Token-saving mode
The toolkit supplies its own routing, domain knowledge, methodology, and enforcement. The default system prompt duplicates most of that.
claude --system-prompt "."
Strips built-in tool-use instructions. The toolkit's agents, skills, hooks, and CLAUDE.md provide the project-specific guidance.
Four Layers
| Layer | Count | Does |
|---|---|---|
| Agents | 43 | Domain knowledge: idiom tables, failure mode catalogs, error-to-fix mappings |
| Skills | 60 | Reusable guidance and methodology for recurring work. |
| Hooks | 79 | Lifecycle checks, context injection, and telemetry. |
| Scripts | 161 | Repeatable validation, orchestration, and plumbing. |
Full skill catalog: docs/skills.md.
┌─────────────────────────────────────────────────┐
│ SKILL.md │
│ ┌─ Frontmatter ─────────────────────────────┐ │
│ │ triggers, pairs_with, success-criteria │ │
│ └────────────────────────────────────────────┘ │
│ Reference Loading Table (conditional imports) │
│ Phased Instructions (numbered, with gates) │
│ Verification (evidence requirements) │
└─────────────────────────────────────────────────┘
Built with the Toolkit
A game built entirely by Claude Code using these agents, skills, and pipelines:
Choose Your Path
I just want to use it Install, learn /do, done.
I do knowledge work Writing, research, data analysis, moderation, HTML artifacts. No code.
I'm a developer Architecture, extension points, adding agents and skills.
I'm an AI power user Routing tables, pipelines, hooks, telemetry DB.
I'm an AI agent Machine-dense inventory. Tables, paths, schemas.
Philosophy
- Outcome-first operation. Describe the result; routing selects the relevant catalog entries.
- Programs compute; models judge and generate. Use deterministic code where the answer is computable.
- Density. Every word carries instruction, rule, or decision. Cut everything else.
- Breadth over depth. Right context ensures correctness. Unfocused context adds cost.
- Structural enforcement. Exit codes enforce what instructions can't. Quality gates are automated, not advisory.
- Everything pipelines. Complex work decomposes into phases. Phases have gates. Gates prevent cascading failures.
Full design philosophy: PHILOSOPHY.md
Maintenance
One report-only script surfaces upkeep work; it prints a digest and never edits, deletes, or blocks.
python3 scripts/stale-skill-scan.py --top 20ranks stale skills and agents as pruning candidates. Run it quarterly; see docs/deprecation-template.md.
Scheduled work follows the same boundary as everything else: judgment uses models; repeatable plumbing uses 161 scripts.
| Need | Use |
|---|---|
| Run a deterministic command on a schedule | scripts/agent-scheduler.py with runner: "command" |
| Run an agent judgment on a schedule, webhook, or file change | scripts/agent-scheduler.py with the default runner: "claude" |
| Install or remove a user crontab entry safely | scripts/crontab-manager.py |
| Audit shell cron reliability | cron-automation |
| Keep one interactive objective moving until criteria verify | objective-loop |
Contributing
See CONTRIBUTING.md.
License
MIT. See LICENSE.