74a52ba6a3
Introduce a scope-aware agent so the LLM never sees the full 21-tool
catalog at once. The system prompt now describes either:
- idle mode: core noyau (5 tools: set_language, set_path_for_folder,
list_folder, start_workflow, end_workflow) + a list of available
workflows with their goals;
- active mode: the noyau plus the tools declared by the active
workflow's YAML, with the step plan inlined into the prompt.
Pieces:
- alfred/agent/tools/workflow.py: start_workflow / end_workflow tools
(with YAML specs under tools/specs/) that drive memory.stm.workflow.
- alfred/agent/prompt.py: CORE_TOOLS constant, visible_tool_names(),
filtered build_tools_spec() / _format_tools_description(), and a new
_format_workflow_scope() section in the system prompt.
- alfred/agent/agent.py: WorkflowLoader wired into Agent, defensive
out-of-scope check in _execute_tool_call.
- alfred/agent/registry.py: registers the two new meta-tools (21 total,
7 with YAML spec).
- workflows/media.organize_media.yaml: tools/steps list refreshed to
match the current resolver split (analyze_release, probe_media,
resolve_*_destination, move_to_destination).
49 lines
1.7 KiB
YAML
49 lines
1.7 KiB
YAML
name: end_workflow
|
|
|
|
summary: >
|
|
Leave the current workflow scope and return to the broad-catalog mode.
|
|
|
|
description: |
|
|
Clears the active workflow from STM. After this call the visible tool
|
|
catalog returns to the core noyau plus start_workflow, so the agent is
|
|
ready to handle a different request.
|
|
|
|
when_to_use: |
|
|
- When all the workflow's steps have completed successfully.
|
|
- When the user explicitly cancels the current task.
|
|
- When the user changes subject mid-conversation and the active
|
|
workflow is no longer relevant.
|
|
- When an unrecoverable error makes continuing pointless — explain
|
|
in 'reason'.
|
|
|
|
when_not_to_use: |
|
|
- Do not call when there is no active workflow — it will return an
|
|
error. Just call start_workflow for the new request instead.
|
|
- Do not call mid-step just to "free up tools"; finish the step
|
|
or fail it explicitly first.
|
|
|
|
next_steps: |
|
|
- After ending, you can either call start_workflow for a new task or
|
|
answer the user directly from the broad catalog.
|
|
|
|
parameters:
|
|
reason:
|
|
description: Short reason for ending — completed, cancelled, changed_subject, error, ...
|
|
why_needed: |
|
|
Recorded in episodic memory for debugging and future audits. A
|
|
structured short string is more useful than a long sentence.
|
|
example: completed
|
|
|
|
returns:
|
|
ok:
|
|
description: Workflow ended; catalog is back to the broad noyau.
|
|
fields:
|
|
workflow: Name of the workflow that just ended.
|
|
reason: The reason that was passed in.
|
|
|
|
error:
|
|
description: Could not end — typically because nothing was active.
|
|
fields:
|
|
error: Short error code (no_active_workflow).
|
|
message: Human-readable explanation.
|