tinyhumansai/openhuman · error · anyhow::Error

write Claude Code system prompt file: {e}

Error message

write Claude Code system prompt file: {e}

What it means

Writing the composed system prompt to a file in the Claude Code scratch dir failed before spawning the CLI. An IO error on a just-created temp dir — disk full, permissions, or the file being unreadable — so the turn aborts before the subprocess starts.

Source

Thrown at src/openhuman/inference/provider/claude_code/driver.rs:323

        // same dir below). This is where the coding agent reads/edits code.
        "--add-dir".into(),
        ctx.project_dir.display().to_string(),
        // Default `acceptEdits` (auto-apply edits, gate the rest); the user can
        // opt into `bypassPermissions` for the full toolset (see above).
        "--permission-mode".into(),
        permission_mode.to_string(),
        if is_new {
            "--session-id".into()
        } else {
            "--resume".into()
        },
        cc_session_id.clone(),
        "--model".into(),
        ctx.model.clone(),
    ];
    args.extend(
        append_system_prompt_args(scratch.path(), ctx.append_system_prompt.as_deref())
            .map_err(|e| anyhow::anyhow!("write Claude Code system prompt file: {e}"))?,
    );
    if let Some(p) = mcp_config_path.as_ref() {
        args.push("--mcp-config".into());
        args.push(p.display().to_string());
        args.push("--strict-mcp-config".into());
    }
    // Tool surface follows the permission posture: full access → no
    // `--disallowedTools` (CC keeps its entire toolset incl. Bash/network);
    // default `acceptEdits` → withhold the dangerous builtins (edits only).
    if !full_access {
        args.push("--disallowedTools".into());
        args.push(DISALLOWED_CC_BUILTINS.join(","));
    }

    // Validate input *before* spawning so we don't launch a process we
    // can't feed (CodeRabbit: validate before spawn).
    let stdin_bytes = build_stdin(ctx.messages, is_new);
    if stdin_bytes.is_empty() {

View on GitHub (pinned to 7491200858)

Solutions

  1. Check disk space and tmp permissions
  2. Retry the turn
Defensive patterns

Strategy: try-catch

When it happens

Trigger: Thrown at src/openhuman/inference/provider/claude_code/driver.rs:323 when the library encounters an invalid state.

Common situations: See trigger scenarios.


AI-assisted analysis of tinyhumansai/openhuman@7491200858 (2026-08-17). Data as JSON: /api/errors/3bfe47138d4b184c. Report an issue: GitHub.