Skip to content
Development
Skill

/d

Jev-powered request router: classifies via TypeSafe's Jev API, then dispatches to the matched agent, skill, and pipeline.

From plugin
vexjoy-agent
420123 skills198 agents12 commands77 hooks
Install
$ npx -y skills add notque/vexjoy-agent --skill d --agent claude-code

How it fires

How this skill gets triggered: by you, by Claude, or both.

  • Fires itselfAuto-invocation. Claude auto-loads it when your prompt matches the work.Auto-invocation is when the right skill fires by itself at the right moment, driven by a FLOW.md router and a hook, instead of you invoking it by name. It is the difference between a skill being installed and a skill actually getting used.Read the full definition →
  • You can call itInvoke it directly when you want it.
  • Slash command/d

Context preview

The summary Claude sees to decide when to auto-load this skill.

Jev-powered request router: classifies via TypeSafe's Jev API, then dispatches to the matched agent, skill, and pipeline.

SKILL.md

d.SKILL.md
name: d
version: "1.0.0"
description: "Jev-powered request router: classifies via TypeSafe's Jev API, then dispatches to the matched agent, skill, and pipeline."
user-invocable: true
argument-hint: "[request]"
allowed-tools:
  - Read
  - Bash
  - Grep
  - Glob
  - Skill
  - Task
routing:
  triggers:
    - "jev router"
    - "route with jev"
    - "use the d router"
  not_for: "General-purpose task execution — /d classifies and dispatches, it does not perform the work itself."
  category: meta-tooling

/d — Jev Router

Classifies requests via TypeSafe's Jev API and dispatches to the matched agent, skill, and pipeline. One API call replaces reading the full routing manifest into context.

The classification path has three layers: a deterministic `pre-route.py` force-route guard (offline, runs first, authoritative for git/security), a TypeSafe presence check, and a two-stage Jev classification — a cheap wide-rank stage 1 over all manifest candidates plus a trivial-bypass gate, then a full-detail shortlist-rerank stage 2 with per-candidate fit checks and stack/fan-out signals.

Design rationale: `${CLAUDE_SKILL_DIR}/references/jev-classifier-design.md`.

Phase Banners

Every phase: `/d > Phase N: PHASE_NAME — description...` After Phase 1 resolves: `===` routing banner. Both required.

---

Phase 1: CLASSIFY

`scripts/jev-route.py` owns the entire classification in one subprocess call.

When `JEV_RESULT` is already in context (the `jev-route-injector` hook ran the script before your first token), use it and skip the command below.

REQUEST_FILE=$(mktemp); printf '%s' "{user_request}" > "$REQUEST_FILE"
python3 "$SDIR/jev-route.py" --request-file "$REQUEST_FILE" --json-compact
rm -f "$REQUEST_FILE"

Resolve `$SDIR`: `${HOME}/.claude/scripts`, falling back through `.hermes`/`.factory`/`.codex`/`.reasonix`, or the repo's `scripts/` directory.

Hold the result as `JEV_RESULT`. Shape (stable — see design reference for full schema):

`available`, `jev_called`, `matched`, `fallback`, `fallback_reason`, `agent`, `skill`, `pipeline`, `complexity`, `confidence`, `match_type`, `reasoning`, `stack`, `signals`, `signal_scores`, `source`, `latency_ms`, `usage`, `agents`, `gate_score`, `fits_scores`, `stage1_shortlist`.

`latency_ms` and `usage` are itemized dicts (`{"stage1_ms","stage2_ms","total_ms"}` and `{"stage1","stage2"}`). Read `.total_ms` for a single latency figure.

**Gate**: `source == "jev-trivial-bypass"` → Phase 1T. `fallback == true` → Phase 1F (stop). Otherwise → Phase 2.

---

Phase 1T: TRIVIAL-BYPASS (source == "jev-trivial-bypass")

Stage 1's gate fired: `gate_score` below threshold, no agent/skill/pipeline needed. Terminal state (`matched: true`, `fallback: false`). Show the routing banner with `Classification: Trivial` and `Source: jev-trivial-bypass`, then handle the request directly — answer the question, do the one-line action. Do not run Phase 3 or Phase 4; do not call `build-dispatch.py`. Stop here.

---

Phase 1F: UNAVAILABLE (fallback == true)

Jev could not classify this request. `JEV_RESULT.source` explains why:

  • `unavailable` — TypeSafe not configured (missing `TYPESAFE_API_KEY` or

plugin disabled).

  • `invalid-pick` — Jev's pick was not a valid manifest name.
  • `error` — a Jev call timed out or failed.

Show:

===================================================================
 /d: Jev unavailable — [JEV_RESULT.fallback_reason]
 Use /do for manifest-based routing.
===================================================================

Stop here. Do not attempt the request.

---

Phase 2: DECIDE (fallback == false, not trivial-bypass)

`JEV_RESULT.source` is either `pre-route-force` (deterministic guard matched, Jev not called) or `jev` (Jev classification, manifest-validated).

Apply directly:

  • `agent` / `skill` / `pipeline`: use `JEV_RESULT`'s values as-is. Already

validated against the live manifest membership sets inside the script.

  • `complexity`: use `JEV_RESULT.complexity` when set. When `null` (always for

`pre-route-force`), default to `medium`, except a single one-line trivial fix → `simple`.

  • Confidence: `JEV_RESULT.confidence` (`high`/`medium`/`low`).

**Routing banner** (first visible output):

===================================================================
 ROUTING (/d): [brief summary]
===================================================================
 Selected:
   -> Agent: [JEV_RESULT.agent] - [JEV_RESULT.reasoning]
   -> Skill: [JEV_RESULT.skill] - [JEV_RESULT.reasoning]
   -> Pipeline: [JEV_RESULT.pipeline, if set]
   -> Source: [JEV_RESULT.source] (confidence: [JEV_RESULT.confidence])
 Invoking...
===================================================================

Always include `Source:` — it distinguishes a Jev decision from a force-route match.

**Gate**: Agent+skill set, banner shown. Phase 3.

---

Phase 3: ENHANCE (stack signals)

`JEV_RESULT.signals` (booleans at 0.6 confidence threshold, computed by the script) map to stack entries:

| Signal true | Stack | |---|---| | `tests_requested` | `testing` | | `research_needed` | add `research-coordinator-engineer` to agents (fan-out) | | `comprehensive_review` | `review` (drop if a real multi-file diff exists — `right-size-review.py` outranks it) | | `local_only` | inject `shared-patterns/local-only.md` | | `objective_loop_worthy` | `process` |

`anti-rationalization-core` always rides. When `source` is `pre-route-force` and `JEV_RESULT.stack` is non-empty (e.g. `programming`), keep it.

**Fan-out agents**: union `JEV_RESULT.agents` (script-computed fan-out picks, each passed its per-candidate fit check) into the `research_needed` agent list, deduped. Dispatch fan-out agents as separate parallel `Agent` tool calls alongside the primary `build-dispatch.py` dispatch.

**Gate**: Stack applied. Phase 4.

---

Phase 4: EXECUTE

Build the task spec (request_verbatim unchanged; intent, constraints, files, ownership, acceptance filled

Read more
Ships withvexjoy-agent

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.

Get the whole plugin

Other skills on vexjoy-agent.