Files
united-workforce/packages/workflow-agent-claude-code
xiaoju 97637ad831 feat(cli): unify uwf CAS store with global json-cas store
This resolves issue #573 by moving uwf's CAS directory from
~/.uncaged/workflow/cas/ to the shared ~/.uncaged/json-cas/ location.

Changes:
- Added getGlobalCasDir() function with UNCAGED_CAS_DIR support
- Updated createUwfStore() to use global CAS directory
- Added comprehensive test coverage (11 new tests)
- Updated all existing tests for environment isolation
- Updated documentation (CLAUDE.md, README.md)

Benefits:
- Cross-tool visibility: json-cas CLI can read uwf-created nodes
- Schema sharing: both tools access same schema registry
- Future-proofing: enables json-cas render/verbose for uwf data

Fixes #573

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
2026-05-30 04:52:47 +00:00
..

@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).