# dsh-plugin-recursive-harness bundle layer, applied when a profile lists this bundle. # To change a setting, patch row id `recursive-harness` in your profile's # cordis.patch.yml (for the web profile: ~/.dsh/profiles/web/cordis.patch.yml). # A patch replaces the whole `config`; keys you leave out fall back to the defaults below. # # - id: recursive-harness # config: # proposer: # engine: llm # endpoint: http://127.0.0.1:8000/v1/chat/completions # model: my-model # probe: # provider: my-provider # a provider id from your profile's llm-pi-ai rows # model: my-model # - insert: - id: recursive-harness name: dsh-plugin-recursive-harness config: mode: full # full (service + /harness command) | apply-only (probe child processes only) # baseDir: ~/.dsh/recursive-harness # default: $DSH_HOME/recursive-harness; the three dirs below are relative to it harnessDir: active # the harness version mounted into every new Session storageDir: state # manifest, checkpoints, snapshots, session sidecars experienceDir: experience # cross-task experience library (INDEX.md + entries) sectionOrder: 760 # system prompt section order of the mounted harness maxConcurrency: 2 # parallel probe child processes (1-8) maxTokensPerIteration: 120000 # token budget of one evolution run (all probes together) maxWallTimeMs: 300000 # wall-clock budget of one evolution run probeTimeoutMs: 600000 # one probe child process enableRuntimeStagnation: false # stage 4 runtime stagnation detector (tools/post-execute) stagnationThreshold: 3 lockedSurfaces: [] # extra paths a candidate may never touch (AGENTS.md, .dsh, .git are always locked) protectedPatterns: [] # extra regex sources that reject a candidate when matched (e.g. a production system name) proposer: engine: template # template (fixed text, no model) | llm (OpenAI-compatible chat completions) endpoint: http://127.0.0.1:8000/v1/chat/completions model: "" # required for llm apiKeyEnv: "" # env var holding the key; empty when the endpoint needs none allowEgress: false # must be true before anything goes to a non-loopback endpoint allowHttpHosts: [] # non-loopback hosts that may be reached over plain http judge: false # model judge as the third comparison tier (never overrides objective checks) jsonMode: false # send response_format json_object (vLLM, OpenAI); helps models that add prose around the JSON timeoutMs: 120000 temperature: 0.7 maxTokens: 8000 extraBody: {} # merged into each request, e.g. { chat_template_kwargs: { enable_thinking: false } } maxCandidateChars: 6000 # cap per harness component / skill body probe: templateProfile: web # the profile whose model rows and credentials each probe child inherits # templateDshHome: ~/.dsh # default: $DSH_HOME provider: "" # override the probe child's default model (provider id from llm-pi-ai) model: "" # dshCliEntry: /path/to/@deepseek-ai/dsh/lib/bin.js # auto-detected inside dsh; or env DSH_CLI_ENTRY blockedTools: [] # tasks that require one of these tools are never probed automatically