Create a new invoke task accessible via dda inv <namespace>.<task-name>.
Instructions
Step 1: Gather information from the user
Use AskUserQuestion to collect the following. If $ARGUMENTS provides values, skip those questions.
Task name: The function name (e.g.
build,refresh_assets). Underscores become hyphens in the CLI.Namespace: Which task module does it belong to?
- Existing module — Add to an existing file in
tasks/(e.g.agent,linter,dogstatsd). Checktasks/__init__.pyfor the full list. - New module — Create a new
tasks/<name>.pyfile and register it.
- Existing module — Add to an existing file in
What does the task do?: Brief description (becomes the docstring / help text).
Parameters: What CLI flags does the task need? (name, type, default value, description)
Step 2: Read a reference
Read an existing task file matching the desired complexity:
- Simple task (no params):
tasks/auth.py - Task with params: Pick any task from
tasks/agent.pyortasks/linter.py - Registration:
tasks/__init__.py— to see how modules and tasks are registered
Step 3: Create the task
Add the @task decorated function to the appropriate file. Follow the patterns from Step 2.
Key rules:
- First parameter is always
ctx(the invokeContext) - Use
ctx.run("command")to execute shell commands - Docstring first line = short description shown in
dda inv --list - Import from
invoke:task,Exit(for errors),Context
Step 4: Register (new modules only)
If you created a new module file, edit tasks/__init__.py:
- Add the import in the
from tasks import (...)block (alphabetical order) - Register it:
- As a namespace (most common):
ns.add_collection(<module>)— createsdda inv <module>.<task> - As a root task:
ns.add_task(<task>)— createsdda inv <task>
- As a namespace (most common):
If adding to an existing module, no registration is needed — invoke auto-discovers @task functions.
Step 5: Verify
Test the task:
dda inv <namespace>.<task-name> --help
Usage
/create-invoke-task— Interactive: prompts for all details/create-invoke-task agent my-task— Pre-fills namespace and name