deepwork 0.5.1__py3-none-any.whl → 0.7.0a1__py3-none-any.whl
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- deepwork/__init__.py +1 -1
- deepwork/cli/hook.py +3 -4
- deepwork/cli/install.py +70 -117
- deepwork/cli/main.py +2 -2
- deepwork/cli/serve.py +133 -0
- deepwork/cli/sync.py +93 -58
- deepwork/core/adapters.py +91 -102
- deepwork/core/generator.py +19 -386
- deepwork/core/hooks_syncer.py +1 -1
- deepwork/core/parser.py +270 -1
- deepwork/hooks/README.md +0 -44
- deepwork/hooks/__init__.py +3 -6
- deepwork/hooks/check_version.sh +54 -21
- deepwork/mcp/__init__.py +23 -0
- deepwork/mcp/quality_gate.py +347 -0
- deepwork/mcp/schemas.py +263 -0
- deepwork/mcp/server.py +253 -0
- deepwork/mcp/state.py +422 -0
- deepwork/mcp/tools.py +394 -0
- deepwork/schemas/job.schema.json +347 -0
- deepwork/schemas/job_schema.py +27 -239
- deepwork/standard_jobs/deepwork_jobs/doc_specs/job_spec.md +9 -15
- deepwork/standard_jobs/deepwork_jobs/job.yml +146 -46
- deepwork/standard_jobs/deepwork_jobs/steps/define.md +100 -33
- deepwork/standard_jobs/deepwork_jobs/steps/errata.md +154 -0
- deepwork/standard_jobs/deepwork_jobs/steps/fix_jobs.md +207 -0
- deepwork/standard_jobs/deepwork_jobs/steps/fix_settings.md +177 -0
- deepwork/standard_jobs/deepwork_jobs/steps/implement.md +22 -138
- deepwork/standard_jobs/deepwork_jobs/steps/iterate.md +221 -0
- deepwork/standard_jobs/deepwork_jobs/steps/learn.md +2 -26
- deepwork/standard_jobs/deepwork_jobs/steps/test.md +154 -0
- deepwork/standard_jobs/deepwork_jobs/templates/job.yml.template +2 -0
- deepwork/templates/claude/settings.json +16 -0
- deepwork/templates/claude/skill-deepwork.md.jinja +37 -0
- deepwork/templates/gemini/skill-deepwork.md.jinja +37 -0
- deepwork-0.7.0a1.dist-info/METADATA +317 -0
- deepwork-0.7.0a1.dist-info/RECORD +64 -0
- deepwork/cli/rules.py +0 -32
- deepwork/core/command_executor.py +0 -190
- deepwork/core/pattern_matcher.py +0 -271
- deepwork/core/rules_parser.py +0 -559
- deepwork/core/rules_queue.py +0 -321
- deepwork/hooks/rules_check.py +0 -759
- deepwork/schemas/rules_schema.py +0 -135
- deepwork/standard_jobs/deepwork_jobs/steps/review_job_spec.md +0 -208
- deepwork/standard_jobs/deepwork_jobs/templates/doc_spec.md.example +0 -86
- deepwork/standard_jobs/deepwork_rules/hooks/capture_prompt_work_tree.sh +0 -38
- deepwork/standard_jobs/deepwork_rules/hooks/global_hooks.yml +0 -8
- deepwork/standard_jobs/deepwork_rules/hooks/user_prompt_submit.sh +0 -16
- deepwork/standard_jobs/deepwork_rules/job.yml +0 -49
- deepwork/standard_jobs/deepwork_rules/rules/.gitkeep +0 -13
- deepwork/standard_jobs/deepwork_rules/rules/api-documentation-sync.md.example +0 -10
- deepwork/standard_jobs/deepwork_rules/rules/readme-documentation.md.example +0 -10
- deepwork/standard_jobs/deepwork_rules/rules/security-review.md.example +0 -11
- deepwork/standard_jobs/deepwork_rules/rules/skill-md-validation.md +0 -46
- deepwork/standard_jobs/deepwork_rules/rules/source-test-pairing.md.example +0 -13
- deepwork/standard_jobs/deepwork_rules/steps/define.md +0 -249
- deepwork/templates/claude/skill-job-meta.md.jinja +0 -77
- deepwork/templates/claude/skill-job-step.md.jinja +0 -235
- deepwork/templates/gemini/skill-job-meta.toml.jinja +0 -76
- deepwork/templates/gemini/skill-job-step.toml.jinja +0 -162
- deepwork-0.5.1.dist-info/METADATA +0 -381
- deepwork-0.5.1.dist-info/RECORD +0 -72
- {deepwork-0.5.1.dist-info → deepwork-0.7.0a1.dist-info}/WHEEL +0 -0
- {deepwork-0.5.1.dist-info → deepwork-0.7.0a1.dist-info}/entry_points.txt +0 -0
- {deepwork-0.5.1.dist-info → deepwork-0.7.0a1.dist-info}/licenses/LICENSE.md +0 -0
|
@@ -1,162 +0,0 @@
|
|
|
1
|
-
{#
|
|
2
|
-
Template: skill-job-step.toml.jinja
|
|
3
|
-
Purpose: Generates individual step skill files for Gemini CLI
|
|
4
|
-
|
|
5
|
-
Template Variables:
|
|
6
|
-
Job Context:
|
|
7
|
-
- job_name: string - Job identifier
|
|
8
|
-
- job_summary: string - Short job summary
|
|
9
|
-
- job_description: string|null - Full job description
|
|
10
|
-
|
|
11
|
-
Step Metadata:
|
|
12
|
-
- step_id: string - Step identifier
|
|
13
|
-
- step_description: string - What this step does
|
|
14
|
-
- step_number: int - Position in workflow (1-indexed)
|
|
15
|
-
- total_steps: int - Total steps in job
|
|
16
|
-
- is_standalone: bool - True if step can run independently
|
|
17
|
-
- dependencies: list[string]|null - Required prior step IDs
|
|
18
|
-
- next_step: string|null - Next step ID in workflow
|
|
19
|
-
- instructions_file: string - Path to step instructions file
|
|
20
|
-
|
|
21
|
-
Step Content:
|
|
22
|
-
- instructions_content: string - Full instructions markdown
|
|
23
|
-
- user_inputs: list|null - User parameters to gather:
|
|
24
|
-
- name: string - Parameter name
|
|
25
|
-
- description: string - What to ask for
|
|
26
|
-
- file_inputs: list|null - Files from previous steps:
|
|
27
|
-
- file: string - File path
|
|
28
|
-
- from_step: string - Source step ID
|
|
29
|
-
- outputs: list[string]|null - Output file paths
|
|
30
|
-
|
|
31
|
-
Quality:
|
|
32
|
-
- quality_criteria: list[string]|null - Criteria for completion
|
|
33
|
-
- stop_hooks: list|null - Stop hook configurations (note: Gemini
|
|
34
|
-
does not support automated hooks, so these are for manual verification)
|
|
35
|
-
|
|
36
|
-
Note: Gemini uses TOML format with description + prompt fields.
|
|
37
|
-
Commands use colon separator (/job_name:step_id) not period.
|
|
38
|
-
#}
|
|
39
|
-
# {{ job_name }}:{{ step_id }}
|
|
40
|
-
#
|
|
41
|
-
# {{ step_description }}
|
|
42
|
-
#
|
|
43
|
-
# Generated by DeepWork - do not edit manually
|
|
44
|
-
|
|
45
|
-
description = "{{ step_description | replace('"', '\\"') }}"
|
|
46
|
-
|
|
47
|
-
prompt = """
|
|
48
|
-
# {{ job_name }}:{{ step_id }}
|
|
49
|
-
|
|
50
|
-
{% if is_standalone %}
|
|
51
|
-
**Standalone command** - can be run anytime
|
|
52
|
-
{% else %}
|
|
53
|
-
**Step {{ step_number }}/{{ total_steps }}** in **{{ job_name }}** workflow
|
|
54
|
-
{% endif %}
|
|
55
|
-
|
|
56
|
-
> {{ job_summary }}
|
|
57
|
-
|
|
58
|
-
{% if dependencies %}
|
|
59
|
-
## Prerequisites (Verify First)
|
|
60
|
-
|
|
61
|
-
Before proceeding, confirm these steps are complete:
|
|
62
|
-
{% for dep in dependencies %}
|
|
63
|
-
- `/{{ job_name }}:{{ dep }}`
|
|
64
|
-
{% endfor %}
|
|
65
|
-
{% endif %}
|
|
66
|
-
|
|
67
|
-
## Instructions
|
|
68
|
-
|
|
69
|
-
**Goal**: {{ step_description }}
|
|
70
|
-
|
|
71
|
-
{{ instructions_content }}
|
|
72
|
-
|
|
73
|
-
{% if job_description %}
|
|
74
|
-
### Job Context
|
|
75
|
-
|
|
76
|
-
{{ job_description }}
|
|
77
|
-
{% endif %}
|
|
78
|
-
|
|
79
|
-
{% if user_inputs or file_inputs %}
|
|
80
|
-
## Required Inputs
|
|
81
|
-
|
|
82
|
-
{% if user_inputs %}
|
|
83
|
-
**User Parameters** - Gather from user before starting:
|
|
84
|
-
{% for input in user_inputs %}
|
|
85
|
-
- **{{ input.name }}**: {{ input.description }}
|
|
86
|
-
{% endfor %}
|
|
87
|
-
{% endif %}
|
|
88
|
-
|
|
89
|
-
{% if file_inputs %}
|
|
90
|
-
**Files from Previous Steps** - Read these first:
|
|
91
|
-
{% for input in file_inputs %}
|
|
92
|
-
- `{{ input.file }}` (from `{{ input.from_step }}`)
|
|
93
|
-
{% endfor %}
|
|
94
|
-
{% endif %}
|
|
95
|
-
{% endif %}
|
|
96
|
-
|
|
97
|
-
## Work Branch
|
|
98
|
-
|
|
99
|
-
Use branch format: `deepwork/{{ job_name }}-[instance]-YYYYMMDD`
|
|
100
|
-
|
|
101
|
-
- If on a matching work branch: continue using it
|
|
102
|
-
- If on main/master: create new branch with `git checkout -b deepwork/{{ job_name }}-[instance]-$(date +%Y%m%d)`
|
|
103
|
-
|
|
104
|
-
## Outputs
|
|
105
|
-
|
|
106
|
-
{% if outputs %}
|
|
107
|
-
**Required outputs**:
|
|
108
|
-
{% for output in outputs %}
|
|
109
|
-
- `{{ output.file }}`{% if output.file.endswith('/') %} (directory){% endif %}
|
|
110
|
-
|
|
111
|
-
{% if output.has_doc_spec and output.doc_spec %}
|
|
112
|
-
**Doc Spec**: {{ output.doc_spec.name }}
|
|
113
|
-
> {{ output.doc_spec.description }}
|
|
114
|
-
**Definition**: `{{ output.doc_spec.path }}`
|
|
115
|
-
{% if output.doc_spec.target_audience %}
|
|
116
|
-
**Target Audience**: {{ output.doc_spec.target_audience }}
|
|
117
|
-
{% endif %}
|
|
118
|
-
{% if output.doc_spec.quality_criteria %}
|
|
119
|
-
**Quality Criteria**:
|
|
120
|
-
{% for criterion in output.doc_spec.quality_criteria %}
|
|
121
|
-
{{ loop.index }}. **{{ criterion.name }}**: {{ criterion.description }}
|
|
122
|
-
{% endfor %}
|
|
123
|
-
{% endif %}
|
|
124
|
-
{% endif %}
|
|
125
|
-
{% endfor %}
|
|
126
|
-
{% else %}
|
|
127
|
-
No specific file outputs required.
|
|
128
|
-
{% endif %}
|
|
129
|
-
|
|
130
|
-
{% if quality_criteria or stop_hooks %}
|
|
131
|
-
## Quality Validation (Manual)
|
|
132
|
-
|
|
133
|
-
**NOTE**: Gemini CLI does not support automated validation. Manually verify criteria before completing.
|
|
134
|
-
|
|
135
|
-
{% if quality_criteria %}
|
|
136
|
-
**Criteria (all must be satisfied)**:
|
|
137
|
-
{% for criterion in quality_criteria %}
|
|
138
|
-
{{ loop.index }}. {{ criterion }}
|
|
139
|
-
{% endfor %}
|
|
140
|
-
{% endif %}
|
|
141
|
-
{% endif %}
|
|
142
|
-
## On Completion
|
|
143
|
-
|
|
144
|
-
{% if is_standalone %}
|
|
145
|
-
1. Verify outputs are created
|
|
146
|
-
2. Inform user: "{{ step_id }} complete{% if outputs %}, outputs: {{ outputs | map(attribute='file') | join(', ') }}{% endif %}"
|
|
147
|
-
|
|
148
|
-
This standalone command can be re-run anytime.
|
|
149
|
-
{% else %}
|
|
150
|
-
1. Verify outputs are created
|
|
151
|
-
2. Inform user: "Step {{ step_number }}/{{ total_steps }} complete{% if outputs %}, outputs: {{ outputs | map(attribute='file') | join(', ') }}{% endif %}"
|
|
152
|
-
{% if next_step %}
|
|
153
|
-
3. **Tell user next command**: `/{{ job_name }}:{{ next_step }}`
|
|
154
|
-
{% else %}
|
|
155
|
-
3. **Workflow complete**: All steps finished. Consider creating a PR to merge the work branch.
|
|
156
|
-
{% endif %}
|
|
157
|
-
{% endif %}
|
|
158
|
-
|
|
159
|
-
---
|
|
160
|
-
|
|
161
|
-
**Reference files**: `.deepwork/jobs/{{ job_name }}/job.yml`, `.deepwork/jobs/{{ job_name }}/{{ instructions_file }}`
|
|
162
|
-
"""
|
|
@@ -1,381 +0,0 @@
|
|
|
1
|
-
Metadata-Version: 2.4
|
|
2
|
-
Name: deepwork
|
|
3
|
-
Version: 0.5.1
|
|
4
|
-
Summary: Framework for enabling AI agents to perform complex, multi-step work tasks
|
|
5
|
-
Project-URL: Homepage, https://github.com/deepwork/deepwork
|
|
6
|
-
Project-URL: Documentation, https://github.com/deepwork/deepwork#readme
|
|
7
|
-
Project-URL: Repository, https://github.com/deepwork/deepwork
|
|
8
|
-
Project-URL: Issues, https://github.com/deepwork/deepwork/issues
|
|
9
|
-
Author: DeepWork Contributors
|
|
10
|
-
License: Business Source License 1.1
|
|
11
|
-
License-File: LICENSE.md
|
|
12
|
-
Keywords: agents,ai,automation,cli,workflow
|
|
13
|
-
Classifier: Development Status :: 3 - Alpha
|
|
14
|
-
Classifier: Intended Audience :: Developers
|
|
15
|
-
Classifier: License :: Other/Proprietary License
|
|
16
|
-
Classifier: Programming Language :: Python :: 3
|
|
17
|
-
Classifier: Programming Language :: Python :: 3.11
|
|
18
|
-
Classifier: Programming Language :: Python :: 3.12
|
|
19
|
-
Classifier: Topic :: Software Development :: Libraries :: Application Frameworks
|
|
20
|
-
Requires-Python: >=3.11
|
|
21
|
-
Requires-Dist: click>=8.1.0
|
|
22
|
-
Requires-Dist: gitpython>=3.1.0
|
|
23
|
-
Requires-Dist: jinja2>=3.1.0
|
|
24
|
-
Requires-Dist: jsonschema>=4.17.0
|
|
25
|
-
Requires-Dist: pyyaml>=6.0
|
|
26
|
-
Requires-Dist: rich>=13.0.0
|
|
27
|
-
Provides-Extra: dev
|
|
28
|
-
Requires-Dist: mypy>=1.0; extra == 'dev'
|
|
29
|
-
Requires-Dist: pytest-cov>=4.0; extra == 'dev'
|
|
30
|
-
Requires-Dist: pytest-mock>=3.10; extra == 'dev'
|
|
31
|
-
Requires-Dist: pytest>=7.0; extra == 'dev'
|
|
32
|
-
Requires-Dist: ruff>=0.1.0; extra == 'dev'
|
|
33
|
-
Requires-Dist: types-pyyaml; extra == 'dev'
|
|
34
|
-
Description-Content-Type: text/markdown
|
|
35
|
-
|
|
36
|
-
# DeepWork
|
|
37
|
-
|
|
38
|
-
> **Note**: DeepWork is in active development. We welcome feedback and contributions!
|
|
39
|
-
|
|
40
|
-
> Framework for enabling AI agents to perform complex, multi-step work tasks
|
|
41
|
-
|
|
42
|
-
DeepWork is a tool for defining and executing multi-step workflows with AI coding assistants like Claude Code, Google Gemini, and GitHub Copilot. It enables you to decompose complex tasks into manageable steps, with clear inputs, outputs, and dependencies.
|
|
43
|
-
|
|
44
|
-
## Supported Platforms
|
|
45
|
-
|
|
46
|
-
| Platform | Status | Command Format | Hooks Support |
|
|
47
|
-
|----------|--------|----------------|---------------|
|
|
48
|
-
| **Claude Code** | Full Support | Markdown | Yes (stop_hooks, pre/post) |
|
|
49
|
-
| **Gemini CLI** | Full Support | TOML | No (global only) |
|
|
50
|
-
| OpenCode | Planned | Markdown | No |
|
|
51
|
-
| GitHub Copilot CLI | Planned | Markdown | No (tool permissions only) |
|
|
52
|
-
|
|
53
|
-
> **Tip:** New to DeepWork? Claude Code has the most complete feature support, including quality validation hooks and automated rules. For browser automation, Claude in Chrome (Anthropic's browser extension) works well with DeepWork workflows.
|
|
54
|
-
|
|
55
|
-
## Easy Installation
|
|
56
|
-
In your Agent CLI (ex. `claude`), ask:
|
|
57
|
-
|
|
58
|
-
```
|
|
59
|
-
Please fully install https://pypi.org/project/deepwork/ and make sure you see the new commands.
|
|
60
|
-
```
|
|
61
|
-
|
|
62
|
-
## Installation Details
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
**Agents**: - be sure to perform all the steps, not just the package install.
|
|
66
|
-
|
|
67
|
-
### Prerequisites
|
|
68
|
-
|
|
69
|
-
- Python 3.11 or higher
|
|
70
|
-
- Git repository
|
|
71
|
-
- One of: Claude Code or Gemini CLI
|
|
72
|
-
|
|
73
|
-
### Install DeepWork
|
|
74
|
-
|
|
75
|
-
```bash
|
|
76
|
-
# Using Homebrew (macOS/Linux)
|
|
77
|
-
brew tap unsupervisedcom/deepwork
|
|
78
|
-
brew install deepwork
|
|
79
|
-
|
|
80
|
-
# Using pipx (isolated environment)
|
|
81
|
-
pipx install deepwork
|
|
82
|
-
|
|
83
|
-
# Or using uv
|
|
84
|
-
uv tool install deepwork
|
|
85
|
-
|
|
86
|
-
# Or using pip
|
|
87
|
-
pip install deepwork
|
|
88
|
-
```
|
|
89
|
-
|
|
90
|
-
### Install in Your Project
|
|
91
|
-
```bash
|
|
92
|
-
cd your-project/
|
|
93
|
-
deepwork install --platform claude
|
|
94
|
-
|
|
95
|
-
# Or Gemini CLI, etc.
|
|
96
|
-
deepwork install --platform gemini
|
|
97
|
-
```
|
|
98
|
-
|
|
99
|
-
This will:
|
|
100
|
-
- Create `.deepwork/` directory structure
|
|
101
|
-
- Generate core DeepWork jobs
|
|
102
|
-
- Install DeepWork jobs for your AI assistant
|
|
103
|
-
- Configure hooks for your AI assistant to enable rules
|
|
104
|
-
|
|
105
|
-
## Quick Start
|
|
106
|
-
|
|
107
|
-
### 1. Define a Job
|
|
108
|
-
Jobs are multi-step workflows where each Step has clear input and output artifacts, making them easier to manage effectively.
|
|
109
|
-
|
|
110
|
-
The process of defining a job itself is actually a DeepWork job. You can see it at `.deepwork/jobs/deepwork_jobs/`.
|
|
111
|
-
|
|
112
|
-
To start the process, just run the first Step in the job:
|
|
113
|
-
|
|
114
|
-
```
|
|
115
|
-
/deepwork_jobs.define
|
|
116
|
-
```
|
|
117
|
-
|
|
118
|
-
Follow the interactive prompts to:
|
|
119
|
-
- Name your job
|
|
120
|
-
- Define steps with inputs/outputs
|
|
121
|
-
- Specify dependencies between steps
|
|
122
|
-
|
|
123
|
-
It will also prompt you to go on the the next Step in the job.
|
|
124
|
-
|
|
125
|
-
### 2. Execute Steps
|
|
126
|
-
|
|
127
|
-
Run individual steps of your job:
|
|
128
|
-
|
|
129
|
-
```
|
|
130
|
-
/your_job_name.step_1
|
|
131
|
-
```
|
|
132
|
-
|
|
133
|
-
The AI will:
|
|
134
|
-
- Create a work branch
|
|
135
|
-
- Execute the step's instructions
|
|
136
|
-
- Generate required outputs
|
|
137
|
-
- Guide you to the next step
|
|
138
|
-
|
|
139
|
-
### 3. Manage Workflows
|
|
140
|
-
|
|
141
|
-
Use the refine skill to update existing jobs:
|
|
142
|
-
|
|
143
|
-
```
|
|
144
|
-
/deepwork_jobs.refine
|
|
145
|
-
```
|
|
146
|
-
|
|
147
|
-
## Example: Competitive Research Workflow
|
|
148
|
-
|
|
149
|
-
Here's a sample 4-step workflow for competitive analysis:
|
|
150
|
-
|
|
151
|
-
**job.yml**:
|
|
152
|
-
```yaml
|
|
153
|
-
name: competitive_research
|
|
154
|
-
version: "1.0.0"
|
|
155
|
-
summary: "Systematic competitive analysis workflow"
|
|
156
|
-
description: |
|
|
157
|
-
A comprehensive workflow for analyzing competitors in your market segment.
|
|
158
|
-
Helps product teams understand the competitive landscape by identifying
|
|
159
|
-
competitors, researching their offerings, and developing positioning strategies.
|
|
160
|
-
|
|
161
|
-
changelog:
|
|
162
|
-
- version: "1.0.0"
|
|
163
|
-
changes: "Initial job creation"
|
|
164
|
-
|
|
165
|
-
steps:
|
|
166
|
-
- id: identify_competitors
|
|
167
|
-
name: "Identify Competitors"
|
|
168
|
-
description: "Research and list competitors"
|
|
169
|
-
inputs:
|
|
170
|
-
- name: market_segment
|
|
171
|
-
description: "Market segment to analyze"
|
|
172
|
-
- name: product_category
|
|
173
|
-
description: "Product category"
|
|
174
|
-
outputs:
|
|
175
|
-
- competitors.md
|
|
176
|
-
dependencies: []
|
|
177
|
-
|
|
178
|
-
- id: primary_research
|
|
179
|
-
name: "Primary Research"
|
|
180
|
-
description: "Analyze competitors' self-presentation"
|
|
181
|
-
inputs:
|
|
182
|
-
- file: competitors.md
|
|
183
|
-
from_step: identify_competitors
|
|
184
|
-
outputs:
|
|
185
|
-
- primary_research.md
|
|
186
|
-
- competitor_profiles/
|
|
187
|
-
dependencies:
|
|
188
|
-
- identify_competitors
|
|
189
|
-
|
|
190
|
-
# ... additional steps
|
|
191
|
-
```
|
|
192
|
-
|
|
193
|
-
Usage:
|
|
194
|
-
```
|
|
195
|
-
/competitive_research.identify_competitors
|
|
196
|
-
# AI creates work branch and asks for market_segment, product_category
|
|
197
|
-
# Generates competitors.md
|
|
198
|
-
|
|
199
|
-
/competitive_research.primary_research
|
|
200
|
-
# AI reads competitors.md
|
|
201
|
-
# Generates primary_research.md and competitor_profiles/
|
|
202
|
-
```
|
|
203
|
-
|
|
204
|
-
## Architecture
|
|
205
|
-
|
|
206
|
-
DeepWork follows a **Git-native, installation-only** design:
|
|
207
|
-
|
|
208
|
-
- **No runtime daemon**: DeepWork is purely a CLI tool
|
|
209
|
-
- **Git-based workflow**: All work happens on dedicated branches
|
|
210
|
-
- **Skills as interface**: AI agents interact via generated skill files
|
|
211
|
-
- **Platform-agnostic**: Works with any AI coding assistant that supports skills
|
|
212
|
-
|
|
213
|
-
### Directory Structure
|
|
214
|
-
|
|
215
|
-
```
|
|
216
|
-
your-project/
|
|
217
|
-
├── .deepwork/
|
|
218
|
-
│ ├── config.yml # Platform configuration
|
|
219
|
-
│ ├── rules/ # Rule definitions (v2 format)
|
|
220
|
-
│ │ └── rule-name.md # Individual rule files
|
|
221
|
-
│ ├── tmp/ # Temporary state (gitignored)
|
|
222
|
-
│ │ └── rules/queue/ # Rule evaluation queue
|
|
223
|
-
│ └── jobs/ # Job definitions
|
|
224
|
-
│ └── job_name/
|
|
225
|
-
│ ├── job.yml # Job metadata
|
|
226
|
-
│ └── steps/ # Step instructions
|
|
227
|
-
├── .claude/ # Claude Code skills (auto-generated)
|
|
228
|
-
│ └── skills/
|
|
229
|
-
│ ├── deepwork_jobs.define.md
|
|
230
|
-
│ └── job_name.step_name.md
|
|
231
|
-
└── .gemini/ # Gemini CLI skills (auto-generated)
|
|
232
|
-
└── skills/
|
|
233
|
-
└── job_name/
|
|
234
|
-
└── step_name.toml
|
|
235
|
-
```
|
|
236
|
-
|
|
237
|
-
**Note**: Work outputs are created on dedicated Git branches (e.g., `deepwork/job_name-instance-date`), not in a separate directory.
|
|
238
|
-
|
|
239
|
-
## Documentation
|
|
240
|
-
|
|
241
|
-
- **[Architecture](doc/architecture.md)**: Complete design specification
|
|
242
|
-
- **[Doc Specs](doc/doc-specs.md)**: Document specification format for output quality criteria
|
|
243
|
-
- **[Contributing](CONTRIBUTING.md)**: Setup development environment and contribute
|
|
244
|
-
- **[Nix Flakes Guide](doc/nix-flake.md)**: Comprehensive guide for using DeepWork with Nix flakes
|
|
245
|
-
|
|
246
|
-
## Development with Nix
|
|
247
|
-
|
|
248
|
-
DeepWork is available as a Nix flake for reproducible development environments:
|
|
249
|
-
|
|
250
|
-
```bash
|
|
251
|
-
# Using Nix flakes
|
|
252
|
-
nix develop
|
|
253
|
-
|
|
254
|
-
# Or with direnv (automatic activation - recommended)
|
|
255
|
-
echo "use flake" > .envrc
|
|
256
|
-
direnv allow
|
|
257
|
-
```
|
|
258
|
-
|
|
259
|
-
The Nix environment provides all dependencies including Python 3.11, uv, pytest, ruff, and mypy.
|
|
260
|
-
|
|
261
|
-
### Installing DeepWork from Flake
|
|
262
|
-
|
|
263
|
-
You can also install deepwork directly from the flake:
|
|
264
|
-
|
|
265
|
-
```bash
|
|
266
|
-
# Install deepwork from this flake
|
|
267
|
-
nix profile install github:Unsupervisedcom/deepwork
|
|
268
|
-
|
|
269
|
-
# Or run it without installing
|
|
270
|
-
nix run github:Unsupervisedcom/deepwork -- --help
|
|
271
|
-
|
|
272
|
-
# Or build the package
|
|
273
|
-
nix build github:Unsupervisedcom/deepwork
|
|
274
|
-
```
|
|
275
|
-
|
|
276
|
-
## Project Structure
|
|
277
|
-
|
|
278
|
-
```
|
|
279
|
-
deepwork/
|
|
280
|
-
├── src/deepwork/
|
|
281
|
-
│ ├── cli/ # Command-line interface
|
|
282
|
-
│ ├── core/ # Core functionality
|
|
283
|
-
│ │ ├── parser.py # Job definition parsing
|
|
284
|
-
│ │ ├── detector.py # Platform detection
|
|
285
|
-
│ │ ├── generator.py # Skill file generation
|
|
286
|
-
│ │ ├── rules_parser.py # Rule parsing
|
|
287
|
-
│ │ ├── pattern_matcher.py # Variable pattern matching
|
|
288
|
-
│ │ ├── rules_queue.py # Rule state queue
|
|
289
|
-
│ │ └── command_executor.py # Command action execution
|
|
290
|
-
│ ├── hooks/ # Cross-platform hook wrappers
|
|
291
|
-
│ │ ├── wrapper.py # Input/output normalization
|
|
292
|
-
│ │ ├── rules_check.py # Rule evaluation hook
|
|
293
|
-
│ │ ├── claude_hook.sh # Claude Code adapter
|
|
294
|
-
│ │ └── gemini_hook.sh # Gemini CLI adapter
|
|
295
|
-
│ ├── templates/ # Jinja2 templates
|
|
296
|
-
│ │ ├── claude/ # Claude Code templates
|
|
297
|
-
│ │ └── gemini/ # Gemini CLI templates
|
|
298
|
-
│ ├── schemas/ # JSON schemas
|
|
299
|
-
│ └── utils/ # Utilities (fs, yaml, git, validation)
|
|
300
|
-
├── tests/
|
|
301
|
-
│ ├── unit/ # Unit tests
|
|
302
|
-
│ ├── integration/ # Integration tests
|
|
303
|
-
│ └── fixtures/ # Test fixtures
|
|
304
|
-
└── doc/ # Documentation
|
|
305
|
-
```
|
|
306
|
-
|
|
307
|
-
## Features
|
|
308
|
-
|
|
309
|
-
### Job Definition
|
|
310
|
-
Define structured, multi-step workflows where each step has clear requirements and produces specific results.
|
|
311
|
-
- **Dependency Management**: Explicitly link steps with automatic sequence handling and cycle detection.
|
|
312
|
-
- **Artifact Passing**: Seamlessly use file outputs from one step as inputs for future steps.
|
|
313
|
-
- **Dynamic Inputs**: Support for both fixed file references and interactive user parameters.
|
|
314
|
-
- **Human-Readable YAML**: Simple, declarative job definitions that are easy to version and maintain.
|
|
315
|
-
- **Doc Specs**: Reference doc specs to enforce quality criteria on document outputs (see [doc specs documentation](doc/doc-specs.md)).
|
|
316
|
-
|
|
317
|
-
### Git-Native Workflow
|
|
318
|
-
Maintain a clean repository with automatic branch management and isolation.
|
|
319
|
-
- **Automatic Branching**: Every job execution happens on a dedicated work branch (e.g., `deepwork/my-job-2024`).
|
|
320
|
-
- **Namespace Isolation**: Run multiple concurrent jobs or instances without versioning conflicts.
|
|
321
|
-
- **Full Traceability**: All AI-generated changes, logs, and artifacts are tracked natively in your Git history.
|
|
322
|
-
|
|
323
|
-
### Automated Rules
|
|
324
|
-
Enforce project standards and best practices without manual oversight. Rules monitor file changes and automatically prompt your AI assistant to follow specific guidelines when relevant code is modified.
|
|
325
|
-
- **Automatic Triggers**: Detect when specific files or directories are changed to fire relevant rules.
|
|
326
|
-
- **File Correspondence**: Define bidirectional (set) or directional (pair) relationships between files.
|
|
327
|
-
- **Command Actions**: Run idempotent commands (formatters, linters) automatically when files change.
|
|
328
|
-
- **Contextual Guidance**: Instructions are injected directly into the AI's workflow at the right moment.
|
|
329
|
-
|
|
330
|
-
**Example Rule** (`.deepwork/rules/source-test-pairing.md`):
|
|
331
|
-
```markdown
|
|
332
|
-
---
|
|
333
|
-
name: Source/Test Pairing
|
|
334
|
-
set:
|
|
335
|
-
- src/{path}.py
|
|
336
|
-
- tests/{path}_test.py
|
|
337
|
-
compare_to: base
|
|
338
|
-
---
|
|
339
|
-
When source files change, corresponding test files should also change.
|
|
340
|
-
Please create or update tests for the modified source files.
|
|
341
|
-
```
|
|
342
|
-
|
|
343
|
-
**Example Command Rule** (`.deepwork/rules/format-python.md`):
|
|
344
|
-
```markdown
|
|
345
|
-
---
|
|
346
|
-
name: Format Python
|
|
347
|
-
trigger: "**/*.py"
|
|
348
|
-
action:
|
|
349
|
-
command: "ruff format {file}"
|
|
350
|
-
run_for: each_match
|
|
351
|
-
compare_to: prompt
|
|
352
|
-
---
|
|
353
|
-
```
|
|
354
|
-
|
|
355
|
-
### Multi-Platform Support
|
|
356
|
-
Generate native commands and skills tailored for your AI coding assistant.
|
|
357
|
-
- **Native Integration**: Works directly with the skill/command formats of supported agents.
|
|
358
|
-
- **Context-Aware**: Skills include all necessary context (instructions, inputs, and dependencies) for the AI.
|
|
359
|
-
- **Expanding Ecosystem**: Currently supports **Claude Code** and **Gemini CLI**, with more platforms planned.
|
|
360
|
-
|
|
361
|
-
## Contributing
|
|
362
|
-
|
|
363
|
-
DeepWork is currently in MVP phase. Contributions welcome! See [CONTRIBUTING.md](CONTRIBUTING.md) for the full development guide.
|
|
364
|
-
|
|
365
|
-
## License
|
|
366
|
-
|
|
367
|
-
DeepWork is licensed under the Business Source License 1.1 (BSL 1.1). See [LICENSE.md](LICENSE.md) for details.
|
|
368
|
-
|
|
369
|
-
### Key Points
|
|
370
|
-
|
|
371
|
-
- **Free for non-competing use**: You can use DeepWork freely for internal workflow automation, education, research, and development
|
|
372
|
-
- **Change Date**: On January 14, 2030, the license will automatically convert to Apache License 2.0
|
|
373
|
-
- **Prohibited Uses**: You cannot use DeepWork to build products that compete with DeepWork or Unsupervised.com, Inc. in workflow automation or data analysis
|
|
374
|
-
- **Contributing**: Contributors must sign our [Contributor License Agreement (CLA)](CLA/version_1/CLA.md)
|
|
375
|
-
|
|
376
|
-
For commercial use or questions about licensing, please contact legal@unsupervised.com
|
|
377
|
-
|
|
378
|
-
## Credits
|
|
379
|
-
|
|
380
|
-
- Inspired by [GitHub's spec-kit](https://github.com/github/spec-kit)
|
|
381
|
-
|
deepwork-0.5.1.dist-info/RECORD
DELETED
|
@@ -1,72 +0,0 @@
|
|
|
1
|
-
deepwork/__init__.py,sha256=vcMnJioxhfoL6kGh4FM51Vk9UoLnQ76g6Ms7XDUItYA,748
|
|
2
|
-
deepwork/cli/__init__.py,sha256=3SqmfcP2xqutiCYAbajFDJTjr2pOLydqTN0NN-FTsIE,33
|
|
3
|
-
deepwork/cli/hook.py,sha256=y-VMejVKuysdA3SD300Lj4JF0g_nPdIrFk3RVFpunDk,2089
|
|
4
|
-
deepwork/cli/install.py,sha256=ruV00zIsMu2miUR61i3l6qfNeVqFDiBI51DQCbagdzc,14717
|
|
5
|
-
deepwork/cli/main.py,sha256=ohWspMA5yVjOPZDiFWt7yT4aH4o8MiOJfU67fuDkklM,616
|
|
6
|
-
deepwork/cli/rules.py,sha256=hLv751CwAAHK1LaggBhfPbTVpPRUBbEON73ldYWijo8,760
|
|
7
|
-
deepwork/cli/sync.py,sha256=BH3kuheDZMfRQOem0D09RzJJYDp0egbAW6Huu_YBS9M,7554
|
|
8
|
-
deepwork/core/__init__.py,sha256=1g869QuwsYzNjQONneng2OMc6HKt-tlBCaxJbMMfoho,36
|
|
9
|
-
deepwork/core/adapters.py,sha256=kQ6VcXrB4AcQBwMFhw0808h-3LWNbUV6mPTMvkzQwq8,21829
|
|
10
|
-
deepwork/core/command_executor.py,sha256=O3LBdwT0Jshgw6l7I9va0tJbjIYO_wSnC6COz1RynrU,5373
|
|
11
|
-
deepwork/core/detector.py,sha256=PThpFLH-ZVL8UqjVdGSnGA0mFbhc6_rp6V3_Yzw97kI,2466
|
|
12
|
-
deepwork/core/doc_spec_parser.py,sha256=DF1B3Ku9XHxTjRN12b1DatkwTa0HlwpPbeJCL4teobU,5739
|
|
13
|
-
deepwork/core/generator.py,sha256=iRUXFV2YTd7wUHCU772PhWxyPt59IrVNVlvsEWqhwNk,17229
|
|
14
|
-
deepwork/core/hooks_syncer.py,sha256=iAGnnrvQUp54LsSArZn2OmCxxegvqR9RyFeZs1ZRLZU,7490
|
|
15
|
-
deepwork/core/parser.py,sha256=C79AkGLnfqOYpNd6PG3oczlzFJCc5wYTm4QTzpVotR8,12097
|
|
16
|
-
deepwork/core/pattern_matcher.py,sha256=wtrxFNSCMxk-47Nw4Ca-8769ll4weRvvQBLGsRERcKM,8073
|
|
17
|
-
deepwork/core/rules_parser.py,sha256=r_Pay0Ug9FDGCEccpLnQjsQjSEUmECceh0Ac3Ayw4oE,17774
|
|
18
|
-
deepwork/core/rules_queue.py,sha256=uCNuQzohUyEYGnCUv1nMDEYoLeTuiSHN44-kuXbSLDU,10069
|
|
19
|
-
deepwork/hooks/README.md,sha256=t4rAd68oRx0-cbln4kfV0Sk2IWhGAGR7HB4McgBXTYE,4391
|
|
20
|
-
deepwork/hooks/__init__.py,sha256=XpZkfndwJx40C59immzOfcxPbiTTrgPoL7nn_n12EyM,2019
|
|
21
|
-
deepwork/hooks/check_version.sh,sha256=_dUyr2gLRs_QBt74LO-VPn91jeX4mo00Q_AKuzKkWYw,8801
|
|
22
|
-
deepwork/hooks/claude_hook.sh,sha256=ViV8Cc9eLRwsyZ7T1tNP-kK3leAmFjbcjOOSU3NN-eE,1321
|
|
23
|
-
deepwork/hooks/gemini_hook.sh,sha256=eUczJ3VUL5-q5Ic8V_WYpn5Ff_m2oliJ0FXMWaHi9jM,1316
|
|
24
|
-
deepwork/hooks/rules_check.py,sha256=8a1UZxBU9HqU9Lmt2lYbOFsP3CflG7YBRWTDiGUpEXQ,25883
|
|
25
|
-
deepwork/hooks/wrapper.py,sha256=HX_LtS5vfv-ZUhtR5jZqZCNBe90QPwW4ij9q-aRqbic,12956
|
|
26
|
-
deepwork/schemas/__init__.py,sha256=PpydKb_oaTv8lYapN_nV-Tl_OUCoSM_okvsEJ8gNTpI,41
|
|
27
|
-
deepwork/schemas/doc_spec_schema.py,sha256=qByBtd86vQaLNsLfMr4iwVdpmyowvVLzYOnXY7RnqLY,2049
|
|
28
|
-
deepwork/schemas/job_schema.py,sha256=9bJ0FDz7hSs6xgckHXJl7pS2F8zsbjIk4lcPOgu9nIY,10664
|
|
29
|
-
deepwork/schemas/rules_schema.py,sha256=CNv0_ambXTHZKFy81VCpew6KmHslSQPwLG7yd2x-z_0,4666
|
|
30
|
-
deepwork/standard_jobs/deepwork_jobs/AGENTS.md,sha256=Y6I4jZ8DfN0RFY3UF5bgQRZvL7wQD9P0lgE7EZM6CGI,2252
|
|
31
|
-
deepwork/standard_jobs/deepwork_jobs/job.yml,sha256=3Ekm4NAp0Oiy-EpeGkcmGhi6oeq5ey-IWSCYehGM9Xg,8036
|
|
32
|
-
deepwork/standard_jobs/deepwork_jobs/make_new_job.sh,sha256=JArfFU9lEaJPRsXRL3rU1IMt2p6Bq0s2C9f98aJ7Mxg,3878
|
|
33
|
-
deepwork/standard_jobs/deepwork_jobs/doc_specs/job_spec.md,sha256=G6w8EeoydnN1qvpxkXKCGiE7s41rtffDeoqOvhgF_pw,6975
|
|
34
|
-
deepwork/standard_jobs/deepwork_jobs/steps/define.md,sha256=aMOnMR_GrhQdLKS2U8ypO4rcWpom8-sYEACVxQFPNbY,16275
|
|
35
|
-
deepwork/standard_jobs/deepwork_jobs/steps/implement.md,sha256=2ms1RVkvoFL9raBL3Hjq6zn5LNYEcG9jcYiIwNkNtZY,10652
|
|
36
|
-
deepwork/standard_jobs/deepwork_jobs/steps/learn.md,sha256=lVGHmNjN_74IVeAtc7dN5VDptUWU6kujSysvMgPZZ7k,12732
|
|
37
|
-
deepwork/standard_jobs/deepwork_jobs/steps/review_job_spec.md,sha256=txfGuVjzhqwwJ5JSlcF9g4moBAx-7lXmvAXR6d0jiqU,6897
|
|
38
|
-
deepwork/standard_jobs/deepwork_jobs/steps/supplemental_file_references.md,sha256=uKDEwB3TxMLK-Zim3QQfkvaW5W6AVWHjWnH25aY6wCw,1478
|
|
39
|
-
deepwork/standard_jobs/deepwork_jobs/templates/agents.md.template,sha256=SUJL862C6-DnT9lK3sNIZ5T2wVgXN4YRph4FrKtFnLo,739
|
|
40
|
-
deepwork/standard_jobs/deepwork_jobs/templates/doc_spec.md.example,sha256=CHbGtH4R7wWlJV-_9QBkICPwb6VFuSMFZs4nAPyq6e0,2682
|
|
41
|
-
deepwork/standard_jobs/deepwork_jobs/templates/doc_spec.md.template,sha256=OXpkFTsEm4CVkJQmx7f6rUZ9My5rHeY_ncaygARjEpA,764
|
|
42
|
-
deepwork/standard_jobs/deepwork_jobs/templates/job.yml.example,sha256=roRi6sIGFGmPCkoVW26HfuTBjAO8-pPsxI5-Gfg3rc0,2361
|
|
43
|
-
deepwork/standard_jobs/deepwork_jobs/templates/job.yml.template,sha256=3I-VQvqXVJNZ_Vb5Ik28JsrEbGKbyLTZcuKxdEmV5s0,1789
|
|
44
|
-
deepwork/standard_jobs/deepwork_jobs/templates/step_instruction.md.example,sha256=HXcjVaQz2HsDiA4ClnIeLvysVOGrFJ_5Tr-pm6dhdwc,2706
|
|
45
|
-
deepwork/standard_jobs/deepwork_jobs/templates/step_instruction.md.template,sha256=6n9jFFuda4r549Oo-LBPKixFD3NvDl5MwEg5V7ItQBg,1286
|
|
46
|
-
deepwork/standard_jobs/deepwork_rules/job.yml,sha256=JOLz2ISfG9PvKaQjOpEn9oLMY2HBaL-aRzKQDWKdvr0,2509
|
|
47
|
-
deepwork/standard_jobs/deepwork_rules/hooks/capture_prompt_work_tree.sh,sha256=_roTZwALNfgR_hlhJ-HiH8a0tulMyxEi8eYFr8iwxtQ,1737
|
|
48
|
-
deepwork/standard_jobs/deepwork_rules/hooks/global_hooks.yml,sha256=uZkGMROaICKik6-Mfa1dM-8608Y9L-VrYG5YAbVN8yw,186
|
|
49
|
-
deepwork/standard_jobs/deepwork_rules/hooks/user_prompt_submit.sh,sha256=TxwYb7kBW-cfHmcQoruJBjCTWvdWbQVQIMplNgzMuOs,498
|
|
50
|
-
deepwork/standard_jobs/deepwork_rules/rules/.gitkeep,sha256=tOhdLTAbVXm_Z4Gl85recPNonTC0kFwzw6NKpeqTmH8,337
|
|
51
|
-
deepwork/standard_jobs/deepwork_rules/rules/api-documentation-sync.md.example,sha256=YaTuv-LseeqYSG6mk2LzORfyGJ0bGaXuTB8IJkwzrDI,260
|
|
52
|
-
deepwork/standard_jobs/deepwork_rules/rules/readme-documentation.md.example,sha256=2uZHS-LjZfL81i7COJvIA0Q5lqa-aWyLx060ouSnlrw,305
|
|
53
|
-
deepwork/standard_jobs/deepwork_rules/rules/security-review.md.example,sha256=gPAk5bWLqXm5mO6vlYAU7FGDQbNlXE-Fuf2mU4sru80,285
|
|
54
|
-
deepwork/standard_jobs/deepwork_rules/rules/skill-md-validation.md,sha256=H-o8X92AerumY2nimLzX-PniN2FGWAPI4tNGMpEo7nM,1457
|
|
55
|
-
deepwork/standard_jobs/deepwork_rules/rules/source-test-pairing.md.example,sha256=Uwg0l85nB69yY8MWwF46EUwx3UJ3qIHXb2ywxp_VNW0,320
|
|
56
|
-
deepwork/standard_jobs/deepwork_rules/steps/define.md,sha256=TP3j90bh0zsGQniAo2GkX9xbLtB_XkaA4IudcbAZ0YY,8349
|
|
57
|
-
deepwork/templates/__init__.py,sha256=APvjx_u7eRUerw9yA_fJ1ZqCzYA-FWUCV9HCz0RgjOc,50
|
|
58
|
-
deepwork/templates/claude/AGENTS.md,sha256=7ickAhY8fNWhNCXPMG5nm6Jmv-XJvDM0PKC41EiQKyU,1828
|
|
59
|
-
deepwork/templates/claude/skill-job-meta.md.jinja,sha256=SsK-_Tz5eeieaYGg9Q7S-MuaqbG7alWbKA0p2RcxhAg,2363
|
|
60
|
-
deepwork/templates/claude/skill-job-step.md.jinja,sha256=L42OQbD1HCq8idIH5kYIZQY9rwuO3DTRrsfn_6jkLPU,8549
|
|
61
|
-
deepwork/templates/gemini/skill-job-meta.toml.jinja,sha256=FOkRNP3pGbvwcwwt3k6WF_qsCIkj1AbLYtF3mlkqAsA,2157
|
|
62
|
-
deepwork/templates/gemini/skill-job-step.toml.jinja,sha256=GFVsHdPet5buy3TM6CcZ9pepVT2re0G4WABJ1CCS5y8,4845
|
|
63
|
-
deepwork/utils/__init__.py,sha256=AtvE49IFI8Rg36O4cNIlzB-oxvkW3apFgXExn8GSk6s,38
|
|
64
|
-
deepwork/utils/fs.py,sha256=TbkcGGqck4lborFerbBLrpVMDUz3E5ZaW6X0_B2t76k,4821
|
|
65
|
-
deepwork/utils/git.py,sha256=J4tAB1zE6-WMAEHbarevhmSvvPLkeKBpiRv1UxUVwYk,3748
|
|
66
|
-
deepwork/utils/validation.py,sha256=SyFg9fIu1JCDMbssQgJRCTUNToDNcINccn8lje-tjts,851
|
|
67
|
-
deepwork/utils/yaml_utils.py,sha256=INHhOmzC38fh7HYKLrq7vmS3dcuNsigH7_U71erS-hw,3127
|
|
68
|
-
deepwork-0.5.1.dist-info/METADATA,sha256=y8X5xPFKdLEdrEqg5Hhx4KvRYXqE8r7R9VH3EaW-lT4,13363
|
|
69
|
-
deepwork-0.5.1.dist-info/WHEEL,sha256=WLgqFyCfm_KASv4WHyYy0P3pM_m7J5L9k2skdKLirC8,87
|
|
70
|
-
deepwork-0.5.1.dist-info/entry_points.txt,sha256=RhJBySzm619kh-yIdsAyfFXInAlY8Jm-39FLIBcOj2s,51
|
|
71
|
-
deepwork-0.5.1.dist-info/licenses/LICENSE.md,sha256=W0EtJVYf0cQ_awukOCW1ETwNSpV2RKqnAGfoOjyz_K8,4126
|
|
72
|
-
deepwork-0.5.1.dist-info/RECORD,,
|
|
File without changes
|
|
File without changes
|
|
File without changes
|