Module: SpaceArchitect::Harness

Defined in:
lib/space_architect/harness.rb

Defined Under Namespace

Classes: ClaudeCodeHarness, OpenCodeHarness

Constant Summary collapse

CLAUDE_DEFAULT_MODEL =
"claude-sonnet-4-6"

Class Method Summary collapse

Class Method Details

.for(name, model:, max_turns:, bin: nil, config_dir: nil, effort: nil) ⇒ Object

Factory keyed by harness name. For opencode: config_dir is required (build/<id>-<lane> dir outside the worktree).



13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
# File 'lib/space_architect/harness.rb', line 13

def self.for(name, model:, max_turns:, bin: nil, config_dir: nil, effort: nil)
  case name.to_s
  when "claude-code"
    if effort
      raise Error,
        "effort is opencode-only (sets opencode reasoningEffort) — " \
        "claude-code effort is set via the prompt"
    end
    ClaudeCodeHarness.new(model: model, max_turns: max_turns, bin: bin)
  when "opencode"
    if model == CLAUDE_DEFAULT_MODEL
      raise Error,
        "Pass --model when using --harness opencode (the claude-sonnet-4-6 default " \
        "is a Claude model ID and will not work with opencode — " \
        "try e.g. fireworks-ai/accounts/fireworks/models/glm-5p2)"
    end
    raise Error, "config_dir is required for opencode harness" unless config_dir
    OpenCodeHarness.new(model: model, max_turns: max_turns, bin: bin, config_dir: config_dir, effort: effort)
  else
    raise Error, "Unknown harness '#{name}' — valid values: claude-code, opencode"
  end
end