charlie947

Codex Task Router — Productivity skill for Claude Code

Productivity community

Explicit task routing for Codex and subscription Claude with usage gates and dispatch receipts.

How to install Codex Task Router

This entry records only its repository, not the path inside it, so there is no exact command to give. Open charlie947/codex-task-router and copy the folder into ~/.claude/skills/, or the file into ~/.claude/agents/.

What Codex Task Router does

Explicit task routing for Codex and subscription Claude with usage gates and dispatch receipts.

Alternatives in Productivity

  • Claudenightswatch — Autonomous task execution system for Claude CLI that monitors your usage windows and executes predefined tasks 352 ★
  • Writ Approve — Advance the current Writ workflow phase with an explicit tool-confirmed advance 187 ★
  • Execute — Execute - quick task routing to the best specialist or workflow 127 ★

README

codex-task-router

Deterministic local router for a **new** task: it classifies the task text into a lane using a fixed keyword table — never a model's judgement — and, if every safety gate passes, dispatches it to the installed `codex` or `claude` CLI. Python standard library only, no runtime dependencies.

Source: [charlie947/codex-task-router](https://github.com/charlie947/codex-task-router).

**What this is not:** installing this package does not make any AI assistant, agent, or "composer" session start calling it automatically. This is a standalone CLI you (or a script) invoke explicitly, one task at a time. Some environments separately maintain their own instruction/skill files that tell an assistant *when* to invoke a command like `codex-route` — that kind of skill is not part of this package, is not installed by it, and is not described here; this repository is the router CLI only.

Scope

  • Routes new tasks only. There is no pre-turn hook and no automatic interception of a running composer session — this is an explicit CLI entrypoint you run yourself.
  • Never makes a model call to classify a task. Classification is keyword-based string matching.
  • Never calls a provider to check usage. It reads a JSON file you (or an existing native usage tool) keep current, and fails closed if that file is missing, stale, or reports the lane as exhausted/unsafe/unavailable. See router/usage.py for the exact trust boundary and freshness rule.
  • Never calls a provider to check machine load. It reads the real charlie-session-guard resource-state file (~/.local/state/charlie-session-guard/status.json by default, overridable with --guard-state) and fails closed for every lane, including an approved astra, if that file is missing, stale, malformed, timestamped in the future, or reports defer_new_heavy_work: true. See router/guard.py.
  • Never falls back to an API key, a base-URL override, a cloud-provider override (Bedrock/Vertex