Skip to content

Profile reference

Profiles are Orcho’s executable run-shape contracts.

Use Profile semantics for the first mental model and Profiles and gates for policy design. Use this page when you need the expert vocabulary: every profile mode, every major profile key, and what each setting controls.

Several different things are easy to call “profile mode”. Keep them separate:

SurfaceValuesWhat it controls
concrete profilesmall_task, feature, complex_feature, planning, research, delivery_audit, code_review, refactor, migrationThe executable workflow shape.
selectorauto-detectRecommendation step before dispatch; resolves to a concrete profile and mode.
operating modefast, pro, governedStrictness posture for the selected work kind.
recipe kindfull_cycle, focused, internalBroad shape family used by built-in profiles.
profile kindcustom, full_cycle, scopedJSON authoring typology for built-in and plugin profiles.
profile variantlite, advanced, enterprise, plan, review, task, or custom stringsLegacy/custom subcategory; built-in semantic profiles do not use it for identity.
phase execution modelinear plus registered plugin modesHow one profile step is invoked.
implementation executionwhole_plan, subtask_dagHow the implement phase consumes a parsed plan.
session splitstateless, per_phase, per_role, commonHow runtime sessions are scoped across phases.
session continuityfresh_only, loop_continue, same_zone_continueWhether a phase resumes its own prior runtime session on a repeat call.
handoff typehuman_bypass, human_feedback_on_reject, human_feedback_alwaysWhen a run pauses for operator decision.
cross scopeglobal, project, both, skipWhere a step is projected in orcho cross.
cross gate run modealways, auto, manual_confirm, neverWhether runner-owned cross gates execute.
cross gate skip policyblock, allow_with_gap, allowWhat happens when a cross gate is skipped.
worktree isolationper_run, offWhether the run uses a run-owned checkout or the project checkout.

The operator-facing built-ins are semantic work kinds. Internal profiles exist for scoped follow-up flows but should not be presented as first-run choices.

ProfileDefault modeRecipeImplementationIsolationCross gatesShape
small_taskfastfull_cyclepipeline defaultoffnoplan/validate once, then implement
featurefastfull_cyclesubtask_dagglobal defaultyesplan/validate loop, implement, review/repair loop, final acceptance
complex_featureprofull_cyclepipeline defaultglobal defaultyesfeature-like flow plus compliance/audit phase
planningprofocusednoneoffnoplan/validate loop only
researchfastfocusednoneoffnoplan/validate loop for investigation
delivery_auditprofocusednoneoffnoreview current diff, then final acceptance
code_reviewprofocusednoneoffnoreview current diff, then final acceptance
refactorprofull_cyclesubtask_dagglobal defaultyesfeature-like flow for restructuring
migrationprofull_cyclepipeline defaultglobal defaultyescomplex-feature-like flow for migration
taskinternalinternalpipeline defaultoffnoimplement against an existing plan
correctioninternalinternalpipeline defaultglobal defaultnosystem follow-up after rejected delivery

global default means the profile does not override the workspace or app-level setting. For worktree isolation that usually means worktree.isolation = per_run unless local config or CLI override changes it.

Profile objects are strict. Unknown keys are rejected so typos do not silently disable policy.

{
"feature": {
"kind": "custom",
"semantic_profile": "feature",
"default_mode": "fast",
"recipe_kind": "full_cycle",
"description": "...",
"change_handoff": "uncommitted",
"implementation_execution": "subtask_dag",
"worktree_isolation": "per_run",
"steps": [],
"cross_gates": {}
}
}
KeyRequiredMeaning
kindyesJSON authoring family: custom, full_cycle, or scoped. Built-ins use custom except internal task.
variantnoOptional subtype for custom/plugin profiles. Not the identity source for built-ins.
semantic_profilenoWork-kind identity for built-ins, for example feature.
default_modenoDefault operating mode when the caller does not pass an explicit mode.
recipe_kindnoBroad family: full_cycle, focused, or internal.
descriptionnoHuman-readable profile summary.
change_handoffnoAuthoring-to-review diff contract. Defaults to pipeline config when absent.
implementation_executionnoProfile-level implement delivery policy. Defaults to pipeline config when absent.
worktree_isolationnoProfile-level isolation intent. Defaults to worktree config when absent.
stepsyesOrdered phase steps and loop wrappers.
cross_gatesnoRunner-owned terminal gates for cross-project mode.

Operating mode is not the same as profile. It is the strictness posture applied to a selected work kind.

ModeMeaning
fastLower ceremony path for smaller or clearer work.
proStronger review, receipts, and readiness posture for higher-risk work.
governedExplicit opt-in posture; not a built-in default.

Built-in defaults:

Default modeProfiles
fastsmall_task, feature, research
procomplex_feature, planning, delivery_audit, code_review, refactor, migration
noneinternal task, internal correction

--profile auto-detect can recommend both a concrete work kind and an operating mode. It is still a selector, not a profile.

change_handoff controls what authoring phases leave for review phases.

ModeAuthoring contractReview target
uncommittedLeave task changes in the working tree.Review status, diff, and relevant untracked files.
commitProduce one coherent task commit.Review the latest task commit and leftover working-tree state.
commit_setProduce a small coherent set of task commits.Review the commit range and leftover working-tree state.

This is code-owned policy. Prompt overrides should not redefine review target semantics.

steps can contain phase steps and loop wrappers.

[
{
"loop": {
"steps": [
{"phase": "plan"},
{"phase": "validate_plan"}
],
"until": "validate_plan.approved",
"max_rounds": 2,
"round_extras_key": "plan_round"
}
},
{
"phase": "implement"
}
]
Step typeRole
PhaseStepOne registered phase invocation.
LoopStepRetry block around phase steps. Nested loops are not the public authoring path.

Common phase IDs:

plan
validate_plan
implement
review_changes
repair_changes
final_acceptance

Profiles may also use registered extension phases such as a compliance or audit phase when an embedder registers a handler.

{
"phase": "review_changes",
"execution": {
"mode": "linear",
"session_split": "per_role",
"session_continuity": "fresh_only"
},
"prompt": {
"role": "code_reviewer",
"task": "code_review",
"format": "terse"
},
"handoff": {
"type": "human_feedback_on_reject"
},
"quality_gates": [],
"cross": {
"scope": "project"
}
}
KeyMeaning
phaseRegistered phase name.
executionInvocation mode plus session policy.
skillOptional registered skill name for specialist routing.
effortOptional phase-level effort hint.
overridesRuntime or phase-specific overrides.
promptComposable prompt parts: role, task, format.
hypothesisOptional pre-plan hypothesis policy.
handoffOperator pause policy used by shipped profiles.
quality_gatesPhase-local gates and feedback routing.
crossProjection policy for cross-project mode.

execution can be a string or object. Shipped profiles use the object form.

{
"mode": "linear",
"session_split": "per_role",
"session_continuity": "loop_continue"
}
KeyValuesMeaning
modelinear plus registered plugin modesHow one phase step is invoked.
session_splitstateless, per_phase, per_role, commonSession scope across phases.
session_continuityfresh_only, loop_continue, same_zone_continueResume policy for repeated calls.
read_onlyreservedFuture fanout/review policy field.
joinreservedFuture fanout/review policy field.
surfacesreservedFuture fanout/review policy field.

Session split values:

ValueBehavior
statelessNo reusable physical runtime session.
per_phaseOne session per phase per run/runtime/model.
per_roleOne session per prompt role per run/runtime/model. Requires prompt.role.
commonOne session per run/runtime/model.

Session continuity values:

ValueBehavior
fresh_onlyAlways start fresh; use compact handoff for prior context.
loop_continueResume the phase’s prior session on round 2+ of the same loop.
same_zone_continueResume only for a same-write-zone follow-on such as implement to repair.

Implementation delivery is selected at profile or pipeline level. It is not a PhaseStep.execution.mode.

ModeMeaning
whole_planOne implement invocation consumes the plan.
subtask_dagImplement executes parsed plan subtasks as tracked delivery units.

subtask_dag is sequential today. It is a controlled subtask execution policy, not a promise of parallelism.

{
"loop": {
"steps": [
{"phase": "review_changes"},
{"phase": "repair_changes"}
],
"until": "review_changes.clean",
"max_rounds": 2,
"round_extras_key": "repair_round",
"oscillation_halt_after": null
}
}
KeyMeaning
stepsPhase steps executed inside the loop.
untilPredicate such as validate_plan.approved or review_changes.clean.
max_roundsAutomatic retry budget.
round_extras_keyMetadata key used to record loop round state.
oscillation_halt_afterOptional guard for repeated unstable loop behavior.

until reads phase log fields. not <phase>.<field> exits when the field is falsy.

Profiles choose prompt parts; the prompt engine resolves their content.

{
"prompt": {
"role": "systems_architect",
"task": "plan",
"format": "terse"
}
}
AxisExamplesMeaning
rolesystems_architect, plan_reviewer, implementation_engineer, code_reviewer, release_managerPersona and responsibility.
taskplan, validate_plan, implement, repair_changes, code_review, final_acceptanceProcedure for the phase.
formatterse, detailed, bullets, handoffOutput detail and shape.

Read Prompt engine for resolution order and protected contracts.

hypothesis is normally attached to a plan step.

{
"hypothesis": {
"attempts": 1,
"format": "compact"
}
}
KeyMeaning
attemptsNumber of pre-plan hypothesis attempts. 0 disables the prelude.
formatOptional hypothesis prompt format; otherwise inherits the plan format.

Shipped profiles use handoff to decide when a phase pauses with an operator decision.

{
"handoff": {
"type": "human_feedback_on_reject",
"repair_attempts": 1,
"on_exhausted": "auto_waiver"
}
}
KeyValuesMeaning
typehuman_bypass, human_feedback_on_reject, human_feedback_alwaysPause policy.
repair_attemptsintegerAutomatic substance-repair budget for implement subtasks before handoff/fallback.
on_exhaustedhalt, auto_waiverFallback after repair budget is spent.

Handoff type meanings:

TypeBehavior
human_bypassNever pause for this step.
human_feedback_on_rejectPause only after the final automatic round rejects or remains incomplete.
human_feedback_alwaysPause on every round for human decision.
{
"quality_gates": [
{
"name": "tests",
"kind": "computational",
"on_fail": "feed_into_next",
"feed_target": "last_test_output",
"config": {}
}
]
}
KeyValuesMeaning
nameregistered gate nameGate identifier.
kindcomputational, inferentialWhether the gate runs a concrete check or evaluates output.
on_failhalt, feed_into_next, trigger_replan, informationalFailure routing.
feed_targetstate/extras keyRequired when on_fail is feed_into_next.
configobjectGate-specific settings.

Quality gates are phase-local policy. Verification receipts are the durable proof surface. Read Verification receipts for the proof model.

Every step intended for orcho cross needs a cross annotation.

{
"cross": {
"scope": "global",
"handler": "cross_plan"
}
}
KeyValuesMeaning
scopeglobal, project, both, skipWhether the step runs at cross level, project level, both, or not at all.
handlercross_plan, cross_validate_planCross-level dispatcher. Required for global or both.

contract_check is not a step handler. The cross runner appends it as a terminal gate when the profile opts into cross gates.

Top-level cross_gates:

{
"cross_gates": {
"contract_check": {
"enabled": true,
"mode": "artifact_bundle",
"run": "always",
"on_skip": "block"
},
"cross_final_acceptance": {
"enabled": true,
"run": "always",
"on_skip": "block"
}
}
}
KeyValuesMeaning
enabledbooleanWhether the gate is active.
modeartifact_bundle for contract_checkGate input mode.
runalways, auto, manual_confirm, neverGate execution policy.
on_skipblock, allow_with_gap, allowRelease behavior when the gate is skipped.

Full-cycle delivery profiles opt into strict cross terminal gates. Focused and small-task profiles do not.

Profile-level worktree_isolation overrides the global worktree config. This is a policy setting, not only a filesystem setting: it decides what checkout workers may mutate and what checkout reviewers and receipts should treat as the subject.

ValueMeaning
offRun directly in the project checkout. Used by focused/current-diff profiles.
absentUse global worktree config, normally per_run.

Policy consequences:

PostureConsequence
per_run via global configAgents and verification work in a run-owned checkout; delivery back to the project is a later boundary.
offAgents and verification work directly in the project checkout; useful for review/audit/current-diff workflows but with less mutation isolation.

Resolution order is:

CLI override
> profile worktree_isolation
> worktree config

Read Workspace model for {project} vs {checkout} and Profiles and gates for the operator-facing policy model.

Local config can patch shipped profiles without copying the whole profile.

{
"profiles_v2": {
"feature": {
"_profile": {
"worktree_isolation": "off"
},
"review_changes": {
"handoff": {
"type": "human_feedback_always"
}
}
}
}
}
Overlay targetMeaning
_profileDeep-merge into the top-level profile object.
phase nameDeep-merge into the matching phase step.

Lists are replaced, not appended. To change quality_gates, restate the full list. If a phase name is missing or ambiguous inside the profile, loading fails.

Before creating or overriding a profile, answer:

  1. Is this a new work kind or only a local policy override?
  2. Which concrete phase graph does the run need?
  3. Which loop predicates prove readiness?
  4. Which handoff points need human control?
  5. Should implementation be whole_plan or subtask_dag?
  6. Should sessions be common, per_role, per_phase, or stateless?
  7. Which prompt role/task/format should each phase use?
  8. Which gates are phase-local feedback versus durable verification receipts?
  9. Should the profile work in cross-project mode?
  10. Should it run in a run-owned checkout or the project checkout?