Obsidian writing workflows plugin for Claude Code.
A structured 4-stage workflow system for writing projects in Obsidian with Claude Code:
- Plan - Organize thoughts and define scope
- Work - Create and refine content
- Review - Quality check against style guides
- Compound - Capture learnings for future reference
- Claude Code CLI installed
- Obsidian vault
/plugin marketplace add andromedarabbit/obsidian-workflows
/plugin install obsidian-workflows@andromedarabbit# From within Claude Code session
claude --plugin-dir /path/to/obsidian-workflows
# Example: if you cloned to ~/projects/obsidian-workflows
claude --plugin-dir ~/projects/obsidian-workflowsnpx skills add git@github.com:andromedarabbit/obsidian-workflows.gitcd /path/to/your/obsidian-vault
git clone https://github.com/andromedarabbit/obsidian-workflows.git .claudeSee the official Claude Skills documentation for more details.
Create writing-config.md in your Obsidian vault root:
source_paths:
- .
policy_dir: Workflows/policy
enabled_policies:
- daily-note
default_policy: daily-note
proposal_policy_allowlist:
- daily-note
daily_notes_path: Daily Notes
daily_note_template: 템플릿/Daily.md
note_creation_engine: obsidian
templater_required: true
fallback_recent_files_limit: 5
draft_path: Workflows/Drafts
final_path: Workflows/Notes
proposal_path: Workflows/Proposals/passive-proposalsPolicy resolution is config-driven: policy is valid only when it is included in enabled_policies and policy_dir/writing-policy.<policy>.md exists.
config/writing-config.example.md- Example vault configurationassets/Workflows/SOUL.md- Writing style template assetassets/Workflows/policy/writing-policy.*.md- Policy templates (config-driven)
Plan your writing workflow before execution.
Modes:
- Active mode: Interactive planning with Claude
- Passive mode: Claude analyzes notes and suggests a plan
Usage:
/obsidian-workflows:ow-plan [--intent active|passive] [topic=...] [policy=<policy-name>]Examples:
/obsidian-workflows:ow-plan
/obsidian-workflows:ow-plan --intent passive
/obsidian-workflows:ow-plan --intent active topic="Daily operations summary" policy=daily-noteWhen --intent is omitted, the command defaults to passive mode. If your config uses external_tools.auto_use: ask, you may still see an external-tool usage prompt, but not an intent-selection prompt.
Daily-note behavior is policy-driven. With source_strategy: previous-note, it reads the previous daily note from daily_notes_path. If previous note is missing and policy requires missing_source_behavior: skip-and-prompt-recent, it returns SKIP and suggests up to fallback_recent_files_limit recent files for manual selection.
Execute writing tasks and create content.
Modes:
- Active mode: Collaborative writing with suggestions
- Passive mode: Claude writes based on plan and sources
- Draft mode: Create initial draft
- Refine mode: Improve existing draft
- Route mode: Determine next workflow step
Usage:
/obsidian-workflows:ow-work [mode=<active|passive|draft|refine|route>] [args...]Examples:
/obsidian-workflows:ow-work
/obsidian-workflows:ow-work proposal="Workflows/Proposals/passive-proposals/proposal-2026-03-03.md" idea=1
/obsidian-workflows:ow-work mode=active policy=daily-noteReview content quality against style guide and policies.
Checks:
- Policy compliance (
Workflows/policy/writing-policy.<policy>.md) - Style consistency (
Workflows/SOUL.md) - Grammar, clarity, structure, technical accuracy
Usage:
/obsidian-workflows:ow-review [file or draft reference]Example:
/obsidian-workflows:ow-review drafts/k8s-operators.mdCapture learning points from completed work.
Purpose:
- Document solutions to problems
- Extract reusable patterns
- Build institutional knowledge
- Create reference material
Usage:
/obsidian-workflows:ow-compound [completed work reference]Example:
/obsidian-workflows:ow-compound finals/k8s-operators-published.md# 1. Plan ideas from recent changes
/obsidian-workflows:ow-plan --intent passive
# 2. Create draft from selected proposal idea
/obsidian-workflows:ow-work proposal="Workflows/Proposals/passive-proposals/proposal-2026-03-03.md" idea=1
# 3. Refine the content
/obsidian-workflows:ow-work mode=refine file="Workflows/Drafts/2026-03-03.md" policy=daily-note
# 4. Review for quality
/obsidian-workflows:ow-review file="Workflows/Drafts/2026-03-03.md" policy=daily-note
# 5. Capture learnings
/obsidian-workflows:ow-compound file="Workflows/Notes/2026-03-03.md"- Command Specification - Command contract definition
- Repository Structure - Directory layout and organization
- Migration Guide - Migration from vault-coupled layout
- Frontmatter Reference - Field specifications
- Hook Patterns - Best practices for hooks
- Naming Conventions - Naming standards
- Validation Guide - Validation and troubleshooting
Contributions are welcome! See CONTRIBUTING.md for development setup, validation workflow, and contribution guidelines.
- Fail fast over silent fallback - Exit immediately on critical errors
- Enforce path safety consistently - All hook paths must start with
commands/ - Keep command discovery deterministic - Single canonical source per command name
- Preserve PASS|SKIP|FAIL status semantics - Consistent status reporting
- No absolute path assumptions - Use relative paths in contracts
- No global runtime state dependencies - Don't rely on
~/.claude/*for correctness - No duplicate command definitions - Enforce unique command names
MIT