Joan Workflow
Joan is a workspace-based knowledge and task management system for AI-assisted development. This skill covers when and how to use Joan's core concepts.
Core Concepts
Workspaces
Workspaces are the top-level organizational unit in Joan. Each workspace contains:
Pods: Versioned domain knowledge documents
Todos: Tasks scoped to the workspace
Plans: Implementation specs linked to todos
Members: Team members with roles (admin, member)
Pods
Pods are versioned markdown documents containing domain knowledge. Use pods to:
Document project architecture and design decisions
Store domain-specific terminology and business rules
Share knowledge across team members and AI assistants
Maintain living documentation that evolves with the project
Pod lifecycle:
Create locally with
joan pod createEdit the markdown file in
.joan/pods/Push to server with
joan pod pushPull latest with
joan pod pull
Todos
Todos are tasks scoped to a workspace. Use todos to:
Track work items across team members
Assign tasks and set priorities
Link implementation plans to tasks
Todo workflow:
Create with
joan todo createList with
joan todo listUpdate status as work progresses
Archive when complete
Plans
Plans are implementation specs linked to todos. Use plans to:
Document how a feature will be implemented
Break down complex tasks into steps
Share implementation approach with team
CLI Commands Reference
Project Initialization
joan init # Interactive workspace selection
joan init -w <workspace-id> # Non-interactive with specific workspace
joan status # Show project and auth status
Pod Management
joan pod list # List tracked pods
joan pod list --all # List all workspace pods
joan pod add # Add workspace pods to project
joan pod create # Create new pod locally
joan pod pull # Pull pods from server
joan pod push # Push local pods to server
joan pod open # Open pod in browser
Todo Management
joan todo list # List todos for tracked pods
joan todo list --mine # List todos assigned to me
joan todo create # Create new todo
joan todo update <id> # Update todo fields
joan todo archive <id> # Archive completed todo
Plan Management
joan plan list <todo-id> # List plans for a todo
joan plan create <todo-id> # Create implementation plan
joan plan pull <todo-id> # Pull plans from server
joan plan push <todo-id> # Push plans to server
Context Generation
joan context claude # Generate CLAUDE.md with Joan context
When to Use What
Starting a New Project
Run
joan initto connect project to a workspaceSelect pods relevant to the project domain
Run
joan context claudeto inject context into CLAUDE.mdRead the generated pod references before coding
Before Coding a Feature
Check if relevant pods exist:
joan pod list --allAdd any missing pods:
joan pod addPull latest:
joan pod pullRead pods to understand domain context
After Completing Work
Consider if learnings should become a pod
Update or create todos to reflect progress
Push any local changes:
joan pod pushandjoan todo push
Documenting New Knowledge
Create a pod:
joan pod createWrite domain knowledge in markdown
Push to share:
joan pod pushUpdate CLAUDE.md context:
joan context claude
MCP Integration
Joan provides an MCP server at https://joan.land/mcp/joan with tools:
list_workspaces- List accessible workspaceslist_pods- List pods in a workspaceget_pod- Retrieve pod content
The MCP server uses OAuth 2.1 authentication. Authenticate via the CLI first with joan auth login.
Project Configuration
Joan stores project config in .joan/config.yaml:
workspace_id: <uuid>
tracked_pods:
- name: "Pod Name"
id: <uuid>
Pods are stored locally in .joan/pods/ as markdown files.
Best Practices
Pod Authoring
Use clear, descriptive titles
Include context about when the knowledge applies
Keep pods focused on a single domain concept
Update pods when knowledge evolves
Reference related pods when helpful
Todo Management
Create todos at the right granularity (not too big, not too small)
Link todos to relevant pods for context
Update status promptly to keep team informed
Archive completed todos to reduce noise
Context Synchronization
Run
joan context claudeafter changing tracked podsPull pods before starting significant work
Push changes promptly to share with team