Summary
CE skills dispatch generic subagents for reviewers, scouts, researchers, fixers, and similar workers. On Devin (CLI and Devin Local), run_subagent selects a worker by named profile, not by raw model id. The two built-in profiles are subagent_explore (read-only tools, no exec, no file writes) and subagent_general (full tool set, always inherits the parent model).
The plugin has no configuration surface that maps a generic CE dispatch to a named profile. Any CE worker that needs more than read-only tools already lands on subagent_general, so it runs the parent model at parent cost. A cheaper or stronger profile can only be requested by hand-editing every dispatch site.
Two authority classes
CE's generic workers split into two authority classes:
- Read-only workers: reviewers, scouts, researchers, validators. They never mutate tracked project content; per-run scratch artifacts (dossiers, reviewer JSON, run logs) stay in this class.
- Write-capable workers: implementers and fixers that mutate tracked project content.
The split matters because a cheaper profile must never silently gain write authority.
Proposed configuration
Two optional keys under the existing .compound-engineering/ cascade (config.local.yaml then config.yaml):
# .compound-engineering/config.yaml
subagent_read_profile: ce-explorer # generic dispatches that do not mutate tracked content
subagent_write_profile: ce-worker # generic dispatches that do
Semantics:
- Profile names are opaque host-defined strings. The plugin never invents, validates, or defaults one.
- The authority class is chosen per dispatch call, from the work the child actually needs.
- Keys apply only where the host's generic dispatch primitive accepts a named worker profile (on Devin,
run_subagent's profile argument). Typed or registered-agent selectors are out of scope.
- On hosts with no such selector the keys are inert and dispatch is unchanged. Unset keys are a strict no-op everywhere, so existing Claude Code model-selector behaviour is preserved.
- A resolved profile supersedes the surface's model selection for that dispatch class; a profile and a model override are never passed together.
- Unknown, rejected, or unresolvable names follow the surface's ordinary dispatch-failure or degradation path, are named in coverage or degradation notes, and are never reported as having run.
Distinction from #1301
#1301 concerns model and effort selectors for the high-stakes adversarial code-review pass. This proposal covers the generic worker dispatch used across most CE skills: a different mechanism (run_subagent profile versus model flags), different consumers, and a different risk model. The two are complementary.
Tested environment
- Devin CLI 3000.10.31 on Linux x86_64:
devin doctor reports pass custom subagent profiles 1 profile(s) loaded for a profile authored to the documented .devin/agents/<name>/AGENT.md shape.
- Installed docs for Devin CLI 3000.10.27 (
subagents.mdx, models.mdx, reference/configuration/config-file.mdx) describe the two built-in profiles, the profile argument, custom profile locations, and allowed-tools as a hard restriction.
- Known limit: the subagent panel shows profile, status, and tool-call count but not the running model, so profile-to-model attribution is not machine-verifiable from the CLI. The implementation verifies the mechanical contract plus
devin doctor and claims nothing further.
Request for comment
A draft implementation exists on a branch and will be proposed as a PR shortly. Feedback on the host-neutral shape is welcome: are subagent_read_profile/subagent_write_profile the right key names, and is the two-key authority split the right granularity? Implementation is not conditional on a response.
Summary
CE skills dispatch generic subagents for reviewers, scouts, researchers, fixers, and similar workers. On Devin (CLI and Devin Local),
run_subagentselects a worker by named profile, not by raw model id. The two built-in profiles aresubagent_explore(read-only tools, noexec, no file writes) andsubagent_general(full tool set, always inherits the parent model).The plugin has no configuration surface that maps a generic CE dispatch to a named profile. Any CE worker that needs more than read-only tools already lands on
subagent_general, so it runs the parent model at parent cost. A cheaper or stronger profile can only be requested by hand-editing every dispatch site.Two authority classes
CE's generic workers split into two authority classes:
The split matters because a cheaper profile must never silently gain write authority.
Proposed configuration
Two optional keys under the existing
.compound-engineering/cascade (config.local.yamlthenconfig.yaml):Semantics:
run_subagent'sprofileargument). Typed or registered-agent selectors are out of scope.Distinction from #1301
#1301 concerns model and effort selectors for the high-stakes adversarial code-review pass. This proposal covers the generic worker dispatch used across most CE skills: a different mechanism (
run_subagentprofile versus model flags), different consumers, and a different risk model. The two are complementary.Tested environment
devin doctorreportspass custom subagent profiles 1 profile(s) loadedfor a profile authored to the documented.devin/agents/<name>/AGENT.mdshape.subagents.mdx,models.mdx,reference/configuration/config-file.mdx) describe the two built-in profiles, theprofileargument, custom profile locations, andallowed-toolsas a hard restriction.devin doctorand claims nothing further.Request for comment
A draft implementation exists on a branch and will be proposed as a PR shortly. Feedback on the host-neutral shape is welcome: are
subagent_read_profile/subagent_write_profilethe right key names, and is the two-key authority split the right granularity? Implementation is not conditional on a response.