- Enhanced Biome config with test file override for noConsole - Applied Biome auto-fixes (8 files: formatting, template literals, optional chains) - Updated all package repository URLs to git.shazhou.work/uncaged/workflow.git - Added workflow-agent-claude-code to publish order in scripts/publish-all.mjs - Added --ignore-scripts flag to publish command to bypass prepublishOnly guard - Installed vitest in root devDependencies for test infrastructure - Created vitest.config.ts for all 8 packages with passWithNoTests: true - Fixed 3 test files to use vitest imports instead of bun:test - Added test and test:ci scripts to packages missing them - Added missing build step to .gitea/workflows/ci.yml - Renamed CI job from 'test' to 'check' for clarity - Created workflows/solve-issue.yaml with TDD-driven issue resolution workflow - Registered solve-issue workflow with uwf (hash: 084YVM60BR8G6) - Added packageManager: bun@1.3.14 to root package.json - Added preinstall guard to block npm/pnpm/yarn - Added prepublishOnly guard to root and all 7 public packages Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
@uncaged/workflow-agent-claude-code
uwf-claude-code agent — spawns the Claude Code CLI and captures session detail.
Overview
Layer 3 agent implementation. Spawns the claude CLI with a composed system prompt (role definition, task, prior steps, edge prompt). Parses stream or JSON stdout, caches session IDs for multi-turn continuation, and stores raw output plus structured detail in CAS.
Dependencies: @uncaged/json-cas, @uncaged/workflow-util-agent
Installation
Included as the uwf-claude-code binary when you install @uncaged/workflow-agent-claude-code:
bun add -g @uncaged/workflow-agent-claude-code
Requires the claude CLI on PATH.
CLI Usage
Invoked by uwf thread step:
uwf-claude-code <thread-id> <role>
Configure or override the agent:
uwf setup --agent claude-code
uwf thread step <thread-id> --agent uwf-claude-code
Environment variables set by the engine:
| Variable | Purpose |
|---|---|
UWF_EDGE_PROMPT |
Moderator edge instruction for this step |
API
All exports come from src/index.ts.
Agent factory
function createClaudeCodeAgent(): () => Promise<void>
function buildClaudeCodePrompt(ctx: AgentContext): string
Session detail
function parseClaudeCodeStreamOutput(stdout: string): ClaudeCodeParsedResult | null
function parseClaudeCodeJsonOutput(stdout: string): ClaudeCodeParsedResult | null
function storeClaudeCodeDetail(
store: Store,
parsed: ClaudeCodeParsedResult,
sessionId: string,
): Promise<string>
function storeClaudeCodeRawOutput(store: Store, rawOutput: string): Promise<string>
Usage (library)
import { createClaudeCodeAgent, buildClaudeCodePrompt } from "@uncaged/workflow-agent-claude-code";
const main = createClaudeCodeAgent();
void main();
Internal Structure
src/
├── index.ts
├── cli.ts Binary entrypoint
├── claude-code.ts createClaudeCodeAgent, buildClaudeCodePrompt, spawn logic
├── session-detail.ts Parse stdout, store CAS detail nodes
├── schemas.ts Claude Code detail CAS schemas
└── types.ts ClaudeCodeParsedResult, message shapes
Configuration
Uses session caching from @uncaged/workflow-util-agent (getCachedSessionId / setCachedSessionId). No separate config file — relies on the Claude Code CLI's own authentication.
Maximum turns per invocation: 90 (constant in claude-code.ts).