Skip to content

Add Claude Code CLI subprocess backend#2

Open
reed-nicolas wants to merge 1 commit into
mainfrom
claude-code-backend
Open

Add Claude Code CLI subprocess backend#2
reed-nicolas wants to merge 1 commit into
mainfrom
claude-code-backend

Conversation

@reed-nicolas

Copy link
Copy Markdown

Ports chia's ClaudeCodeLLM into SkyDiscover so runs can use a local claude CLI subscription instead of a hosted API. Three new files under skydiscover/llm/:

  • claude_code_llm.py: subprocess wrapper around claude --print with NDJSON event streaming and typed error classification.
  • claude_code_llm_pool.py: non-Ray subset of chia's exception hierarchy and rate-limit parsers.
  • claude_code_adapter.py: factory that wires the backend onto LLMModelConfig.init_client so the existing LLMPool path picks it up.

Divergences from chia, all forced by the non-Ray bare-metal target:

  • claude_path and claude_config_dir are constructor params so the binary and auth dir can be overridden via env vars at the caller.
  • _get_node_id returns "local".
  • Ray-coupled methods dropped (prompt_pooled, _serializable_config, _pooled_prompt_task, _session_transcript_path).
  • Streaming _run_claude enforces timeout_seconds with proc.wait(timeout=...) plus kill-and-raise on expiry, since there is no Ray worker supervision to kill a stalled subprocess.
  • ChiaTool type hints replaced with Any. Tools are unused here.

No behavior change for callers that do not set init_client.

@reed-nicolas reed-nicolas requested a review from jkjkim April 20, 2026 05:36
@reed-nicolas reed-nicolas self-assigned this Apr 20, 2026
jkjkim pushed a commit to ucb-chia/skydiscover that referenced this pull request May 6, 2026
Adds three files under skydiscover/llm/ that let adaevolve use a local
`claude` CLI subscription instead of a hosted LLM API:

- claude_code_llm.py: subprocess wrapper around `claude --print` with
  NDJSON event streaming and typed error classification.
- claude_code_llm_pool.py: non-Ray subset of chia's exception hierarchy
  and rate-limit parsers.
- claude_code_adapter.py: async LLMInterface adapter plus a
  make_claude_code_init_client factory that plugs the backend into
  LLMModelConfig.init_client (llm_pool.py:34 picks it up automatically
  when init_client is populated).

The adapter reads ClaudeCodeLLM._last_metadata after each prompt so
LLMResponse.model_used / prompt_tokens / completion_tokens survive into
the controller's child_metadata capture and the multi-seed runner
watchdog's cost accounting.

Ports the two SmartAgentPrefetchers PRs
(SmartAgentPrefetcher#2,
SmartAgentPrefetcher/agentic-flow#1) into the
correct Chia home. No behavior change for callers that do not set
init_client.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant