Skip to content

direct backend: add harness_config_dirs for seeding Claude/Codex local configs (REMOTE-2316) - #114

Draft
seemeroland wants to merge 1 commit into
mainfrom
oz-agent/REMOTE-2316-claude-config-sync
Draft

direct backend: add harness_config_dirs for seeding Claude/Codex local configs (REMOTE-2316)#114
seemeroland wants to merge 1 commit into
mainfrom
oz-agent/REMOTE-2316-claude-config-sync

Conversation

@seemeroland

Copy link
Copy Markdown
Contributor

Summary

Addresses REMOTE-2316: when a task runs with the Claude Code or Codex harness on a self-hosted direct backend, local plugins/skills on the host are not available because the worker isolates each task into an empty harness config directory.

Changes

New harness_config_dirs config option for the direct backend — operators can point at a host directory to seed into each task's isolated harness config directory before the task runs:

backend:
  direct:
    harness_config_dirs:
      claude: "/home/operator/.claude"
      codex:  "/home/operator/.codex"

The host directory is copied (not mounted), so each task gets an isolated snapshot and concurrent tasks don't interfere. Writes during a task are discarded on cleanup. If the source directory doesn't exist the step is silently skipped.

README documentation — a new "Claude Code harness: local plugins and settings" section documents:

  • The harness_config_dirs feature for the direct backend
  • Volume mount workaround for the Docker backend
  • PVC and custom sidecar options for the Kubernetes backend
  • Current state for Warp-managed cloud environments

Files changed

  • internal/config/config.goHarnessConfigDirs field on DirectConfig
  • internal/worker/direct.goHarnessConfigDirs on DirectBackendConfig, seedHarnessConfigDir() implementation, call site in ExecuteTask
  • main.go — wire HarnessConfigDirs from config to backend
  • internal/worker/direct_test.go — 4 new test cases covering the seeding logic
  • README.md — new section with per-backend workaround guidance

Labels

from-feedback-bot

Conversation: https://staging.warp.dev/conversation/3c455f9d-3d88-4000-8906-3aa7a8abe321
Run: https://oz.staging.warp.dev/runs/019f95f2-e472-737c-a531-c2542b8a5e0a

This PR was generated with Oz.

When a task uses the Claude Code or Codex harness, the direct backend
sets CLAUDE_CONFIG_DIR / CODEX_HOME to a per-task directory inside the
task workspace so concurrent tasks don't interfere with each other.
This means each task starts with an empty harness config directory and
local plugins/skills on the worker host are not available.

Add a new HarnessConfigDirs configuration option (harness_config_dirs
in YAML) to the direct backend that lets self-hosted worker operators
point at a host directory to seed from before each task runs:

  backend:
    direct:
      harness_config_dirs:
        claude: "/home/operator/.claude"
        codex:  "/home/operator/.codex"

The host directory is copied (not mounted) so each task gets an
isolated snapshot. Writes during the task do not affect the host dir
and are discarded on cleanup. If the source directory does not exist
the step is silently skipped so the config can be set up ahead of
an actual Claude Code install.

The README gets a new section documenting this feature alongside
the workarounds for the Docker and Kubernetes backends (volume mounts
and pod_template / custom sidecar, respectively) and a note on the
current state for Warp-managed cloud environments.

Addresses REMOTE-2316.

Co-Authored-By: Oz <oz-agent@warp.dev>
@seemeroland seemeroland added the from-feedback-bot Linear issue delegated from Feedback Bot label Jul 24, 2026
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

from-feedback-bot Linear issue delegated from Feedback Bot

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant