Teresa Torres's Claude Code Task System
Table of content

Teresa Torres is a product discovery coach who has trained over 15,000 product professionals through her Product Talk Academy. She wrote Continuous Discovery Habits, which has sold over 135,000 copies and introduced concepts like the opportunity solution tree and product trios to product teams worldwide. Before coaching, she led product and design teams at startups including AfterCollege and Affinity Circles.
Torres runs her entire business through two Claude Code terminals and Obsidian. Every morning she types /today and Claude generates her personalized to-do list, research summaries, and team updates.
Context Layers
Torres organizes Claude’s knowledge in three layers:
| Layer | Location | Purpose |
|---|---|---|
| Global | ~/.claude/CLAUDE.md | Identity, tone, universal rules |
| Project | .claude/CLAUDE.md | Project-specific context |
| Reference | .claude/context/ | Documents Claude can search |
Global context example:
# CLAUDE.md (Global)
You are Teresa's executive assistant and thought partner.
## Communication Style
- Direct, no fluff
- Challenge assumptions when you see weak reasoning
- Ask clarifying questions before starting complex tasks
## Key Projects
- [Product Talk](https://www.producttalk.org/) blog
- [Continuous Discovery](https://www.producttalk.org/getting-started-with-discovery/) courses
- Podcast production
## Tools I Use
- Obsidian for notes (vault at ~/Documents/Obsidian)
- Calendar via Google
- Task files in markdown format
The /today Command
Custom slash command that builds the daily agenda:
.claude/commands/today.md
# today
Run the Python script at ~/.claude/scripts/daily_summary.py
This script:
1. Scans task files in ~/Documents/Obsidian/Tasks/
2. Filters for due_date <= today OR overdue
3. Checks research feed for new papers
4. Generates daily-YYYY-MM-DD.md in Tasks folder
After running, summarize:
- Top 3 priorities for today
- Any overdue items that need attention
- New research worth reviewing
The Python script:
# ~/.claude/scripts/daily_summary.py
import os
from datetime import date
from pathlib import Path
TASKS_DIR = Path.home() / "Documents/Obsidian/Tasks"
def get_due_tasks():
tasks = []
for f in TASKS_DIR.glob("*.md"):
content = f.read_text()
# Parse YAML frontmatter for due_date
# Filter for today or overdue
# ... implementation details
return tasks
def generate_daily_summary():
tasks = get_due_tasks()
today = date.today().isoformat()
output = f"# Daily Summary: {today}\n\n"
output += "## Due Today\n"
for task in tasks:
output += f"- [ ] {task['title']}\n"
# Write to file
(TASKS_DIR / f"daily-{today}.md").write_text(output)
if __name__ == "__main__":
generate_daily_summary()
Usage:
# Every morning
claude
> /today
# Claude runs script, reads output, summarizes
# "You have 4 tasks due today. Top priority is
# finishing the podcast outline. 2 items are
# overdue from last week..."
Task Files as Markdown
Markdown replaces Trello for version control and searchability:
# ~/Documents/Obsidian/Tasks/podcast-episode-47.md
---
title: Record Podcast Episode 47
due_date: 2026-01-22
tags: [podcast, recording]
priority: high
status: in_progress
---
## Goal
Interview with [Guest Name] about [continuous discovery](https://www.producttalk.org/getting-started-with-discovery/) in enterprise
## Prep Tasks
- [ ] Review guest's recent articles
- [ ] Draft 10 questions
- [ ] Test recording setup
## Notes
- Guest prefers morning calls
- Focus on enterprise scaling challenges
Why markdown:
- Full text search via Obsidian
- Version control with git
- Claude can read and update directly
- No vendor lock-in
- Works offline
Natural Language Task Creation
> I need to review the Q1 metrics report by Friday,
> it's high priority and relates to the course launch
# Claude creates:
# ~/Documents/Obsidian/Tasks/review-q1-metrics.md
# With proper frontmatter, due date, tags
Claude parses natural language and creates the formatted file automatically.
Automated Research Pipeline
A custom plugin fetches academic papers daily:
.claude/plugins/research-feed/
manifest.json
scripts/
fetch_arxiv.py
fetch_scholar.py
prompts/
summarize_paper.md
Daily automation:
- Python scripts query arXiv and Google Scholar
- Filter by Torres’s research topics
- Download abstracts to
~/Documents/Obsidian/Research/Inbox/ /todaycommand includes new papers in summary
> /today
# Output includes:
# "3 new papers in your research inbox:
# 1. 'Continuous Discovery in Agile Teams' - directly relevant
# 2. 'User Interview Techniques' - worth skimming
# 3. 'Enterprise Product Management' - save for later"
Two-Terminal Workflow
Torres runs two Claude Code windows:
| Terminal 1 | Terminal 2 |
|---|---|
| Tasks and questions | Writing and deep work |
One for reactive work, one for proactive. Simple mental model.
Writing Partner Mode
For blog posts, Claude challenges reasoning before drafting:
> /plan
> I want to write about why [product trios](https://www.producttalk.org/product-trios/) fail.
> My main argument is misaligned incentives.
> Help me structure this.
# Claude asks clarifying questions,
# proposes outline, then drafts sections
Access Risk Framework
| Tier | Access Type | Risk Level |
|---|---|---|
| 1 | Read local files | Low |
| 2 | Search the web | Low |
| 3 | Write/edit files | Medium |
| 4 | Execute code | Medium |
| 5 | Install packages | High |
| 6 | Access external APIs | High |
| 7 | Third-party MCP servers | Highest |
Her rules:
- Tiers 1-2: Allow freely
- Tiers 3-4: Review changes before committing
- Tiers 5-7: Explicit approval each time
# In .claude/settings.json
{
"permissions": {
"file_write": "ask",
"bash_execute": "ask",
"package_install": "deny",
"mcp_servers": ["obsidian-local"]
}
}
SEO and Content
For blog posts, Claude handles keyword research and meta optimization:
> I've drafted this post about [product trios](https://www.producttalk.org/product-trios/).
> Research keywords, suggest a title, and
> write the meta description.
# Claude searches keywords, analyzes competing
# content, suggests title variants, writes meta
Getting Started
# Install Obsidian, create vault
mkdir -p ~/Documents/Obsidian/Tasks
# Create first task file
cat > ~/Documents/Obsidian/Tasks/example-task.md << 'EOF'
---
title: Try Claude Code task system
due_date: 2026-01-22
priority: high
status: pending
---
## Goal
Set up basic task management with Claude Code
EOF
# Create today command
mkdir -p ~/.claude/commands
cat > ~/.claude/commands/today.md << 'EOF'
# today
List all markdown files in ~/Documents/Obsidian/Tasks/
that have due_date of today or earlier.
Summarize as a prioritized list.
EOF
# Try it
claude
> /today
Next steps:
- Add more task files as you work
- Create natural language task addition prompt
- Add research feeds when ready
- Expand to writing workflows
Next: Artur Piszek’s WordPress Personal OS
Get updates
New guides, workflows, and AI patterns. No spam.
Thank you! You're on the list.