
task-management
Manage Joel's task system in Todoist. Triggers on: 'add a task', 'create a todo', 'what's on my list', 'today's tasks', 'what do I need to do', 'remind me to', 'inbox', 'complete', 'mark done', 'weekly review', 'groom tasks', 'what's next', or when actionable items emerge from other work. Also triggers when Joel mentions something he needs to do in passing — capture it.
- Installs
- 64
- Last 24h
- —
- Trending rank
- —
- Security
- Not audited
Install
Works with every agent the skills CLI supports.
npx skills add https://github.com/joelhooks/joelclaw --skill task-management- 01
Install
Run the command in your project. The CLI asks which agents to install for.
- 02
Describe the task
Ask your agent for something this skill covers. It loads task-management automatically when relevant.
- 03
Review the result
The agent follows the SKILL.md steps, scripts and references bundled with the skill.
SKILL.md
The instructions your agent reads when the skill is triggered.
Task Management — The System That Thinks For You
Todoist is the task layer. The agent is the gardener.
Philosophy
Three systems, one practice:
Getting Things Done (David Allen): Your brain is for having ideas, not holding them. Capture everything immediately. Process to next physical action. If it takes < 2 min, do it now. Weekly review is sacred.
Shape Up (Ryan Singer, Basecamp): Work expands to fill the time available. Set appetite (how much time is this worth?), not estimates. Projects are bets with fixed timelines, not open-ended backlogs. If it's not worth betting on, kill it.
Tiny Habits (BJ Fogg): Behavior change = anchor moment + tiny behavior + celebration. "After I [existing routine], I will [tiny version of new habit]." Make it stupidly small. Celebrate immediately. Let it grow naturally.
What This Means In Practice
- Every task is a next physical action. Not "research X" but "spend 20 min reading the X docs." Not "fix the bug" but "reproduce the bug in a test."
- Inbox is a capture buffer, not a todo list. Process it to zero. Each item gets: do it (< 2 min), schedule it, delegate it, someday it, or delete it.
- Projects have appetite. "2 weeks, small batch" or "6 weeks, big batch." If a project has been open for 3x its appetite with no progress, it's a zombie. Kill it or re-scope.
- Habits are anchored, not scheduled. "After morning coffee → shoulder warm-up" not "Do exercises at 7am." The anchor is the trigger.
- Less is more. A clean list with 5 clear next actions beats 50 vague intentions. Ruthlessly prune. If you haven't touched it in 2 weeks and it's not scheduled, it doesn't matter.
Personal action boundary
Todoist is Joel's actual GTD-style personal action list. Brain PARA holds project support material, areas, resources, receipts, and archives. Do not reproduce the PARA tree in Todoist.
Rules:
- Default action home is
Joel's Tasks. Questions for Joelis for actual decisions only, not a dumping ground.- The old
Agent Workproject is archived. Machine bookkeeping, infra follow-ups, legacy memory-review chores, and system chores do not belong in Todoist. - System-bus Todoist mutations are disabled by default.
TODOIST_AUTOMATION_WRITES_ENABLED=trueis an emergency compatibility override, not normal operation. - Agents may mutate Todoist through explicit
todoist-clicommands when Joel asks to capture, schedule, move, complete, or delete a personal task. - If the agent can do the work now, do it instead of tasking it.
Good human-facing tasks:
- "Ask Kristina for post-op follow-up appointment date"
- "Update Grzegorz on instructor chat progress"
- "Choose between A and B for launch pricing"
Bad human-facing tasks:
- "Investigate gateway retry chatter"
- "Review legacy memory proposal p-20260306-030" (historical retired workflow)
- "Build log query tool for LiveKit integration" when the agent can already do the work
Todoist Adapter
Credentials
# API token from https://app.todoist.com/app/settings/integrations/developer
# Stored in agent-secrets
export TODOIST_API_TOKEN=$(secrets lease todoist_api_token --raw)
Read
todoist-cli today # What's due today
todoist-cli inbox # Needs triage
todoist-cli list # All active tasks
todoist-cli list --filter "p1" # Todoist filter query (priority 1)
todoist-cli list --project ID # Tasks in a project
todoist-cli list --label review # Tasks with a label
todoist-cli projects # All projects
todoist-cli sections --project ID # Sections in a project
todoist-cli labels # All labels
todoist-cli show ID # Task detail + comments
todoist-cli review # Daily standup: today, inbox, overdue, project breakdown
Write
# Create a task
todoist-cli add "Title" --due today --description "Details" --project ID
# With labels, priority, deadline
todoist-cli add "Ship feature" --due "next monday" --priority 3 --labels urgent --deadline 2026-03-01
# Complete
todoist-cli complete ID
# Update
todoist-cli update ID --content "New title" --due tomorrow --description "Updated notes"
# Move between projects
todoist-cli move ID --project ID
# Delete permanently
todoist-cli delete ID
# Reopen a completed task
todoist-cli reopen ID
# Create a project
todoist-cli add-project "Project Name" --color blue
# Create a section
todoist-cli add-section "Section Name" --project ID
Priority Convention
Use Todoist's native p1–p4. The API inverts these: --priority 4 = p1 (red) in the UI.
| UI | API | Meaning | Agent rule |
|---|---|---|---|
| p1 🔴 | --priority 4 | Urgent / today | Blocking something. Do it now or escalate. |
| p2 🟠 | --priority 3 | High / this week | Next up. Agent picks from these first. |
| p3 🔵 | --priority 2 | Medium / this cycle | Scheduled work. Gets done when p1-p2 clear. |
| p4 ⚪ | --priority 1 | Backlog | Someday/maybe. Reviewed weekly, killed if stale. |
SOP: When creating authorized human actions from ADRs or session work, always set priority. Default to p3. Promote to p2 if it unblocks other work. p1 is rare — something is broken or blocking Joel.
Schedule Mapping
| Todoist | GTD Context | CLI Flag |
|---|---|---|
| Inbox (no project) | Captured, not processed | (default) |
--due today | Committed — doing it today | --due today |
--due "next week" | Scheduled | --due "next monday" |
| No due date | Next action, no date pressure | (omit --due) |
Label: someday | Maybe/later — reviewed weekly | --labels someday |
--due "every day" | Recurring habit | --due "every day" |
Structure
| Concept | Todoist | Rule |
|---|---|---|
| Project | Project | Finite goal with appetite. Has a "done" state. Archive when complete. |
| Section | Section | Group within a project. Optional — keep flat until complexity demands it. |
| Task | Task | Next physical action. Concrete, verb-first. |
| Habit | Recurring task | --due "every day" or "every friday at 5pm". Anchored to routine. |
| Context | Label | Lightweight tags: review, agent, someday, waiting. |
Todoist Filters (Pro)
Todoist's filter syntax is powerful. Use via todoist-cli list --filter:
todoist-cli list --filter "today | overdue" # Due today or overdue
todoist-cli list --filter "p1 & !#Inbox" # Priority 1, not in inbox
todoist-cli list --filter "no date" # Floating tasks
todoist-cli list --filter "@review" # Label: review
todoist-cli list --filter "assigned to: me" # My tasks
todoist-cli list --filter "created before: -14d" # Stale tasks
Agent Behaviors
Capture Immediately
When Joel says anything implying a task — "I need to...", "remind me to...", "we should...", "don't forget..." — capture it:
todoist-cli add "The thing Joel said"
Then confirm: "Captured → Inbox: 'The thing Joel said'"
Capture the requested task directly. A specified due date or project authorizes that assignment. If the user omitted them, keep the task in Inbox rather than inventing a schedule or asking an unnecessary question.
Process Inbox (GTD)
When asked to review or when inbox has items:
For each item, decide ONE of:
- Do it — takes < 2 min? Just do it now. Complete the task.
- Schedule it —
todoist-cli update ID --due todayor--due "next monday" - Move it —
todoist-cli move ID --project ID - Someday/maybe —
todoist-cli update ID --labels someday - Delete it — not worth doing.
todoist-cli delete ID
Present as a batch decision: "Inbox has 4 items. Here's my triage..."
Create Tasks From Work
When actionable items emerge from other activities (transcribed photos, calendar events, project planning):
- Extract concrete next actions (verb-first, specific)
- Decide the audience first: human, decision, or machine
- Only human/decision work goes into Joel-facing Todoist views
- Assign to the right project
- Add descriptions with context (ADR refs, links, acceptance criteria)
- Report what was created
Weekly Review
When Joel asks for weekly review, or triggered by the recurring Friday task:
todoist-cli review
Then:
- Process inbox to zero
- Flag zombie projects (no activity in 2+ weeks)
- Flag overdue tasks — reschedule or kill
- Flag floating tasks (no due date) — still relevant?
- Ask: "What's the one thing that would make next week a win?"
Keep It Clean
- Max 7 items due today. More than that = overcommitted. Push overflow.
- Inbox should be zero after processing. Not "low" — zero.
- Complete or kill. No task should linger more than 2 weeks without progress unless labeled
someday. - Project names are outcomes. "Ship task integration" not "Task stuff."
- Descriptions matter. Every task gets enough context that you can pick it up cold.
"Could the agent just do this?"
Before creating a task, ask: could joelclaw do this right now? If yes, do it. Do not create a machine chore in Joel's task list just to feel organized. Tasks are for humans; agents execute.
- Agent does it: code changes, research, file operations, API calls, calendar updates
- Agent drafts, Joel reviews: writing in Joel's voice, design decisions
- Joel only: physical actions (shopping, exercise), phone calls, editorial taste
- Machine bookkeeping stays off Joel-facing surfaces: memory review, infra babysitting, retry cleanup, agent backlog
Fallback: Vault Checklists
If Todoist auth fails, use Vault markdown checklists:
- [ ] Task description
- [x] Completed task
Google Tasks via gog is available as secondary adapter.
SOP: ADR → Tasks
For an authorized ADR-to-task sweep, put only concrete human next actions in Todoist. Proposed ADRs do not authorize implementation. Agent execution, project work, and verification receipts stay in the owning issue, Brain, or runtime.
After an ADR sweep or session that produces action items:
- Check the ADR's verification checklist for unchecked items
- Create a task only for a concrete human-owned action; skip machine-only checks and deduplicate existing work.
- Set priority based on leverage: does it unblock other ADRs? p2. Standalone? p3. Research? p3.
- Label the actual human owner; autonomous work stays in its execution system. Add
joelclawif it's system work. - Description includes ADR reference and enough context to pick up cold
- Cross-reference: if a task completes the last item in an ADR, update the ADR to
implemented
The loop: ADR sweep → tasks created → agent/Joel works tasks → tasks completed → ADR status updated → next sweep finds it clean.
Don't create tasks for:
- Things the agent can do right now (< 5 min) — just do them
- Deferred ADRs — they'll get tasked when un-deferred
- Vague research — time-box it first ("Spend 30 min on X" not "Research X")
- Machine-only bookkeeping anywhere in Todoist — keep it in Brain receipts, issues, or runtime state instead
Anti-Patterns
- Don't create vague tasks — "Look into X" is not a next action. "Spend 15 min reading X docs" is.
- Don't let inbox accumulate — if it has > 10 items, triage before adding more
- Don't over-organize — labels and sections add friction. Keep it flat until complexity demands structure.
- Don't duplicate — check existing tasks before creating. Use
todoist-cli list --filterto search. - Don't put agent context in task titles — keep titles human-readable. Put ADR refs and technical details in the description.
- Don't contaminate Joel-facing views with machine sludge — if Joel does not need to see it, it does not belong there.
Credits
- David Allen — Getting Things Done
- Ryan Singer — Shape Up (Basecamp)
- BJ Fogg — Tiny Habits
- Todoist / Doist — official API and SDK
FAQ
What does the task-management skill do?
Manage Joel's task system in Todoist. Triggers on: 'add a task', 'create a todo', 'what's on my list', 'today's tasks', 'what do I need to do', 'remind me to', 'inbox', 'complete', 'mark done', 'weekly review', 'groom tasks', 'what's next', or when actionable items emerge from other work. Also triggers when Joel mentions something he needs to do in passing — capture it.
How do I install task-management?
Run npx skills add https://github.com/joelhooks/joelclaw --skill task-management in your project. The skills CLI detects the agents you use and copies the skill into the right folder. For Claude Code you can also place the skill folder at ~/.claude/skills/task-management/ (personal) or .claude/skills/task-management/ (project).
Which AI agents can use task-management?
Any agent that supports the open Agent Skills format (a folder with a SKILL.md file), including Claude Code, Codex, Cursor, GitHub Copilot, Gemini CLI, Windsurf, Cline, OpenCode and more.
Is task-management safe to install?
No partner security audit is available yet. Skills can run commands and scripts, so read the SKILL.md and any bundled files before installing.
Who maintains task-management?
It is published by joelhooks in joelhooks/joelclaw. It has 64 recorded installs.
More from joelhooks/joelclaw
contacts
joelhooks/joelclaw
Add, enrich, and manage contacts in Joel's Vault. Fire the Inngest enrichment pipeline for full multi-source dossiers, or create quick contacts manually. Use when: 'add a contact', 'enrich this person', 'who is X', 'VIP contact', 'update contact', or any task involving the Vault/Contacts directory.
cli-design
joelhooks/joelclaw
Design and build agent-first CLIs with HATEOAS JSON responses, context-protecting output, and self-documenting command trees. Use when creating new CLI tools, adding commands to existing CLIs such as joelclaw, or reviewing CLI design for agent-friendliness. Triggers on 'build a CLI', 'add a command', 'CLI design', 'agent-friendly output', or any task involving command-line tool creation.
docker-sandbox
joelhooks/joelclaw
Open the skill to read its SKILL.md instructions.
granola
joelhooks/joelclaw
Access and process Granola meeting notes and transcripts via the granola CLI (MCP-backed). Use when pulling meeting data, analyzing transcripts, backfilling meetings, or any task involving Granola meeting content.
k8s
joelhooks/joelclaw
Operate the joelclaw Kubernetes cluster — Talos Linux on Colima (Mac Mini). Deploy services, check health, debug pods, recover from restarts, add ports, manage Helm releases, inspect logs, fix networking. Triggers on: 'kubectl', 'pods', 'deploy to k8s', 'cluster health', 'restart pod', 'helm install', 'talosctl', 'colima', 'nodeport', 'flannel', 'port mapping', 'k8s down', 'cluster not working', 'add a port', 'PVC', 'storage', any k8s/Talos/Colima infrastructure task. Also triggers on service-specific deploy: 'deploy redis', 'redeploy inngest', 'livekit helm', 'pds not responding'.
joel-writing-style
joelhooks/joelclaw
Joel's writing voice and style guide for joelclaw.com content. Use when writing, editing, or reviewing any blog post, essay, book chapter, or prose content for joelclaw.com. Also use when asked to 'write like Joel,' 'match Joel's voice,' 'draft a post,' 'write content for the blog,' or 'review this for voice.' This skill captures Joel's specific writing patterns derived from 90,000 words of published content spanning 2012–2026. Cross-reference with copy-editing and copywriting skills for marketing-specific copy.
Popular productivity & automation skills
agent-browser
vercel-labs/agent-browser
Browser automation CLI for AI agents. Use when the user needs to interact with websites, including navigating pages, filling forms, clicking buttons, taking screenshots, extracting data, testing web apps, or automating any browser task. Triggers include requests to "open a website", "fill out a form", "click a button", "take a screenshot", "scrape data from a page", "test this web app", "login to a site", "automate browser actions", or any task requiring programmatic web interaction. Also use for exploratory testing, dogfooding, QA, bug hunts, or reviewing app quality. Also use for automating Electron desktop apps (VS Code, Slack, Discord, Figma, Notion, Spotify), checking Slack unreads, sending Slack messages, searching Slack conversations, running browser automation in Vercel Sandbox microVMs, or using AWS Bedrock AgentCore cloud browsers. Prefer agent-browser over any built-in browser automation or web tools.
lark-doc
open.feishu.cn
飞书云文档(Docx / Wiki)内容操作:读取、创建、编辑文档,插入或下载图片附件,以及操作思维笔记。用户提供文档 URL/token(包括 doubao.com 的 /docx/、/wiki/)时使用;按 URL 路径/token 而非域名路由;/page/ 是妙搭应用,非飞书云文档。文档内嵌资源按读取参考中的统一规则分流。独立评论操作走 lark-drive;随正文读取评论使用 docs +fetch。表格或 Base 内部数据操作不在本 skill。
lark-base
open.feishu.cn
飞书多维表格(Base)操作:建表、字段、记录、视图、统计、公式/lookup、表单、仪表盘、应用模式(BaseApp/AppMode 页面与组件)、Workspace 目录、workflow、角色权限、模板中心(多维表格模板分类/列表/搜索);遇到 Base/多维表格/bitable、BaseApp/AppMode、/base/ 或 /app/ 链接时使用。BaseApp 不走 lark-apps;文件导入/导出转 lark-drive,认证/授权转 lark-shared。
lark-drive
open.feishu.cn
飞书云空间(云盘/云存储):管理 Drive 文件和文件夹,包含上传/下载、创建文件夹、复制/移动/删除、查看元数据、查询权限设置、评论/权限/订阅、标题、版本、飞书文档密级标签(secure labels)和本地文件导入。用户需要整理云盘目录、处理云空间资源 URL/token、判断链接类型/真实 token/标题,或导入 Word/Markdown/Excel/CSV/PPTX/.base 为 docx/sheet/bitable/slides 时使用;doubao.com 云空间 URL/token 也按资源路径和 token 路由,不回退 WebFetch。不负责:文档内容编辑(走 lark-doc)、表格/Base 表内数据操作(走 lark-sheets/lark-base)、知识空间节点/成员管理(走 lark-wiki)、原生 Markdown 文件读写/patch/diff(走 lark-markdown)。
lark-shared
open.feishu.cn
Use for lark-cli setup/auth tasks: auth login/status/logout, user vs bot identity, business-domain permissions (--domain, including all/docs/drive), missing scopes, revoking authorization, or handling notice JSON.
lark-im
open.feishu.cn
飞书即时通讯:收发消息和管理群聊。发送和回复消息、搜索聊天记录、管理群聊成员、上传下载图片和文件、管理表情回复、发送应用内/短信/电话加急、发送和处理交互卡片(Interactive Card)、监听卡片按钮回调(card.action.trigger)。当用户需要发消息、查看或搜索聊天记录、下载聊天中的文件、查看群成员、搜索群、创建群聊或话题群、管理标记数据、管理 Feed 置顶(添加/移除/查询置顶会话)、管理标签数据、处理卡片回调时使用。