Skill: task-capture
Purpose
Provides minimal-friction task capture that processes natural language input into structured tasks. Focuses on SPEED over perfectionism - get it captured, refine later if needed.
Trigger Conditions
- •Slash command:
/capture [text] - •Natural phrases: ["I need to...", "remind me to...", "add task", "new todo", "capture this", "jag måste...", "lägg till uppgift", "fånga detta", "kom ihåg att...", "todo:", "task:"]
- •Auto-trigger: When user expresses something they need to do
Required Context (gather BEFORE starting workflow)
- •Active roles via
roles getActiveRoles→ returns Role[] for role inference - •Active projects via
projects getActiveProjects→ returns Project[] for project linking (optional)
How to gather context:
bash
# Get active roles (for role inference/selection) bun run src/aida-cli.ts roles getActiveRoles # Get active projects (optional, for project association) bun run src/aida-cli.ts projects getActiveProjects
Workflow Steps
Step 1: Parse Input
See PARSING-RULES.md for detailed parsing rules.
- •Action: Extract task title, deadline hints, role hints, project hints, energy hints, priority hints
- •Output to user: None (internal processing)
- •Wait for: Continue immediately
Step 2: Infer Role
See ROLE-INFERENCE.md for detailed inference rules.
- •Action: Match keywords, project context, or conversation context to determine role
- •Output to user: If ambiguous, ask "Vilken roll gäller detta?" with role options
- •Wait for: User selects role (only if ambiguous)
Step 3: Check for Duplicates (Optional)
- •Action: Search existing tasks via
tasks searchTasks "[parsed title]" - •Output to user: If similar task found, warn: "Det finns redan en liknande uppgift: [title]. Vill du lägga till ändå?"
- •Wait for: User confirms or cancels
Step 4: Create Task
- •Action: Create task via
tasks createTask {...} - •CLI call:
bash
bun run src/aida-cli.ts tasks createTask '{ "title": "[parsed title]", "role_id": [inferred/selected role id], "deadline": "[parsed date or null]", "priority": [0-3, default 0], "energy_requirement": "[low/medium/high or null]", "project_id": [associated project or null] }' - •Output to user: None yet
- •Wait for: Continue immediately
Step 5: Create Journal Entry
- •Action: Log capture via
journal createEntry {...} - •CLI call:
bash
bun run src/aida-cli.ts journal createEntry '{ "entry_type": "task", "content": "Fångade: [task title]", "related_task_id": [created task id] }' - •Output to user: None yet
- •Wait for: Continue immediately
Step 6: Confirm & Suggest Next Step
- •Output to user:
code
✅ Fångat: "[task title]" Roll: [role name] [Deadline: datum] (if set) Vill du göra något mer med den? (annars är den sparad i captured-status)
- •Optional follow-ups:
- •"Vill du sätta en deadline?"
- •"Ska vi aktivera den nu?" (triggers task-activation)
- •"Finns det fler saker att fånga?"
- •Wait for: User input (optional)
Output Format
- •Language: Swedish (default)
- •Style: Quick confirmation, minimal text
- •Confirmation: Always show captured task with role and deadline (if set)
Example output:
code
✅ Fångat: "Ringa tandläkaren" Roll: Förälder Sparad! Något mer?
Example with deadline:
code
✅ Fångat: "Skicka rapporten till chefen" Roll: Systemutvecklare Deadline: 2025-12-20 Sparad med deadline! 📅
Error Handling
- •If
roles getActiveRolesreturns empty: Show error "Inga roller finns. Du behöver skapa roller först via profile-management." - •If role inference fails and no clarification: Use first active role as default and inform user "Sparad i [role name]. Om det är fel roll kan du ändra senare."
- •If
tasks createTaskfails: Show error message with details, ask user if they want to retry - •If
journal createEntryfails: Task is still created, just log warning to console and continue - •If duplicate task found: Warn user and ask for confirmation before proceeding
- •If project not found: Ignore project_id and create task without project association
Anti-patterns
- •NEVER create task without role_id - always infer or ask for role
- •NEVER use non-existent project_id - validate project exists before associating
- •NEVER over-ask - infer as much as possible, only ask if truly ambiguous
- •NEVER force all fields - capture with minimal info, user can refine later
- •NEVER modify existing tasks - only create new ones
- •NEVER change task status - tasks are created with status='captured'
- •NEVER use direct SQL - always use aida-cli.ts
- •NEVER run query modules directly (e.g.,
bun run src/database/queries/tasks.ts)
Tool Contract
Allowed CLI Operations:
- •tasks: createTask, searchTasks (duplicate check)
- •roles: getActiveRoles, getRoleById (READ ONLY)
- •projects: searchProjects, getActiveProjects (READ ONLY)
- •journal: createEntry (type: task)
Forbidden Operations:
- •Updating existing tasks
- •Changing task status
- •Deleting tasks
- •Any profile operations
- •Any plan operations
Default Task Values:
- •status:
captured - •priority: inferred or null
- •energy_requirement: inferred or null
File Access:
- •No file reads needed
- •No file writes - All operations via CLI
Supporting Documentation
- •PARSING-RULES.md - How to parse natural language input
- •ROLE-INFERENCE.md - Rules for inferring roles
- •QUICK-CAPTURE.md - Minimal-friction capture flow
Design Principles
- •Speed over perfection - Capture now, refine later
- •Minimal questions - Infer as much as possible
- •Non-blocking - Don't force user to fill in all fields
- •Confirm, don't interrogate - Show what was captured, offer to adjust