Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 3 additions & 1 deletion .claude/skills/add_platform.add_capabilities/SKILL.md
Original file line number Diff line number Diff line change
@@ -1,6 +1,8 @@
---
name: add_platform.add_capabilities
description: "Updates job schema and adapters with any new hook events the platform supports. Use after research to extend DeepWork's hook system."user-invocable: false---
description: "Updates job schema and adapters with any new hook events the platform supports. Use after research to extend DeepWork's hook system."
user-invocable: false
---

# add_platform.add_capabilities

Expand Down
17 changes: 12 additions & 5 deletions .claude/skills/add_platform.implement/SKILL.md
Original file line number Diff line number Diff line change
@@ -1,10 +1,17 @@
---
name: add_platform.implement
description: "Creates platform adapter, templates, tests with 100% coverage, and README documentation. Use after adding hook capabilities."user-invocable: falsehooks: Stop:
- hooks: - type: command
command: ".deepwork/jobs/add_platform/hooks/run_tests.sh" SubagentStop:
- hooks: - type: command
command: ".deepwork/jobs/add_platform/hooks/run_tests.sh"---
description: "Creates platform adapter, templates, tests with 100% coverage, and README documentation. Use after adding hook capabilities."
user-invocable: false
hooks:
Stop:
- hooks:
- type: command
command: ".deepwork/jobs/add_platform/hooks/run_tests.sh"
SubagentStop:
- hooks:
- type: command
command: ".deepwork/jobs/add_platform/hooks/run_tests.sh"
---

# add_platform.implement

Expand Down
4 changes: 3 additions & 1 deletion .claude/skills/add_platform.research/SKILL.md
Original file line number Diff line number Diff line change
@@ -1,6 +1,8 @@
---
name: add_platform.research
description: "Captures CLI configuration and hooks system documentation for the new platform. Use when starting platform integration."user-invocable: false---
description: "Captures CLI configuration and hooks system documentation for the new platform. Use when starting platform integration."
user-invocable: false
---

# add_platform.research

Expand Down
4 changes: 3 additions & 1 deletion .claude/skills/add_platform.verify/SKILL.md
Original file line number Diff line number Diff line change
@@ -1,6 +1,8 @@
---
name: add_platform.verify
description: "Sets up platform directories and verifies deepwork install works correctly. Use after implementation to confirm integration."user-invocable: false---
description: "Sets up platform directories and verifies deepwork install works correctly. Use after implementation to confirm integration."
user-invocable: false
---

# add_platform.verify

Expand Down
4 changes: 3 additions & 1 deletion .claude/skills/commit.commit_and_push/SKILL.md
Original file line number Diff line number Diff line change
@@ -1,6 +1,8 @@
---
name: commit.commit_and_push
description: "Verifies changed files, creates commit, and pushes to remote. Use after linting passes to finalize changes."user-invocable: false---
description: "Verifies changed files, creates commit, and pushes to remote. Use after linting passes to finalize changes."
user-invocable: false
---

# commit.commit_and_push

Expand Down
4 changes: 3 additions & 1 deletion .claude/skills/commit.lint/SKILL.md
Original file line number Diff line number Diff line change
@@ -1,6 +1,8 @@
---
name: commit.lint
description: "Formats and lints code with ruff using a sub-agent. Use after tests pass to ensure code style compliance."user-invocable: false---
description: "Formats and lints code with ruff using a sub-agent. Use after tests pass to ensure code style compliance."
user-invocable: false
---

# commit.lint

Expand Down
4 changes: 3 additions & 1 deletion .claude/skills/commit.review/SKILL.md
Original file line number Diff line number Diff line change
@@ -1,6 +1,8 @@
---
name: commit.review
description: "Reviews changed code for issues, DRY opportunities, naming clarity, and test coverage using a sub-agent. Use as the first step before testing."user-invocable: false---
description: "Reviews changed code for issues, DRY opportunities, naming clarity, and test coverage using a sub-agent. Use as the first step before testing."
user-invocable: false
---

# commit.review

Expand Down
4 changes: 3 additions & 1 deletion .claude/skills/commit.test/SKILL.md
Original file line number Diff line number Diff line change
@@ -1,6 +1,8 @@
---
name: commit.test
description: "Pulls latest code and runs tests until all pass. Use after code review passes to verify changes work correctly."user-invocable: false---
description: "Pulls latest code and runs tests until all pass. Use after code review passes to verify changes work correctly."
user-invocable: false
---

# commit.test

Expand Down
4 changes: 3 additions & 1 deletion .claude/skills/deepwork_jobs.define/SKILL.md
Original file line number Diff line number Diff line change
@@ -1,6 +1,8 @@
---
name: deepwork_jobs.define
description: "Creates a job.yml specification by gathering workflow requirements through structured questions. Use when starting a new multi-step workflow."user-invocable: false---
description: "Creates a job.yml specification by gathering workflow requirements through structured questions. Use when starting a new multi-step workflow."
user-invocable: false
---

# deepwork_jobs.define

Expand Down
4 changes: 3 additions & 1 deletion .claude/skills/deepwork_jobs.implement/SKILL.md
Original file line number Diff line number Diff line change
@@ -1,6 +1,8 @@
---
name: deepwork_jobs.implement
description: "Generates step instruction files and syncs slash commands from the job.yml specification. Use after job spec review passes."user-invocable: false---
description: "Generates step instruction files and syncs slash commands from the job.yml specification. Use after job spec review passes."
user-invocable: false
---

# deepwork_jobs.implement

Expand Down
3 changes: 2 additions & 1 deletion .claude/skills/deepwork_jobs.learn/SKILL.md
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
---
name: deepwork_jobs.learn
description: "Analyzes conversation history to improve job instructions and capture learnings. Use after running a job to refine it."---
description: "Analyzes conversation history to improve job instructions and capture learnings. Use after running a job to refine it."
---

# deepwork_jobs.learn

Expand Down
4 changes: 3 additions & 1 deletion .claude/skills/deepwork_jobs.review_job_spec/SKILL.md
Original file line number Diff line number Diff line change
@@ -1,6 +1,8 @@
---
name: deepwork_jobs.review_job_spec
description: "Reviews job.yml against quality criteria using a sub-agent for unbiased validation. Use after defining a job specification."user-invocable: false---
description: "Reviews job.yml against quality criteria using a sub-agent for unbiased validation. Use after defining a job specification."
user-invocable: false
---

# deepwork_jobs.review_job_spec

Expand Down
4 changes: 3 additions & 1 deletion .claude/skills/deepwork_rules.define/SKILL.md
Original file line number Diff line number Diff line change
@@ -1,6 +1,8 @@
---
name: deepwork_rules.define
description: "Creates a rule file that triggers when specified files change. Use when setting up documentation sync, code review requirements, or automated commands."user-invocable: false---
description: "Creates a rule file that triggers when specified files change. Use when setting up documentation sync, code review requirements, or automated commands."
user-invocable: false
---

# deepwork_rules.define

Expand Down
4 changes: 3 additions & 1 deletion .claude/skills/manual_tests.infinite_block_tests/SKILL.md
Original file line number Diff line number Diff line change
@@ -1,6 +1,8 @@
---
name: manual_tests.infinite_block_tests
description: "Runs all 4 infinite block tests serially. Tests both 'should fire' (no promise) and 'should NOT fire' (with promise) scenarios."user-invocable: false---
description: "Runs all 4 infinite block tests serially. Tests both 'should fire' (no promise) and 'should NOT fire' (with promise) scenarios."
user-invocable: false
---

# manual_tests.infinite_block_tests

Expand Down
4 changes: 3 additions & 1 deletion .claude/skills/manual_tests.reset/SKILL.md
Original file line number Diff line number Diff line change
@@ -1,6 +1,8 @@
---
name: manual_tests.reset
description: "Runs FIRST to ensure clean environment. Also called internally by other steps when they need to revert changes and clear the queue."user-invocable: false---
description: "Runs FIRST to ensure clean environment. Also called internally by other steps when they need to revert changes and clear the queue."
user-invocable: false
---

# manual_tests.reset

Expand Down
4 changes: 3 additions & 1 deletion .claude/skills/manual_tests.run_fire_tests/SKILL.md
Original file line number Diff line number Diff line change
@@ -1,6 +1,8 @@
---
name: manual_tests.run_fire_tests
description: "Runs all 6 'should fire' tests serially with resets between each. Use after NOT-fire tests to verify rules fire correctly."user-invocable: false---
description: "Runs all 6 'should fire' tests serially with resets between each. Use after NOT-fire tests to verify rules fire correctly."
user-invocable: false
---

# manual_tests.run_fire_tests

Expand Down
4 changes: 3 additions & 1 deletion .claude/skills/manual_tests.run_not_fire_tests/SKILL.md
Original file line number Diff line number Diff line change
@@ -1,6 +1,8 @@
---
name: manual_tests.run_not_fire_tests
description: "Runs all 6 'should NOT fire' tests in parallel sub-agents. Use to verify rules don't fire when safety conditions are met."user-invocable: false---
description: "Runs all 6 'should NOT fire' tests in parallel sub-agents. Use to verify rules don't fire when safety conditions are met."
user-invocable: false
---

# manual_tests.run_not_fire_tests

Expand Down
4 changes: 3 additions & 1 deletion .claude/skills/update.job/SKILL.md
Original file line number Diff line number Diff line change
@@ -1,6 +1,8 @@
---
name: update.job
description: "Edits standard job source files in src/ and runs deepwork install to sync changes. Use when updating job.yml or step instructions."user-invocable: false---
description: "Edits standard job source files in src/ and runs deepwork install to sync changes. Use when updating job.yml or step instructions."
user-invocable: false
---

# update.job

Expand Down
5 changes: 5 additions & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
Expand Up @@ -22,8 +22,13 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
- SessionStart hook now skips non-initial sessions (resume, compact/clear) by checking the `source` field in stdin JSON, reducing noise and redundant checks

### Fixed
- Fixed skill template generating malformed YAML frontmatter with fields concatenated on single lines
- Removed over-aggressive `{%-` whitespace stripping from Jinja template
- Fields like `user-invocable` and `hooks` now render on proper separate lines
- Affects `src/deepwork/templates/claude/skill-job-step.md.jinja`

### Removed

## [0.5.1] - 2026-01-24

### Added
Expand Down
20 changes: 10 additions & 10 deletions src/deepwork/templates/claude/skill-job-step.md.jinja
Original file line number Diff line number Diff line change
Expand Up @@ -48,10 +48,10 @@ Template Variables:
---
name: {{ job_name }}.{{ step_id }}
description: "{{ step_description }}"
{%- if not exposed %}
{% if not exposed %}
user-invocable: false
{%- endif %}{#- if not exposed #}
{#-
{% endif %}{#- if not exposed #}
{#
NOTE: Prompt-based stop hooks do not currently work in Claude Code.
See: https://github.com/anthropics/claude-code/issues/20221
Only command/script hooks are generated here. Prompt hooks are filtered out.
Expand All @@ -68,27 +68,27 @@ user-invocable: false
{%- endfor -%}{#- for event_name, event_hooks in hooks.items() #}
{%- if has_command_hooks.value %}
hooks:
{%- for event_name, event_hooks in hooks.items() %}
{% for event_name, event_hooks in hooks.items() %}
{%- set script_hooks = event_hooks | selectattr("type", "equalto", "script") | list %}
{%- if script_hooks -%}
{#- For Stop events, generate both Stop and SubagentStop blocks #}
{%- if event_name == "Stop" %}
{%- for stop_event in ["Stop", "SubagentStop"] %}
{{ stop_event }}:
- hooks:
{%- for hook in script_hooks %}
{% for hook in script_hooks %}
- type: command
command: ".deepwork/jobs/{{ job_name }}/{{ hook.path }}"
{%- endfor %}{#- for hook in script_hooks #}
{%- endfor %}{#- for stop_event in ["Stop", "SubagentStop"] #}
{% endfor %}{#- for hook in script_hooks #}
{% endfor %}{#- for stop_event in ["Stop", "SubagentStop"] #}
{%- elif event_name != "SubagentStop" or "Stop" not in hooks %}
{{ event_name }}:
- hooks:
{%- for hook in script_hooks %}
{% for hook in script_hooks %}
- type: command
command: ".deepwork/jobs/{{ job_name }}/{{ hook.path }}"
{%- endfor %}{#- for hook in script_hooks #}
{%- endif %}{#- if event_name == "Stop" #}
{% endfor %}{#- for hook in script_hooks #}
{% endif %}{#- if event_name == "Stop" #}
{%- endif %}{#- if script_hooks #}
{%- endfor %}{#- for event_name, event_hooks in hooks.items() #}
{%- endif %}{#- if has_command_hooks.value #}
Expand Down