Run the work
Epics, their stories and their tasks make up the work tree. You come here to ask the agent to create it, move it forward, pause it or close it, without touching the files yourself.
What you ask the agent
« Open an epic "Data export" in the Data zone. »
« Create a story "CSV export" in this epic and activate it. »
« Add three tasks to the story: the format, the button, the tests. »
« Set task TSK-02 of story 003 of epic 012 to in progress. »
« That is enough for today: pause the story, reason: we are waiting for the customer's answer. »
« Pick up story 003 again, yesterday's. »
« This story is done: close it, then close the epic. »
effortless_story_complete« Story 004 was replaced by 006: mark it as such. »
« Retire story 007: the feature is dropped. »
What the agent does
Create and activate an epic
effortless_epic_start: creates the epic in azone, with atitleand an optionaldescription. By default (activateset totrue) it becomes the active epic;activate: falsejust creates it.effortless_epic_activate: reactivates an existing epic (epic_id) without going through a story. It clears the active story. Replayed, it changes nothing.
Create and activate a story
effortless_story_start: creates the story in the active epic or inepic_id. Useful parameters:title,slug,zone,depends_on,objective,activate.kindisopale(default, with framing) orfix(direct fix, see Frame work with OPALE).taskless_reasonsays why a story will have no task (pure framing, milestone, decision).effortless_story_activate: activates an existing story (story_id) and reopens its epic if needed.effortless_story_objective: sets or corrects the story's objective, in one or two sentences. An empty string removes it.
Add tasks
effortless_task_add: adds a Todo task to the active story (or tostory_id). The agent can passdescription,phase,stack(the development standards that apply to it; a standard that does not exist is refused) and an optional routing classification (complexity,capability_tier,effort_level). The engine returns theTSK-NNidentifier.effortless_story_items: reads back a story's decisions, questions and tasks.
Move a task forward
effortless_task_update changes a task's status (Todo, Doing, Done, shown as To do, In progress, Done in the app), its title, its description and its result. It requires at least one field.
- Moving to In progress is refused while the story's framing is not complete, or while a task this one depends on is not done.
- When finishing a task, the agent fills in
result: what it produced, as observed (files, verbs, measurements). This text appears on the task's page in the Backlog.
Pause, resume, reloop
effortless_story_pause: pauses the story (the active one by default), dates the pause and releases the active story.reasonis mandatory. No task is touched.effortless_story_activateresumes it, and you find everything as it was left.effortless_story_reloop: sends the active story back to an earlier OPALE phase (target_phase).
Close, supersede, retire, archive
effortless_story_complete: closes the story. It must have at least one task, and all of them must be done.effortless_story_supersede: declares that the story (story_id) is replaced by another one in the same epic (by). It no longer blocks closing the epic and is not counted as delivered.effortless_story_retire: retires a not started story that will not be done, with its reason (reason, required). It no longer blocks closing the epic, can be archived, and is never counted as delivered; the register shows "retirée :" followed by the reason. The verb refuses a story with a task already done: close it, or declare it superseded.effortless_story_archive: archives a story that is already done, superseded or retired. The.effortless/crew_contracts/<epic>/<story>/folder of its contracts is destroyed. Replayed, it changes nothing.effortless_epic_complete: closes the epic (the active one by default). Every story must be done, superseded or retired. Closing resolves no evolution of the register: those still In progress are named in the reply (evolutions_maintained), and the agent asks you what to do with them (see Evolutions register).
What you get
- The work tree in the Backlog screen: epics, stories, tasks, with their phase and status. A story's page shows its objective; a task's page shows what it produced.
- The task in progress and the story's task counter on the Dashboard and in the Tasks screen.
- The same information rendered as Markdown in
blueprints/(for exampleblueprints/3-Backlog.md).
When the agent is refused
| Situation | What the refusal says | What to do |
|---|---|---|
No active story and no story_id passed | pilotage:noActiveStory | Pass epic_id and story_id, or activate a story. |
| Activating an epic without naming it | pilotage:epicActivateNeedsId | Name the epic; epic_start creates a new one. |
| Activating an unknown epic | pilotage:epicUnknownCannotActivate | Use epic_start to create one, or status to see the existing ones. |
| Activating an epic that is already closed | pilotage:epicDoneCannotActivate | Activate one of its stories: that reopens the epic. |
| Closing a story with no task | pilotage:storyNoTask | Declare the work with task_add before closing. |
| Closing a story with tasks not done | pilotage:storyTasksNotDone | Finish the tasks. |
| Closing an epic with stories not done | pilotage:epicStoriesNotDone | Close each story named by the refusal, or declare it superseded. |
| Pausing a story without a reason | pilotage:storyPauseNeedsReason | Pass reason. |
| Pausing a story that is already done | pilotage:storyDoneCannotPause | Reopen it with story_activate if the work resumes. |
| Unknown story | pilotage:storyUnknown | Read the existing stories again (story_items, project_tree). |
| Superseding a story by itself or by a story of another epic | pilotage:supersederInvalid | Pass in by another story of the same epic. |
| Superseding a story that is already closed | pilotage:storyAlreadyClosed | Nothing: a closed story stays closed. |
| Archiving a story that is not done | pilotage:storyNotDoneCannotArchive | Close it first. |
| Updating a task with no field | pilotage:taskUpdateEmpty | Pass at least status, title, description or result. |
| Task to In progress while the framing is unfinished | cadrage:phaseIncomplete | Provide the missing documents, or open a direct fix (kind: "fix"). |
| Task to In progress while a task it depends on is not done | refusal without a code, naming the dependency | Finish the dependency task first. |
Development standard in stack that does not exist | pilotage:nddUnknown | Pass the name of a standard present in .ai/ndd/. |