Disclaimer: Gajae-Code is an experimental, beta-stage early project. Expect rough edges and verify outputs before relying on it for important work.
A red-claw coding-agent harness for crisp interviews, resilient plans, tmux-native execution, and durable verification.
I created an earlier OpenAI code harness and an earlier Anthropic-code harness. After living with those harnesses, I felt the same thing kept happening: the harness got bloated, but the work still collapsed into one useful loop.
Gajae-Code is published through the normal npm registry as gajae-code; that package installs the gjc binary. Install the one-line npm wrapper with Bun for the recommended runtime workflow:
bun install -g gajae-codeThe scoped package is also available as @gajae-code/coding-agent. For repository development, use the source checkout commands in Development.
Start the recommended tmux-backed experience:
gjc --tmuxBare gjc launches directly without creating or attaching a tmux session:
gjcRun inside an isolated Git worktree when you want a safer branch-local workspace:
gjc --tmux --worktree <path>Use a dedicated path for throwaway or branch-specific work so the main checkout stays clean.
Gajae-Code has two retry layers:
- Session auto-retry (
retry.maxRetries) retries a failed assistant turn after a terminal transient error. - Provider retry budgets control retries inside the provider transport before that terminal error reaches the session.
Configure provider budgets in ~/.gjc/config.yml (or the active project/user settings source):
retry:
# Similar to codex-cli request_max_retries. Counts retries, not the initial request.
requestMaxRetries: 4
# Similar to codex-cli stream_max_retries. Counts replay-safe stream retries.
streamMaxRetries: 100
# Session-level terminal-error retries remain separately configurable.
maxRetries: 3
maxDelayMs: 300000requestMaxRetries applies to provider SDK/fetch retries before a stream is established. streamMaxRetries applies only when a provider can safely replay a transient stream failure before user-visible content or in provider-specific replay-safe paths. Invalid auth, unsupported models/providers, malformed requests, context overflow, user aborts, and permanent quota failures remain fail-fast instead of being hidden by retry loops.
The default dark TUI identity is the GJC red-claw theme, while light-appearance terminals default to the bundled blue-crab theme. Explicit user theme settings still win.
Gajae-Code (gjc) keeps the public agent surface intentionally small while making the runtime around it dependable. It focuses on one useful loop:
deep-interview -> ralplan -> ultragoal
└─ optional team execution when parallel tmux workers help
Use deep-interview to clarify intent, ralplan to critique the approach, and $ultragoal to carry the work through implementation, revision, verification, and an evidence summary. Add $team only when the task benefits from coordinated parallel workers; $team is an optional execution mode, not a required handoff step. The result is a compact CLI that stays easy to reason about, but still gives you session state, worktree isolation, tmux orchestration, model routing, tool execution, and persistent evidence when the work needs it.
Gajae-Code ships four default workflow skills:
| Skill | What it does |
|---|---|
deep-interview |
Removes ambiguity before planning or code changes. |
ralplan |
Builds and critiques a plan before mutation. |
team |
Optionally coordinates tmux-backed parallel execution when the work benefits from multiple workers. |
ultragoal |
Tracks durable goals through implementation, revisions, verification, and evidence summaries. |
And four bundled role agents:
| Agent | What it does |
|---|---|
executor |
Bounded implementation, fixes, and refactors. |
architect |
Read-only architecture and code-review assessment. |
planner |
Read-only sequencing and acceptance criteria. |
critic |
Read-only plan critique and actionability review. |
No sprawling default skill zoo: the harness improves by making this small method better.
A concrete bug-fix pass might look like this:
/skill:deep-interview clarify the bug, affected behavior, non-goals, and acceptance checks
/skill:ralplan turn the clarified bug report into a reviewed fix plan
gjc ultragoal create-goals --brief-file <approved-plan>
# Optional only for parallel work:
gjc team 2:executor "split implementation and verification for this bug fix"
gjc ultragoal complete-goals
That flow is meant to describe the operator sequence, not to guarantee hidden automation: the agent still reports what it changed, what it revised after findings, what checks ran, and what evidence supports the fix.
Install dependencies and local defaults:
bun install
bun run install:defaultsRun the CLI from source:
bun packages/coding-agent/src/cli.ts --helpDefault workflow definitions live in source, not committed .gjc copies:
packages/coding-agent/src/defaults/gjc/skills/<name>/SKILL.md
packages/coding-agent/src/prompts/agents/<role>.md
For workflow-definition or rebrand-surface changes, run the project gates:
bun scripts/check-visible-definitions.ts
bun scripts/verify-g002-gates.ts
bun scripts/rebrand-inventory.ts --strict
bun test packages/coding-agent/test/default-gjc-definitions.test.tsFor a package-by-package map, see docs/codebase-overview.md.
Thanks to the people and agents helping shape the early Gajae-Code releases, including Yeachan-Heo and IYENTeam. Contributions, bug reports, and release validation are welcome through GitHub and the Discord community.
Gajae-Code's default TUI identity is the crustacean pair: red-claw for dark appearance and blue-crab for light appearance. It builds on lessons from a small family of agent harnesses while keeping the public GJC surface intentionally focused. Historical attribution is kept in NOTICE.md.
MIT. See LICENSE.

