Skip to content

Team loop and routing ​

The analyst / developer / QA loop, routing tasks to models, provider profiles.

crew_init ​

effortless_crew_init — Stability: beta · project

Starts the CREW loop: three agent roles (analyst, senior developer, QA engineer) take turns on the OPALE pipe, while the calling agent orchestrates. Use when the user asks to "start the crew loop", "run the team on the current epic" or "open an evolutions workshop". In all scope, the cascade enters the workshop as soon as no epic is left to deliver and graduates one axis into the next epic, up to the max_epics cap. Gated (semi-auto).

💬 You ask your agent

« Start the team loop on the current epic with the goal "Ship the CSV export", with a maximum of 6 rounds. »

→ The agent callseffortless_crew_init
  • goal = Ship the CSV export
  • scope = epic
  • max_rounds = 6
NameTypeRequiredDescription
goalstringyesReadable goal of the loop, repeated in every role prompt. Required.
scopestringnoScope of the cascade: story, epic, all or workshop (default epic).
max_roundsintegernoMaximum number of acts; 0 means unlimited (default 100).
max_epicsintegernoMaximum number of epics processed; 0 means unlimited (default 3).
barobjectnoMechanical bar: object mapping a name (test, lint, typecheck, build) to a shell command, or to an object with command and optionally cwd or stack; at least one command is needed, otherwise the initialization is refused.
forcebooleannoIf true, overwrites an already initialized loop (default false).

crew_report ​

effortless_crew_report — Stability: beta · project

Reports the outcome of the act performed by a role, advances the crew loop and directly returns the next act. The reported role must be the one the stage expects, otherwise the report is refused without recording anything. payload_path is an escape hatch for a payload too large for payload — never the default route, and mutually exclusive with payload (both together are refused). ⚠️ This call can be long: the engine measures the mechanical bar itself (up to 4 commands, 600 s each) before handing back control — allow a generous call timeout on the client side. Gated (semi-auto).

💬 You ask your agent

« Here is the developer's report: verdict "done", the parser tests pass. Report it to the team loop. »

→ The agent callseffortless_crew_report
  • role = developer
  • verdict = done
  • summary = The parser tests pass.
NameTypeRequiredDescription
rolestringyesRole reporting: analyst, developer or qa; it must be the role the loop expects. Required.
verdictstringyesVerdict: go or no-go for qa, done for analyst and developer. Required.
summarystringyesCompact summary of the act, appended to the ledger. Required.
payloadobjectnoStructured output of the role as a JSON object (free form, specific to each role); mutually exclusive with payload_path.
payload_pathstringnoPath to a JSON file loaded as payload, for a payload too large to pass inline (4 MiB maximum); relative to the project, or absolute under it; mutually exclusive with payload.

crew_status ​

effortless_crew_status — Stability: beta · project

Crew loop state, read-only: current stage, expected role, epic/story/task pointer, counters, caps, stop reason (finished_reason: scope_covered, epics_exhausted, rounds_exhausted — null while the loop is still running) and timestamped ledger of acts. ⚠️ By default the ledger only returns the latest acts (older ones are announced in ledger_omitted): pass full=true for the complete trace. Advances nothing, writes nothing.

💬 You ask your agent

« Where is the team loop at? Which step and which role is it waiting for? »

→ The agent callseffortless_crew_status
NameTypeRequiredDescription
fullbooleannoIf true, returns the complete ledger instead of the latest acts only (default false; omitted acts are announced in ledger_omitted).

crew_step ​

effortless_crew_step — Stability: beta · project

Returns the contract of the crew loop's next act: which role must act, on which model and effort level, and which expected output. The contract text does NOT travel in the response: prompt_path gives its reference, a project-relative path to a JSON object with a single prompt key, to be read from disk before launching the sub-agent. document (optional) targets one specific framing document. Does NOT advance the state — called twice, it returns the same thing twice. ⚠️ This call is usually instant, but it can be slow at the qa stage: if the cached bar facts do not match the current act, the engine measures it on the fly (up to 4 commands, 600 s each). Allow a generous client-side call timeout. Gated (semi-auto).

💬 You ask your agent

« Advance the team loop by one step: give me the contract for the next act. »

→ The agent callseffortless_crew_step
NameTypeRequiredDescription
documentstringnoId of the one OPALE framing document targeted by this contract, for a parallel round with several documents (default: all documents expected for the phase, in a single block).

loop_init ​

effortless_loop_init — Stability: stable · project

Initializes the autonomous build loop (global goal). Gated execution tool (disabled in semi-auto).

💬 You ask your agent

« Initialize the autonomous build loop with the goal "ship the site module as version 1.4.1". »

→ The agent callseffortless_loop_init
  • goal = ship the site module as version 1.4.1
NameTypeRequiredDescription
goalstringyesGlobal goal of the autonomous loop. Required.

loop_step ​

effortless_loop_step — Stability: stable · project

Advances the state machine of the autonomous loop (Plan→Implementation→Acceptance→Delivery). Runs test_command at acceptance. Gated (semi-auto).

💬 You ask your agent

« Advance the autonomous loop by one step, and run `pnpm test` at the acceptance stage. »

→ The agent callseffortless_loop_step
  • test_command = pnpm test
NameTypeRequiredDescription
test_commandstringnoShell command run for the acceptance step (default: the test cycle of the model of the first declared stack; required if no stack exposes a test cycle).

provider_presets_list ​

effortless_provider_presets_list — Stability: stable · no project

Lists the provider presets (embedded + custom). Read-only.

💬 You ask your agent

« Which provider presets are available? »

No parameters.

provider_profile_init ​

effortless_provider_profile_init — Stability: stable · no project

(Re)generates the provider profile (tier×effort matrix) from a FAMILY preset, scope global|project. Does not overwrite without force=true. Returns a best-practices tip.

💬 You ask your agent

« Generate my global provider profile from the "anthropic" family preset. »

→ The agent callseffortless_provider_profile_init
  • family = anthropic
  • scope = global
NameTypeRequiredDescription
familystringyesPreset family: claude, codex, gemini, mistral, or a free-form name. Required.
scopestringnoScope of the profile: global (default) or project.
forcebooleannoIf true, overwrites an existing profile of this scope; default false refuses.

provider_profile_show ​

effortless_provider_profile_show — Stability: stable · no project

Active provider (LLM) profile of the user (~/.effortless). Read-only.

💬 You ask your agent

« Show me my active LLM provider profile. »

No parameters.

task_classify ​

effortless_task_classify — Stability: stable · story

Classifies a task of the active story on 1+ routing axes (complexity, capability_tier, effort_level). At least one axis required; returns the resolved routing recommendation.

💬 You ask your agent

« Classify task TSK-03 as high complexity, using a top-tier model. »

→ The agent callseffortless_task_classify
  • task_id = TSK-03
  • complexity = complex
  • capability_tier = deep
NameTypeRequiredDescription
task_idstringyesId of the task to classify (for example TSK-01). Required.
complexitystringnoComplexity axis: simple or complex; at least one axis is required.
capability_tierstringnoCapability tier axis: deep, standard or light; absent leaves it untouched.
effort_levelstringnoEffort level axis: low, medium or high; absent leaves it untouched.

task_route_show ​

effortless_task_route_show — Stability: stable · story

Resolved routing recommendation of a task: tier/effort → concrete capability (model + native effort) via the provider profile (project > global). Suggestion, never enforced.

💬 You ask your agent

« Which model and effort level do you recommend for task TSK-03? »

→ The agent callseffortless_task_route_show
  • task_id = TSK-03
NameTypeRequiredDescription
task_idstringyesId of the task whose routing recommendation is shown (for example TSK-01). Required.

Effortless — ArboRithm