project-kit-cli 0.5.0__tar.gz → 0.5.1__tar.gz
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.
- project_kit_cli-0.5.0/README.md → project_kit_cli-0.5.1/PKG-INFO +27 -20
- project_kit_cli-0.5.0/PKG-INFO → project_kit_cli-0.5.1/README.md +9 -40
- {project_kit_cli-0.5.0 → project_kit_cli-0.5.1}/pyproject.toml +1 -5
- {project_kit_cli-0.5.0 → project_kit_cli-0.5.1}/pyproject.toml.orig +1 -5
- project_kit_cli-0.5.1/src/project_kit/assets/docs/agents.md +20 -0
- project_kit_cli-0.5.1/src/project_kit/assets/docs/backlog-schema.md +81 -0
- project_kit_cli-0.5.1/src/project_kit/assets/docs/handoff.md +128 -0
- project_kit_cli-0.5.1/src/project_kit/assets/docs/provisioning.md +136 -0
- project_kit_cli-0.5.1/src/project_kit/assets/docs/skills.md +63 -0
- project_kit_cli-0.5.1/src/project_kit/assets/docs/statusline.md +58 -0
- project_kit_cli-0.5.1/src/project_kit/assets/docs/upgrade.md +47 -0
- {project_kit_cli-0.5.0 → project_kit_cli-0.5.1}/src/project_kit/backlog.py +1 -1
- {project_kit_cli-0.5.0 → project_kit_cli-0.5.1}/src/project_kit/cli.py +18 -0
- {project_kit_cli-0.5.0 → project_kit_cli-0.5.1}/src/project_kit/help.py +1 -0
- project_kit_cli-0.5.1/src/project_kit/userdocs.py +41 -0
- {project_kit_cli-0.5.0 → project_kit_cli-0.5.1}/LICENSE +0 -0
- {project_kit_cli-0.5.0 → project_kit_cli-0.5.1}/src/project_kit/__init__.py +0 -0
- {project_kit_cli-0.5.0 → project_kit_cli-0.5.1}/src/project_kit/__main__.py +0 -0
- {project_kit_cli-0.5.0 → project_kit_cli-0.5.1}/src/project_kit/agents.py +0 -0
- {project_kit_cli-0.5.0 → project_kit_cli-0.5.1}/src/project_kit/ai_attribution.py +0 -0
- {project_kit_cli-0.5.0 → project_kit_cli-0.5.1}/src/project_kit/approval.py +0 -0
- {project_kit_cli-0.5.0 → project_kit_cli-0.5.1}/src/project_kit/assets/hooks/commit-msg +0 -0
- {project_kit_cli-0.5.0 → project_kit_cli-0.5.1}/src/project_kit/assets/project/skills-catalog.yml +0 -0
- {project_kit_cli-0.5.0 → project_kit_cli-0.5.1}/src/project_kit/assets/project/workflow.yml +0 -0
- {project_kit_cli-0.5.0 → project_kit_cli-0.5.1}/src/project_kit/assets/skills/pk-amend/SKILL.md +0 -0
- {project_kit_cli-0.5.0 → project_kit_cli-0.5.1}/src/project_kit/assets/skills/pk-decide/SKILL.md +0 -0
- {project_kit_cli-0.5.0 → project_kit_cli-0.5.1}/src/project_kit/assets/skills/pk-discover/SKILL.md +0 -0
- {project_kit_cli-0.5.0 → project_kit_cli-0.5.1}/src/project_kit/assets/skills/pk-foundations/SKILL.md +0 -0
- {project_kit_cli-0.5.0 → project_kit_cli-0.5.1}/src/project_kit/assets/skills/pk-grill/SKILL.md +0 -0
- {project_kit_cli-0.5.0 → project_kit_cli-0.5.1}/src/project_kit/assets/skills/pk-handoff/SKILL.md +0 -0
- {project_kit_cli-0.5.0 → project_kit_cli-0.5.1}/src/project_kit/assets/skills/pk-import/SKILL.md +0 -0
- {project_kit_cli-0.5.0 → project_kit_cli-0.5.1}/src/project_kit/assets/skills/pk-next/SKILL.md +0 -0
- {project_kit_cli-0.5.0 → project_kit_cli-0.5.1}/src/project_kit/assets/skills/pk-plan/SKILL.md +0 -0
- {project_kit_cli-0.5.0 → project_kit_cli-0.5.1}/src/project_kit/assets/skills/pk-provision/SKILL.md +0 -0
- {project_kit_cli-0.5.0 → project_kit_cli-0.5.1}/src/project_kit/assets/skills/pk-skills/SKILL.md +0 -0
- {project_kit_cli-0.5.0 → project_kit_cli-0.5.1}/src/project_kit/assets/skills/pk-start/SKILL.md +0 -0
- {project_kit_cli-0.5.0 → project_kit_cli-0.5.1}/src/project_kit/assets/skills/pk-verify/SKILL.md +0 -0
- {project_kit_cli-0.5.0 → project_kit_cli-0.5.1}/src/project_kit/assets/skills/pk-workflow/SKILL.md +0 -0
- {project_kit_cli-0.5.0 → project_kit_cli-0.5.1}/src/project_kit/assets/subagents/pk-reviewer.md +0 -0
- {project_kit_cli-0.5.0 → project_kit_cli-0.5.1}/src/project_kit/assets/templates/adr.md +0 -0
- {project_kit_cli-0.5.0 → project_kit_cli-0.5.1}/src/project_kit/assets/templates/backlog.example.json +0 -0
- {project_kit_cli-0.5.0 → project_kit_cli-0.5.1}/src/project_kit/assets/templates/brief.md +0 -0
- {project_kit_cli-0.5.0 → project_kit_cli-0.5.1}/src/project_kit/assets/templates/constitution-input.md +0 -0
- {project_kit_cli-0.5.0 → project_kit_cli-0.5.1}/src/project_kit/assets/templates/development-workflow.md +0 -0
- {project_kit_cli-0.5.0 → project_kit_cli-0.5.1}/src/project_kit/assets/templates/github/ISSUE_TEMPLATE/adr.yml +0 -0
- {project_kit_cli-0.5.0 → project_kit_cli-0.5.1}/src/project_kit/assets/templates/github/ISSUE_TEMPLATE/bug.yml +0 -0
- {project_kit_cli-0.5.0 → project_kit_cli-0.5.1}/src/project_kit/assets/templates/github/ISSUE_TEMPLATE/config.yml +0 -0
- {project_kit_cli-0.5.0 → project_kit_cli-0.5.1}/src/project_kit/assets/templates/github/ISSUE_TEMPLATE/epic.yml +0 -0
- {project_kit_cli-0.5.0 → project_kit_cli-0.5.1}/src/project_kit/assets/templates/github/ISSUE_TEMPLATE/feature.yml +0 -0
- {project_kit_cli-0.5.0 → project_kit_cli-0.5.1}/src/project_kit/assets/templates/github/pull_request_template.md +0 -0
- {project_kit_cli-0.5.0 → project_kit_cli-0.5.1}/src/project_kit/assets/templates/gitlab/issue_templates/adr.md +0 -0
- {project_kit_cli-0.5.0 → project_kit_cli-0.5.1}/src/project_kit/assets/templates/gitlab/issue_templates/bug.md +0 -0
- {project_kit_cli-0.5.0 → project_kit_cli-0.5.1}/src/project_kit/assets/templates/gitlab/issue_templates/epic.md +0 -0
- {project_kit_cli-0.5.0 → project_kit_cli-0.5.1}/src/project_kit/assets/templates/gitlab/issue_templates/feature.md +0 -0
- {project_kit_cli-0.5.0 → project_kit_cli-0.5.1}/src/project_kit/assets/templates/gitlab/merge_request_templates/Default.md +0 -0
- {project_kit_cli-0.5.0 → project_kit_cli-0.5.1}/src/project_kit/assets/templates/interview.md +0 -0
- {project_kit_cli-0.5.0 → project_kit_cli-0.5.1}/src/project_kit/claude_hooks.py +0 -0
- {project_kit_cli-0.5.0 → project_kit_cli-0.5.1}/src/project_kit/config.py +0 -0
- {project_kit_cli-0.5.0 → project_kit_cli-0.5.1}/src/project_kit/context_files.py +0 -0
- {project_kit_cli-0.5.0 → project_kit_cli-0.5.1}/src/project_kit/doctor.py +0 -0
- {project_kit_cli-0.5.0 → project_kit_cli-0.5.1}/src/project_kit/entry.py +0 -0
- {project_kit_cli-0.5.0 → project_kit_cli-0.5.1}/src/project_kit/fsutil.py +0 -0
- {project_kit_cli-0.5.0 → project_kit_cli-0.5.1}/src/project_kit/gh.py +0 -0
- {project_kit_cli-0.5.0 → project_kit_cli-0.5.1}/src/project_kit/glab.py +0 -0
- {project_kit_cli-0.5.0 → project_kit_cli-0.5.1}/src/project_kit/handoff.py +0 -0
- {project_kit_cli-0.5.0 → project_kit_cli-0.5.1}/src/project_kit/installer.py +0 -0
- {project_kit_cli-0.5.0 → project_kit_cli-0.5.1}/src/project_kit/labels.py +0 -0
- {project_kit_cli-0.5.0 → project_kit_cli-0.5.1}/src/project_kit/manifest.py +0 -0
- {project_kit_cli-0.5.0 → project_kit_cli-0.5.1}/src/project_kit/next_step.py +0 -0
- {project_kit_cli-0.5.0 → project_kit_cli-0.5.1}/src/project_kit/project_choice.py +0 -0
- {project_kit_cli-0.5.0 → project_kit_cli-0.5.1}/src/project_kit/providers/__init__.py +0 -0
- {project_kit_cli-0.5.0 → project_kit_cli-0.5.1}/src/project_kit/providers/github.py +0 -0
- {project_kit_cli-0.5.0 → project_kit_cli-0.5.1}/src/project_kit/providers/gitlab.py +0 -0
- {project_kit_cli-0.5.0 → project_kit_cli-0.5.1}/src/project_kit/provision.py +0 -0
- {project_kit_cli-0.5.0 → project_kit_cli-0.5.1}/src/project_kit/provision_gitlab.py +0 -0
- {project_kit_cli-0.5.0 → project_kit_cli-0.5.1}/src/project_kit/provision_issues.py +0 -0
- {project_kit_cli-0.5.0 → project_kit_cli-0.5.1}/src/project_kit/skills.py +0 -0
- {project_kit_cli-0.5.0 → project_kit_cli-0.5.1}/src/project_kit/sources.py +0 -0
- {project_kit_cli-0.5.0 → project_kit_cli-0.5.1}/src/project_kit/state.py +0 -0
- {project_kit_cli-0.5.0 → project_kit_cli-0.5.1}/src/project_kit/statusline.py +0 -0
- {project_kit_cli-0.5.0 → project_kit_cli-0.5.1}/src/project_kit/templating.py +0 -0
- {project_kit_cli-0.5.0 → project_kit_cli-0.5.1}/src/project_kit/trace.py +0 -0
- {project_kit_cli-0.5.0 → project_kit_cli-0.5.1}/src/project_kit/upgrade.py +0 -0
- {project_kit_cli-0.5.0 → project_kit_cli-0.5.1}/src/project_kit/workflow.py +0 -0
|
@@ -1,7 +1,25 @@
|
|
|
1
|
+
Metadata-Version: 2.4
|
|
2
|
+
Name: project-kit-cli
|
|
3
|
+
Version: 0.5.1
|
|
4
|
+
Summary: Project definition and dev-workflow kit that hands off to Spec Kit
|
|
5
|
+
Keywords: project-management,spec-kit,claude-code,workflow,github
|
|
6
|
+
Author: Miguel Tomás
|
|
7
|
+
License-Expression: MIT
|
|
8
|
+
License-File: LICENSE
|
|
9
|
+
Classifier: Development Status :: 3 - Alpha
|
|
10
|
+
Classifier: Environment :: Console
|
|
11
|
+
Classifier: Intended Audience :: Developers
|
|
12
|
+
Classifier: Operating System :: OS Independent
|
|
13
|
+
Classifier: Programming Language :: Python :: 3.12
|
|
14
|
+
Classifier: Topic :: Software Development
|
|
15
|
+
Requires-Dist: pyyaml>=6.0.3
|
|
16
|
+
Requires-Python: >=3.12
|
|
17
|
+
Description-Content-Type: text/markdown
|
|
18
|
+
|
|
1
19
|
# project-kit
|
|
2
20
|
|
|
3
21
|
[](https://pypi.org/project/project-kit-cli/)
|
|
4
|
-
[](https://
|
|
22
|
+
[](https://pypi.org/project/project-kit-cli/)
|
|
5
23
|
|
|
6
24
|
**Everything that happens before the first line of code.** project-kit guides you, with an AI
|
|
7
25
|
agent, through defining a project, deciding its stack and architecture, agreeing how the team
|
|
@@ -49,8 +67,7 @@ installing: `uvx --from project-kit-cli pjkit help`.
|
|
|
49
67
|
**Updating a project.** `init` copies the skills and templates into your repository and never
|
|
50
68
|
overwrites them, so a new version of the program does not change a project that already exists.
|
|
51
69
|
Run `pjkit upgrade` inside it to see what is out of date, and `pjkit upgrade --apply`
|
|
52
|
-
to bring it up to date. Files you edited are never overwritten; see
|
|
53
|
-
[upgrading](https://github.com/miguelmatg/project-kit/blob/main/docs/upgrade.md).
|
|
70
|
+
to bring it up to date. Files you edited are never overwritten; see `pjkit docs upgrade`.
|
|
54
71
|
|
|
55
72
|
## Quick start
|
|
56
73
|
|
|
@@ -207,14 +224,13 @@ plans) and where the project is in the flow:
|
|
|
207
224
|
`.claude/settings.json` (`--remove` undoes it). It is never turned on without a yes. If you
|
|
208
225
|
already have a status bar, yours is kept and runs first. It is one line: when the terminal is
|
|
209
226
|
narrow, the cost goes first, then the 7-day limit, the effort and the context. The cost is an
|
|
210
|
-
estimate at list price. More in
|
|
211
|
-
[docs/statusline.md](https://github.com/miguelmatg/project-kit/blob/main/docs/statusline.md).
|
|
227
|
+
estimate at list price. More in `pjkit docs statusline`.
|
|
212
228
|
|
|
213
229
|
## GitLab
|
|
214
230
|
|
|
215
231
|
`pjkit init --provider gitlab` makes `provision` use `glab`: phases become milestones, kind,
|
|
216
232
|
priority, size and status become labels, and an issue board named `project-kit` is built from the
|
|
217
|
-
status labels. Details in
|
|
233
|
+
status labels. Details in `pjkit docs provisioning`.
|
|
218
234
|
|
|
219
235
|
## Generating a project without GitHub
|
|
220
236
|
|
|
@@ -228,8 +244,7 @@ project-kit keeps a catalog of third-party skills (UI/UX, motion, accessibility,
|
|
|
228
244
|
architecture, browser testing, `grill-me`, `find-skills`...) in `.project-kit/skills-catalog.yml`.
|
|
229
245
|
`/pk-skills` recommends the ones that fit your brief and decisions, warns when a task would
|
|
230
246
|
benefit from one you do not have, and records the answer in `.project-kit/skills.yml`. project-kit
|
|
231
|
-
never installs a skill: it shows the command and you run it; `pjkit skills detect` records the ones you already have. How the entries were chosen
|
|
232
|
-
[docs/skills.md](https://github.com/miguelmatg/project-kit/blob/main/docs/skills.md).
|
|
247
|
+
never installs a skill: it shows the command and you run it; `pjkit skills detect` records the ones you already have. How the entries were chosen: `pjkit docs skills`.
|
|
233
248
|
|
|
234
249
|
## AI co-author
|
|
235
250
|
|
|
@@ -267,18 +282,10 @@ docs/adr/ one file per decision (created by the phases)
|
|
|
267
282
|
|
|
268
283
|
## Documentation
|
|
269
284
|
|
|
270
|
-
|
|
271
|
-
|
|
272
|
-
|
|
273
|
-
[provisioning](https://github.com/miguelmatg/project-kit/blob/main/docs/provisioning.md) and
|
|
274
|
-
[Spec Kit handoff](https://github.com/miguelmatg/project-kit/blob/main/docs/handoff.md).
|
|
275
|
-
|
|
276
|
-
## Feedback
|
|
277
|
-
|
|
278
|
-
Ideas and bug reports are welcome as
|
|
279
|
-
[issues](https://github.com/miguelmatg/project-kit/issues). Pull requests are not accepted; see
|
|
280
|
-
[CONTRIBUTING](https://github.com/miguelmatg/project-kit/blob/main/CONTRIBUTING.md).
|
|
285
|
+
The detailed guides ship with the program (in Spanish). `pjkit docs` lists them and
|
|
286
|
+
`pjkit docs <topic>` prints one: `upgrade`, `provisioning`, `handoff`, `backlog-schema`, `skills`,
|
|
287
|
+
`statusline` and `agents`.
|
|
281
288
|
|
|
282
289
|
## License
|
|
283
290
|
|
|
284
|
-
|
|
291
|
+
MIT.
|
|
@@ -1,27 +1,7 @@
|
|
|
1
|
-
Metadata-Version: 2.4
|
|
2
|
-
Name: project-kit-cli
|
|
3
|
-
Version: 0.5.0
|
|
4
|
-
Summary: Project definition and dev-workflow kit that hands off to Spec Kit
|
|
5
|
-
Keywords: project-management,spec-kit,claude-code,workflow,github
|
|
6
|
-
Author: Miguel Tomás
|
|
7
|
-
License-Expression: MIT
|
|
8
|
-
License-File: LICENSE
|
|
9
|
-
Classifier: Development Status :: 3 - Alpha
|
|
10
|
-
Classifier: Environment :: Console
|
|
11
|
-
Classifier: Intended Audience :: Developers
|
|
12
|
-
Classifier: Operating System :: OS Independent
|
|
13
|
-
Classifier: Programming Language :: Python :: 3.12
|
|
14
|
-
Classifier: Topic :: Software Development
|
|
15
|
-
Requires-Dist: pyyaml>=6.0.3
|
|
16
|
-
Requires-Python: >=3.12
|
|
17
|
-
Project-URL: Repository, https://github.com/miguelmatg/project-kit
|
|
18
|
-
Project-URL: Issues, https://github.com/miguelmatg/project-kit/issues
|
|
19
|
-
Description-Content-Type: text/markdown
|
|
20
|
-
|
|
21
1
|
# project-kit
|
|
22
2
|
|
|
23
3
|
[](https://pypi.org/project/project-kit-cli/)
|
|
24
|
-
[](https://
|
|
4
|
+
[](https://pypi.org/project/project-kit-cli/)
|
|
25
5
|
|
|
26
6
|
**Everything that happens before the first line of code.** project-kit guides you, with an AI
|
|
27
7
|
agent, through defining a project, deciding its stack and architecture, agreeing how the team
|
|
@@ -69,8 +49,7 @@ installing: `uvx --from project-kit-cli pjkit help`.
|
|
|
69
49
|
**Updating a project.** `init` copies the skills and templates into your repository and never
|
|
70
50
|
overwrites them, so a new version of the program does not change a project that already exists.
|
|
71
51
|
Run `pjkit upgrade` inside it to see what is out of date, and `pjkit upgrade --apply`
|
|
72
|
-
to bring it up to date. Files you edited are never overwritten; see
|
|
73
|
-
[upgrading](https://github.com/miguelmatg/project-kit/blob/main/docs/upgrade.md).
|
|
52
|
+
to bring it up to date. Files you edited are never overwritten; see `pjkit docs upgrade`.
|
|
74
53
|
|
|
75
54
|
## Quick start
|
|
76
55
|
|
|
@@ -227,14 +206,13 @@ plans) and where the project is in the flow:
|
|
|
227
206
|
`.claude/settings.json` (`--remove` undoes it). It is never turned on without a yes. If you
|
|
228
207
|
already have a status bar, yours is kept and runs first. It is one line: when the terminal is
|
|
229
208
|
narrow, the cost goes first, then the 7-day limit, the effort and the context. The cost is an
|
|
230
|
-
estimate at list price. More in
|
|
231
|
-
[docs/statusline.md](https://github.com/miguelmatg/project-kit/blob/main/docs/statusline.md).
|
|
209
|
+
estimate at list price. More in `pjkit docs statusline`.
|
|
232
210
|
|
|
233
211
|
## GitLab
|
|
234
212
|
|
|
235
213
|
`pjkit init --provider gitlab` makes `provision` use `glab`: phases become milestones, kind,
|
|
236
214
|
priority, size and status become labels, and an issue board named `project-kit` is built from the
|
|
237
|
-
status labels. Details in
|
|
215
|
+
status labels. Details in `pjkit docs provisioning`.
|
|
238
216
|
|
|
239
217
|
## Generating a project without GitHub
|
|
240
218
|
|
|
@@ -248,8 +226,7 @@ project-kit keeps a catalog of third-party skills (UI/UX, motion, accessibility,
|
|
|
248
226
|
architecture, browser testing, `grill-me`, `find-skills`...) in `.project-kit/skills-catalog.yml`.
|
|
249
227
|
`/pk-skills` recommends the ones that fit your brief and decisions, warns when a task would
|
|
250
228
|
benefit from one you do not have, and records the answer in `.project-kit/skills.yml`. project-kit
|
|
251
|
-
never installs a skill: it shows the command and you run it; `pjkit skills detect` records the ones you already have. How the entries were chosen
|
|
252
|
-
[docs/skills.md](https://github.com/miguelmatg/project-kit/blob/main/docs/skills.md).
|
|
229
|
+
never installs a skill: it shows the command and you run it; `pjkit skills detect` records the ones you already have. How the entries were chosen: `pjkit docs skills`.
|
|
253
230
|
|
|
254
231
|
## AI co-author
|
|
255
232
|
|
|
@@ -287,18 +264,10 @@ docs/adr/ one file per decision (created by the phases)
|
|
|
287
264
|
|
|
288
265
|
## Documentation
|
|
289
266
|
|
|
290
|
-
|
|
291
|
-
|
|
292
|
-
|
|
293
|
-
[provisioning](https://github.com/miguelmatg/project-kit/blob/main/docs/provisioning.md) and
|
|
294
|
-
[Spec Kit handoff](https://github.com/miguelmatg/project-kit/blob/main/docs/handoff.md).
|
|
295
|
-
|
|
296
|
-
## Feedback
|
|
297
|
-
|
|
298
|
-
Ideas and bug reports are welcome as
|
|
299
|
-
[issues](https://github.com/miguelmatg/project-kit/issues). Pull requests are not accepted; see
|
|
300
|
-
[CONTRIBUTING](https://github.com/miguelmatg/project-kit/blob/main/CONTRIBUTING.md).
|
|
267
|
+
The detailed guides ship with the program (in Spanish). `pjkit docs` lists them and
|
|
268
|
+
`pjkit docs <topic>` prints one: `upgrade`, `provisioning`, `handoff`, `backlog-schema`, `skills`,
|
|
269
|
+
`statusline` and `agents`.
|
|
301
270
|
|
|
302
271
|
## License
|
|
303
272
|
|
|
304
|
-
|
|
273
|
+
MIT.
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
[project]
|
|
2
2
|
name = "project-kit-cli"
|
|
3
|
-
version = "0.5.
|
|
3
|
+
version = "0.5.1"
|
|
4
4
|
description = "Project definition and dev-workflow kit that hands off to Spec Kit"
|
|
5
5
|
readme = "README.md"
|
|
6
6
|
requires-python = ">=3.12"
|
|
@@ -26,10 +26,6 @@ dependencies = ["pyyaml>=6.0.3"]
|
|
|
26
26
|
[[project.authors]]
|
|
27
27
|
name = "Miguel Tomás"
|
|
28
28
|
|
|
29
|
-
[project.urls]
|
|
30
|
-
Repository = "https://github.com/miguelmatg/project-kit"
|
|
31
|
-
Issues = "https://github.com/miguelmatg/project-kit/issues"
|
|
32
|
-
|
|
33
29
|
[project.scripts]
|
|
34
30
|
pjkit = "project_kit.entry:main"
|
|
35
31
|
|
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
[project]
|
|
2
2
|
name = "project-kit-cli"
|
|
3
|
-
version = "0.5.
|
|
3
|
+
version = "0.5.1"
|
|
4
4
|
description = "Project definition and dev-workflow kit that hands off to Spec Kit"
|
|
5
5
|
readme = "README.md"
|
|
6
6
|
requires-python = ">=3.12"
|
|
@@ -20,10 +20,6 @@ dependencies = [
|
|
|
20
20
|
"pyyaml>=6.0.3",
|
|
21
21
|
]
|
|
22
22
|
|
|
23
|
-
[project.urls]
|
|
24
|
-
Repository = "https://github.com/miguelmatg/project-kit"
|
|
25
|
-
Issues = "https://github.com/miguelmatg/project-kit/issues"
|
|
26
|
-
|
|
27
23
|
[project.scripts]
|
|
28
24
|
pjkit = "project_kit.entry:main"
|
|
29
25
|
|
|
@@ -0,0 +1,20 @@
|
|
|
1
|
+
# Agentes de IA
|
|
2
|
+
|
|
3
|
+
`pjkit init --agents claude,codex,...` instala las skills donde cada agente las lee y, al
|
|
4
|
+
terminar el handoff, escribe su fichero de contexto. Esta tabla recoge lo que **dice la
|
|
5
|
+
documentación oficial** (comprobada el 2026-10-18) y lo que no pudo confirmarse.
|
|
6
|
+
|
|
7
|
+
| Agente | Skills del proyecto | Contexto | Lo que se confirmó |
|
|
8
|
+
|---|---|---|---|
|
|
9
|
+
| Claude Code | `.claude/skills` | `CLAUDE.md` | Rutas conocidas del propio producto |
|
|
10
|
+
| Codex CLI | `.agents/skills` | `AGENTS.md` | Skills: documentación de Codex. `AGENTS.md`: su documentación lo enlaza, pero la página consultada no explica la relación |
|
|
11
|
+
| Gemini CLI | `.agents/skills` (alias de `.gemini/skills`) | `GEMINI.md` | Skills y `GEMINI.md`: documentación oficial. `.agents/skills` gana a `.gemini/skills` si hay conflicto |
|
|
12
|
+
| GitHub Copilot | `.agents/skills` (también lee `.github/skills` y `.claude/skills`) | `AGENTS.md` | Skills: documentación oficial. `AGENTS.md`: anuncio oficial para el agente de código; **no se pudo confirmar para Copilot CLI** |
|
|
13
|
+
| Cursor | `.agents/skills` (también `.cursor/skills`) | `AGENTS.md` | Skills: documentación oficial. **`AGENTS.md` no pudo confirmarse en la documentación de Cursor**; hay fuentes de terceros que sí lo afirman |
|
|
14
|
+
|
|
15
|
+
Como Codex, Gemini, Copilot y Cursor comparten `.agents/skills`, las skills se instalan una vez.
|
|
16
|
+
Solo Claude Code se arranca desde `init`: cada herramienta invoca las skills de forma distinta y
|
|
17
|
+
project-kit no lo adivina.
|
|
18
|
+
|
|
19
|
+
Si una herramienta no lee `AGENTS.md`, el bloque que escribe `pjkit context` no le llega; en ese
|
|
20
|
+
caso añade a mano una línea que lo referencie en el fichero que sí lee.
|
|
@@ -0,0 +1,81 @@
|
|
|
1
|
+
# Esquema de `backlog.json`
|
|
2
|
+
|
|
3
|
+
Fuente de verdad del backlog del proyecto. Lo genera la skill `pk-plan`, lo valida
|
|
4
|
+
`pjkit backlog validate` y lo consume `provision` para crear milestones, labels,
|
|
5
|
+
issues y los campos del Project. Vive en `.project-kit/backlog.json` del proyecto destino.
|
|
6
|
+
|
|
7
|
+
Un ejemplo completo y válido se instala en `.project-kit/templates/backlog.example.json`
|
|
8
|
+
(fuente: `src/project_kit/assets/templates/backlog.example.json`).
|
|
9
|
+
|
|
10
|
+
## Estructura
|
|
11
|
+
|
|
12
|
+
```json
|
|
13
|
+
{
|
|
14
|
+
"version": 1,
|
|
15
|
+
"phases": [ ... ],
|
|
16
|
+
"labels": [ ... ],
|
|
17
|
+
"issues": [ ... ]
|
|
18
|
+
}
|
|
19
|
+
```
|
|
20
|
+
|
|
21
|
+
Los campos desconocidos son un error (protege de erratas). La versión actual del formato es `1`.
|
|
22
|
+
|
|
23
|
+
### `phases` — fases
|
|
24
|
+
|
|
25
|
+
Cada fase es un milestone en el proveedor y una opción del campo `Phase` del Project. El orden
|
|
26
|
+
de la lista es el orden de entrega.
|
|
27
|
+
|
|
28
|
+
| Campo | Obligatorio | Descripción |
|
|
29
|
+
|---|---|---|
|
|
30
|
+
| `id` | sí | Identificador estable: minúsculas, dígitos y guiones (`mvp`, `v1-launch`) |
|
|
31
|
+
| `title` | sí | Nombre visible (`v0.1 MVP`). No puede repetirse |
|
|
32
|
+
| `description` | no | Texto del milestone |
|
|
33
|
+
|
|
34
|
+
### `labels` — labels propios (opcional)
|
|
35
|
+
|
|
36
|
+
Solo los labels **extra**. Los de tipo (`type:feature`…) y prioridad (`P0`…`P3`) los deriva
|
|
37
|
+
`provision` de cada issue y no hay que declararlos.
|
|
38
|
+
|
|
39
|
+
| Campo | Obligatorio | Descripción |
|
|
40
|
+
|---|---|---|
|
|
41
|
+
| `name` | sí | Nombre del label. No puede repetirse |
|
|
42
|
+
| `color` | no | 6 dígitos hexadecimales sin `#` (por defecto `ededed`) |
|
|
43
|
+
| `description` | no | Descripción |
|
|
44
|
+
|
|
45
|
+
### `issues` — épicas y tarjetas
|
|
46
|
+
|
|
47
|
+
| Campo | Obligatorio | Valores / descripción |
|
|
48
|
+
|---|---|---|
|
|
49
|
+
| `id` | sí | Identificador estable y único. Es la clave en `state.json` (`provider_ids.issues`), así que **no debe cambiar** una vez aprovisionado |
|
|
50
|
+
| `type` | sí | `epic`, `feature`, `adr`, `chore`, `bug`, `docs` (campo `Kind` del Project) |
|
|
51
|
+
| `phase` | sí | `id` de una fase existente |
|
|
52
|
+
| `title` | sí | Título de la issue |
|
|
53
|
+
| `priority` | sí | `P0` (crítica) a `P3` (baja) |
|
|
54
|
+
| `size` | sí | `XS`, `S`, `M`, `L`, `XL` |
|
|
55
|
+
| `parent` | no | `id` de una épica. Una épica no puede tener padre |
|
|
56
|
+
| `body` | no | Contexto en Markdown |
|
|
57
|
+
| `acceptance` | según tipo | Lista de criterios de aceptación (texto, sin `- [ ]`). **Obligatoria** (al menos uno) en `feature`, `bug` y `chore` |
|
|
58
|
+
| `labels` | no | Nombres de labels declarados en `labels` |
|
|
59
|
+
|
|
60
|
+
Las épicas enlazan a sus hijas por `parent`; `provision` genera la checklist de la épica a
|
|
61
|
+
partir de ellas.
|
|
62
|
+
|
|
63
|
+
## Reglas de validación
|
|
64
|
+
|
|
65
|
+
Se comprueban todas a la vez y se informa de cada problema:
|
|
66
|
+
|
|
67
|
+
- JSON válido, `version` soportada, sin campos desconocidos y con los tipos correctos.
|
|
68
|
+
- Ids con formato válido y sin duplicados (fases, labels e issues).
|
|
69
|
+
- `type`, `priority` y `size` dentro de los valores permitidos.
|
|
70
|
+
- Toda `phase` referenciada existe.
|
|
71
|
+
- Todo `parent` existe y es una épica; una épica no puede tener padre.
|
|
72
|
+
- Todo label usado en una issue está declarado en `labels`.
|
|
73
|
+
- Las `feature`, `bug` y `chore` tienen criterios de aceptación.
|
|
74
|
+
|
|
75
|
+
## Flujo de aprobación
|
|
76
|
+
|
|
77
|
+
1. `pk-plan` escribe `.project-kit/backlog.json`.
|
|
78
|
+
2. `pjkit backlog validate` debe pasar.
|
|
79
|
+
3. La persona usuaria aprueba el plan de forma explícita.
|
|
80
|
+
4. `pjkit approve plan` registra la aprobación en `state.json` (con fecha) y avanza la
|
|
81
|
+
fase. Se niega a hacerlo si el backlog no existe o no es válido.
|
|
@@ -0,0 +1,128 @@
|
|
|
1
|
+
# Relevo a Spec Kit
|
|
2
|
+
|
|
3
|
+
`pjkit handoff` cierra el trabajo de project-kit y deja el proyecto listo para que
|
|
4
|
+
[Spec Kit](https://github.com/github/spec-kit) defina e implemente cada spec.
|
|
5
|
+
|
|
6
|
+
```
|
|
7
|
+
pjkit handoff [--install-speckit] [--dry-run] [--yes]
|
|
8
|
+
```
|
|
9
|
+
|
|
10
|
+
El único contrato con Spec Kit es **un fichero de texto** y sus comandos públicos. project-kit
|
|
11
|
+
**no escribe nunca dentro de `.specify/`**: Spec Kit es el dueño de
|
|
12
|
+
`.specify/memory/constitution.md`.
|
|
13
|
+
|
|
14
|
+
## Qué hace
|
|
15
|
+
|
|
16
|
+
1. **Detecta Spec Kit**: el ejecutable `specify` (y su versión) y el directorio `.specify/`
|
|
17
|
+
(y la versión con la que se inicializó).
|
|
18
|
+
2. **Genera `.project-kit/handoff/constitution-input.md`**: el texto que se pasa a
|
|
19
|
+
`/speckit-constitution`, en el orden que usa su plantilla (principios, restricciones, flujo
|
|
20
|
+
de trabajo y puertas de calidad, gobierno). Es determinista: con las mismas entradas sale
|
|
21
|
+
siempre lo mismo.
|
|
22
|
+
3. **Instala Spec Kit si falta** (solo con `--install-speckit` y tras confirmar).
|
|
23
|
+
4. **Indica los pasos siguientes**, sin ejecutarlos: el comando de la constitución y la
|
|
24
|
+
relación entre las issues del backlog y las specs.
|
|
25
|
+
|
|
26
|
+
## De dónde salen los datos
|
|
27
|
+
|
|
28
|
+
| En la constitución | Origen |
|
|
29
|
+
|---|---|
|
|
30
|
+
| Nombre, idioma y nombres de las ramas | `.project-kit/config.yml` |
|
|
31
|
+
| Patrón de rama de una spec y estrategia de fusión por rama | `workflow:` de `.project-kit/config.yml` (lo escribe `/pk-workflow`) |
|
|
32
|
+
| Principios y Definition of Done | Plantilla genérica (ver abajo) |
|
|
33
|
+
| Decisiones registradas | `docs/adr/*.md`: título y, si lo tienen, el estado (`Status: Accepted`) |
|
|
34
|
+
| Documentos y fases | `docs/project/brief.md`, `docs/project/roadmap.md` y las fases del backlog, si existen |
|
|
35
|
+
| Dónde viven las reglas (índice) | Lo que existe en el proyecto: ver "Índice de reglas" |
|
|
36
|
+
| Reglas propias del proyecto | `.project-kit/handoff/constitution-extra.md`, si existe |
|
|
37
|
+
| Stack | "Definido por las decisiones" si hay ADRs; si no, "pendiente de un ADR" |
|
|
38
|
+
|
|
39
|
+
El patrón de rama y la estrategia de fusión salen de datos, no de la prosa de
|
|
40
|
+
`docs/development-workflow.md`, así que `/pk-workflow` los guarda en `config.yml` además de en
|
|
41
|
+
el documento:
|
|
42
|
+
|
|
43
|
+
```yaml
|
|
44
|
+
workflow:
|
|
45
|
+
spec_branch: "spec/<name>" # por defecto NNN-name
|
|
46
|
+
merge: # squash | merge | rebase
|
|
47
|
+
develop: squash
|
|
48
|
+
release: merge
|
|
49
|
+
main: merge
|
|
50
|
+
```
|
|
51
|
+
|
|
52
|
+
### Índice de reglas
|
|
53
|
+
|
|
54
|
+
La constitución incluye una sección **"Where the project's rules live"** que dice dónde mirar
|
|
55
|
+
para cada cosa en lugar de repetirlo en cada spec. Solo aparecen las fuentes que el proyecto
|
|
56
|
+
tiene:
|
|
57
|
+
|
|
58
|
+
- **Tareas y seguimiento**: el GitHub Project (título y URL, guardados al hacer `provision`) y
|
|
59
|
+
las issues son la fuente de verdad; una issue es una spec y su PR la cierra (`Closes #N`); no
|
|
60
|
+
hay una lista de tareas paralela; la tarjeta pasa a In progress, In review y Done.
|
|
61
|
+
- **Backlog** (`.project-kit/backlog.json`), **alcance** (`brief.md`), **hoja de ruta**
|
|
62
|
+
(`roadmap.md`), **decisiones** (`docs/adr/`), **proceso** (`docs/development-workflow.md`) y
|
|
63
|
+
las **plantillas** de PR e issues.
|
|
64
|
+
|
|
65
|
+
### Ficheros temporales
|
|
66
|
+
|
|
67
|
+
`constitution-input.md` y `constitution-extra.md` solo existen para alimentar
|
|
68
|
+
`/speckit-constitution`. Cuando la constitución real está escrita, la fuente única es ella, y
|
|
69
|
+
**`pjkit approve handoff` los borra**. Para poder aprobar, `.specify/memory/constitution.md`
|
|
70
|
+
tiene que existir y no ser ya la plantilla de Spec Kit (la plantilla vacía está llena de
|
|
71
|
+
marcadores `[EN_MAYÚSCULAS]`; una constitución escrita no tiene ninguno). Si se vuelve a ejecutar
|
|
72
|
+
`handoff` después, avisa de que ya está hecho y no recrea el fichero. Para cambiar las reglas
|
|
73
|
+
desde entonces se enmienda la constitución con `/speckit-constitution`.
|
|
74
|
+
|
|
75
|
+
### Fichero regenerable y reglas propias
|
|
76
|
+
|
|
77
|
+
`constitution-input.md` lleva la cabecera `<!-- project-kit:managed -->`: se **regenera** cada
|
|
78
|
+
vez que cambian las entradas, hasta que se aprueba el relevo. Para añadir reglas del proyecto
|
|
79
|
+
(seguridad, cumplimiento normativo, convenciones del equipo) no se edita ese fichero: se
|
|
80
|
+
escriben en **`constitution-extra.md`**, que project-kit nunca toca y se añade al final como
|
|
81
|
+
"Project-specific rules". Solo contenido de gobierno: Spec Kit rechaza peticiones de construir
|
|
82
|
+
funcionalidades. Ya no hace falta usarlo para corregir el flujo de ramas: eso sale de
|
|
83
|
+
`config.yml`.
|
|
84
|
+
|
|
85
|
+
Si alguien borra la cabecera de `constitution-input.md`, el fichero pasa a ser suyo y deja de
|
|
86
|
+
regenerarse (se avisa; para volver a generarlo basta borrarlo).
|
|
87
|
+
|
|
88
|
+
### Plantilla sobrescribible
|
|
89
|
+
|
|
90
|
+
El texto base se instala con `init` en `.project-kit/templates/constitution-input.md` y puede
|
|
91
|
+
editarse. Usa variables `{{...}}` (`project_name`, `language`, `provider`, `branches.main`,
|
|
92
|
+
`branches.release`, `branches.develop`, `spec_branch`, `merge_summary`, `stack`, `references`,
|
|
93
|
+
`decisions`, `rules_index`, `extra`). Una variable desconocida (una errata) es un error, no se
|
|
94
|
+
cuela en el resultado.
|
|
95
|
+
|
|
96
|
+
## Instalar Spec Kit
|
|
97
|
+
|
|
98
|
+
Con `--install-speckit`, project-kit muestra lo que va a ejecutar y pregunta antes (`--yes`
|
|
99
|
+
omite la pregunta):
|
|
100
|
+
|
|
101
|
+
| Situación | Comando |
|
|
102
|
+
|---|---|
|
|
103
|
+
| No hay CLI de Spec Kit | `uv tool install specify-cli` |
|
|
104
|
+
| No está inicializado en el repositorio | `specify init --here --integration claude --force --non-interactive` |
|
|
105
|
+
|
|
106
|
+
- Necesita `uv`. Si falta, lo dice y propone instalar el paquete `specify-cli` por otro medio.
|
|
107
|
+
- `specify init` **fusiona** sus ficheros con los existentes. Se ha comprobado que respeta los
|
|
108
|
+
del proyecto y los de project-kit; lo único que toca es `.claude/settings.json`, que
|
|
109
|
+
reformatea conservando su contenido.
|
|
110
|
+
- Si tras instalar el CLI no está en el PATH, indica `uv tool update-shell`.
|
|
111
|
+
- Un fallo en cualquier paso detiene el proceso.
|
|
112
|
+
|
|
113
|
+
## Versiones
|
|
114
|
+
|
|
115
|
+
project-kit se ha probado con Spec Kit **1.2.x**. Ante otra versión **avisa y continúa**:
|
|
116
|
+
como solo depende del fichero de entrada, debería seguir funcionando.
|
|
117
|
+
|
|
118
|
+
## Después del relevo
|
|
119
|
+
|
|
120
|
+
1. En Claude Code: `/speckit-constitution @.project-kit/handoff/constitution-input.md`
|
|
121
|
+
2. Opcional: mencionar `docs/project/` y `docs/adr/` en `CLAUDE.md` o `AGENTS.md`, para que
|
|
122
|
+
`/speckit-specify` y `/speckit-plan` los lean.
|
|
123
|
+
3. Cada issue del backlog es candidata a una spec; su texto sirve de entrada a
|
|
124
|
+
`/speckit-specify`.
|
|
125
|
+
4. Cuando la constitución esté creada: `pjkit approve handoff` (borra los ficheros
|
|
126
|
+
temporales del relevo).
|
|
127
|
+
|
|
128
|
+
Las skills `pk-handoff` y `pk-provision` guían estos pasos desde Claude Code.
|
|
@@ -0,0 +1,136 @@
|
|
|
1
|
+
# Provisionado en GitHub
|
|
2
|
+
|
|
3
|
+
`pjkit provision` crea en el repositorio lo que el backlog necesita: milestones, labels,
|
|
4
|
+
ramas permanentes, el Project con sus campos y las issues.
|
|
5
|
+
|
|
6
|
+
```
|
|
7
|
+
pjkit provision [--repo owner/nombre] [--project número|título] [--dry-run] [--yes]
|
|
8
|
+
```
|
|
9
|
+
|
|
10
|
+
## Cómo funciona
|
|
11
|
+
|
|
12
|
+
1. **Planifica** leyendo GitHub (solo lectura): qué existe ya.
|
|
13
|
+
2. **Muestra el plan**: lo que se va a crear y lo que ya está.
|
|
14
|
+
3. **Pide confirmación** (`[y/N]`). Sin terminal o con cualquier respuesta distinta de `y`,
|
|
15
|
+
no hace nada. `--yes` omite la pregunta.
|
|
16
|
+
4. **Aplica**, en este orden: milestones, labels, ramas, Project y campos, issues, enlaces de
|
|
17
|
+
las épicas y tarjetas del Project.
|
|
18
|
+
|
|
19
|
+
`--dry-run` hace solo los pasos 1 y 2 y no modifica nada, ni en GitHub ni en `state.json`.
|
|
20
|
+
Para aplicar hay que haber aprobado el plan (`pjkit approve plan`).
|
|
21
|
+
|
|
22
|
+
## Qué se crea
|
|
23
|
+
|
|
24
|
+
| Elemento | Origen | Detalle |
|
|
25
|
+
|---|---|---|
|
|
26
|
+
| Milestones | Una por fase del backlog | El id se guarda en `state.json` (`provider_ids.milestones`) |
|
|
27
|
+
| Labels | Derivados de las issues y declarados en `labels` | `type:epic`, `type:feature`, `type:adr`, `type:chore`, `type:docs`, `bug`, `P0`–`P3`; solo los que el backlog usa, más los declarados |
|
|
28
|
+
| Ramas | `config.yml` → `branches` | `release` y `develop` si faltan, creadas desde `main` |
|
|
29
|
+
| Project | El que ya tengas (ver abajo) o uno nuevo, `<project_name> Roadmap` por defecto | Vinculado al repositorio |
|
|
30
|
+
| Campos | Del backlog | `Phase` (una opción por fase), `Kind` (Epic, Feature, ADR, Chore, Bug, Docs), `Priority` (P0–P3), `Size` (XS–XL) y `Status` (Backlog, Ready, In progress, In review, Done) |
|
|
31
|
+
| Issues | Una por entrada del backlog | Milestone de su fase, labels de tipo y prioridad más los suyos, y un cuerpo con contexto, criterios de aceptación y una marca oculta (`<!-- project-kit:id=… -->`) |
|
|
32
|
+
| Épicas | Las issues con `parent` | La épica lleva una checklist de sus hijas; cada hija dice `Part of #N` |
|
|
33
|
+
| Tarjetas | Cada issue en el Project | Con `Status`, `Phase`, `Kind`, `Priority` y `Size` |
|
|
34
|
+
|
|
35
|
+
Las épicas se crean antes que sus hijas, para poder enlazarlas.
|
|
36
|
+
|
|
37
|
+
## Idempotencia y reanudación
|
|
38
|
+
|
|
39
|
+
- Solo se crea lo que **falta**. Lo que ya existe no se toca, aunque su color, descripción o
|
|
40
|
+
contenido sean distintos: nunca se pisan ediciones manuales.
|
|
41
|
+
- Ejecutarlo dos veces seguidas no cambia nada y la segunda no pregunta. Si el estado local se
|
|
42
|
+
perdió pero todo existe en GitHub, esa ejecución lo reconstruye sin escribir en GitHub.
|
|
43
|
+
- Cada issue se reconoce por su marca oculta, además de por `state.json`: perder el estado no
|
|
44
|
+
duplica issues.
|
|
45
|
+
- Si algo falla a mitad (GitHub da 502 o limita las peticiones), el progreso queda guardado y
|
|
46
|
+
basta con repetir el comando. Cada ejecución vuelve a leer GitHub, no confía en un plan
|
|
47
|
+
anterior.
|
|
48
|
+
|
|
49
|
+
## Qué no se pisa nunca
|
|
50
|
+
|
|
51
|
+
- **Issues existentes:** no se reescriben el título ni el cuerpo. La única excepción es el
|
|
52
|
+
bloque de hijas de una épica (entre `project-kit:children:start` y `end`), que es de
|
|
53
|
+
project-kit: se actualiza al añadir hijas y **conserva las casillas que ya marcaste**.
|
|
54
|
+
- **Campos del Project:** solo se rellenan los **vacíos**. Una tarjeta que moviste de columna
|
|
55
|
+
o a la que cambiaste la prioridad se queda como la dejaste. `Status` se pone a `Backlog` una
|
|
56
|
+
sola vez, al añadir la tarjeta.
|
|
57
|
+
- **Opciones de campo:** al añadir una fase nueva se añade su opción a `Phase` conservando las
|
|
58
|
+
existentes (y los valores ya asignados).
|
|
59
|
+
- **`Status` personalizado:** solo se sustituye si es el que trae GitHub por defecto
|
|
60
|
+
(`Todo`, `In Progress`, `Done`) **y** el Project no tiene tarjetas todavía, porque
|
|
61
|
+
sustituirlo reinicia el estado de las tarjetas existentes. En cualquier otro caso se deja
|
|
62
|
+
tal cual y se avisa de las opciones que faltan.
|
|
63
|
+
|
|
64
|
+
## Condiciones que bloquean
|
|
65
|
+
|
|
66
|
+
Se informan con `BLOCKING` y no se aplica nada:
|
|
67
|
+
|
|
68
|
+
- `branches.main` de `config.yml` no es la rama por defecto del repositorio.
|
|
69
|
+
- El repositorio no tiene commits: las ramas nuevas se crean a partir de `main`, así que hace
|
|
70
|
+
falta un commit inicial.
|
|
71
|
+
|
|
72
|
+
## Límite de peticiones de GitHub
|
|
73
|
+
|
|
74
|
+
Con backlogs grandes GitHub puede limitar las peticiones. project-kit lo detecta, lo explica
|
|
75
|
+
("espera un minuto y repite") y **no reintenta a ciegas**; como el progreso está guardado,
|
|
76
|
+
repetir el comando continúa donde se quedó.
|
|
77
|
+
|
|
78
|
+
## Protección de ramas
|
|
79
|
+
|
|
80
|
+
Los repositorios **privados con plan gratuito no permiten** proteger ramas ni crear rulesets.
|
|
81
|
+
project-kit lo detecta consultando el endpoint de rulesets (GitHub responde un 403 con
|
|
82
|
+
"Upgrade to GitHub Pro or make this repository public") y, en ese caso:
|
|
83
|
+
|
|
84
|
+
- **no intenta** proteger ninguna rama,
|
|
85
|
+
- lo indica en cada ejecución,
|
|
86
|
+
- y la política de ramas debe cumplirse **por disciplina**: todo entra por PR hacia `develop`,
|
|
87
|
+
y `release` y `main` solo por promoción.
|
|
88
|
+
|
|
89
|
+
Cuando el repositorio sea público o el plan lo permita, project-kit lo reconoce y lo indica,
|
|
90
|
+
pero **todavía no configura la protección**: hay que activarla a mano.
|
|
91
|
+
|
|
92
|
+
## Qué Project se usa
|
|
93
|
+
|
|
94
|
+
Antes de crear nada, `provision` busca los Projects **ya vinculados al repositorio** (y uno con
|
|
95
|
+
el título por defecto, aunque no esté vinculado), de modo que funciona igual en un repositorio
|
|
96
|
+
nuevo que en uno que ya tiene su tablero:
|
|
97
|
+
|
|
98
|
+
| Encuentra | Con terminal | Sin terminal o con `--yes` |
|
|
99
|
+
|---|---|---|
|
|
100
|
+
| Ninguno | Pregunta el nombre (Intro: `<project_name> Roadmap`) y lo crea | Lo crea con el nombre por defecto |
|
|
101
|
+
| Uno | Pregunta si usarlo (Intro: sí); si no, pide el nombre de uno nuevo | Lo usa |
|
|
102
|
+
| Varios | Los lista para elegir, con la opción de crear uno nuevo | Se detiene y pide `--project` |
|
|
103
|
+
|
|
104
|
+
`--project` acepta el número o el título exacto de un Project abierto del propietario, o un
|
|
105
|
+
título nuevo para crearlo. Lo elegido se guarda en `.project-kit/state.json` y las siguientes
|
|
106
|
+
ejecuciones lo reutilizan sin preguntar; un `--project` explícito lo sustituye. Un `--dry-run`
|
|
107
|
+
pregunta pero no guarda nada. Los Projects cerrados se ignoran.
|
|
108
|
+
|
|
109
|
+
## Vistas del Project
|
|
110
|
+
|
|
111
|
+
La API de GitHub no permite crear vistas (Board, Roadmap, tabla). Hay que crearlas a mano una
|
|
112
|
+
vez en la interfaz del Project.
|
|
113
|
+
|
|
114
|
+
## GitLab
|
|
115
|
+
|
|
116
|
+
Con `provider: gitlab` en `.project-kit/config.yml`, `pjkit provision` usa `glab api` (la API REST
|
|
117
|
+
de GitLab, también en instancias propias) y sigue las mismas reglas: planifica leyendo, enseña,
|
|
118
|
+
pide confirmación y solo crea lo que falta; las issues se reencuentran por su marca
|
|
119
|
+
`project-kit:id` si se pierde el estado.
|
|
120
|
+
|
|
121
|
+
GitLab no tiene los campos de un Project de GitHub, así que:
|
|
122
|
+
|
|
123
|
+
| GitHub | GitLab |
|
|
124
|
+
|---|---|
|
|
125
|
+
| Fase (campo) | Milestone |
|
|
126
|
+
| Tipo y prioridad (labels y campos) | Labels `type:…` y `P0`…`P3` |
|
|
127
|
+
| Tamaño (campo) | Label `size::M` |
|
|
128
|
+
| Estado (campo) | Label `status::Backlog`, `status::In progress`… |
|
|
129
|
+
| Project con vistas | Tablero de issues `project-kit` con una lista por label de estado |
|
|
130
|
+
| Épica con hijas | Issue padre con la lista de hijas (`#N`) |
|
|
131
|
+
|
|
132
|
+
`--project` no se aplica. `doctor` comprueba `glab` y su sesión (`glab auth login`, ámbito
|
|
133
|
+
`api`). Las plantillas de merge request e issues están en `.project-kit/templates/gitlab/`.
|
|
134
|
+
|
|
135
|
+
**Aviso:** esta parte solo se ha probado contra una API simulada, no contra un proyecto GitLab
|
|
136
|
+
real. Lee con atención el `--dry-run` la primera vez y abre una issue si algo no coincide.
|
|
@@ -0,0 +1,63 @@
|
|
|
1
|
+
# Skills recomendadas
|
|
2
|
+
|
|
3
|
+
project-kit no instala skills de terceros: las **recomienda**. El catálogo vive en
|
|
4
|
+
`.project-kit/skills-catalog.yml` (se actualiza con `pjkit upgrade`), la skill `pk-skills` elige
|
|
5
|
+
las que encajan con el proyecto y `.project-kit/skills.yml` guarda qué se decidió con cada una.
|
|
6
|
+
|
|
7
|
+
```
|
|
8
|
+
pjkit skills list --traits web-ui # lo que ayuda a un proyecto con interfaz
|
|
9
|
+
```
|
|
10
|
+
|
|
11
|
+
Los rasgos (`--traits`) son: `any`, `web-ui`, `react`, `public-site`, `backend`, `api`,
|
|
12
|
+
`microservices`, `mobile`, `mcp`. Las áreas: `ui-ux`, `motion`, `accessibility`, `seo`,
|
|
13
|
+
`security`, `architecture`, `process`, `testing`, `browser`, `mcp`, `discovery`.
|
|
14
|
+
|
|
15
|
+
## Criterio de selección (issue #51)
|
|
16
|
+
|
|
17
|
+
Una skill entra en el catálogo si cumple todo esto:
|
|
18
|
+
|
|
19
|
+
1. **Fuente leída.** Se abrió el repositorio y se anotó la fecha (`checked`). Lo que el
|
|
20
|
+
repositorio no confirma se dice en `notes` o en `license`.
|
|
21
|
+
2. **Licencia conocida.** Una licencia de compartir igual (CC BY-SA) obliga a instalarla, no a
|
|
22
|
+
copiarla al repositorio del proyecto.
|
|
23
|
+
3. **Formato `SKILL.md`**, instalable con un comando que el usuario ejecuta.
|
|
24
|
+
4. **Cubre un trabajo concreto** y declara cuándo conviene (`when`).
|
|
25
|
+
5. **Sin riesgos silenciosos.** Si una herramienta de análisis marcó la skill, o ejecuta un
|
|
26
|
+
navegador o comandos, se dice antes de instalarla.
|
|
27
|
+
|
|
28
|
+
Se descartó copiar skills dentro de project-kit (*vendoring*): obliga a mantenerlas y a cumplir
|
|
29
|
+
cada licencia. Tampoco se escriben skills propias cuando ya hay una buena; las propias (`pk-*`)
|
|
30
|
+
cubren lo que depende del proyecto: sus reglas, la entrevista crítica y la recomendación.
|
|
31
|
+
|
|
32
|
+
## Resultado
|
|
33
|
+
|
|
34
|
+
| Área | Skill | Fuente | Licencia | Estado |
|
|
35
|
+
|---|---|---|---|---|
|
|
36
|
+
| process | grill-me | mattpocock/skills | MIT | leída |
|
|
37
|
+
| discovery | find-skills | vercel-labs/skills | MIT | leída; el comando se infiere del patrón `npx skills add` |
|
|
38
|
+
| ui-ux | frontend-design | anthropics/skills | Apache-2.0 según un aviso derivado | **pendiente**: el repositorio no la lista por nombre |
|
|
39
|
+
| ui-ux | Impeccable | pbakaus/impeccable | Apache-2.0 | leída |
|
|
40
|
+
| accessibility | web-design-guidelines | vercel-labs/agent-skills | MIT | leída |
|
|
41
|
+
| architecture | react-best-practices, composition-patterns | vercel-labs/agent-skills | MIT | leída |
|
|
42
|
+
| motion | Emil Kowalski (animate, review-animations...) | emilkowalski/skills | MIT | leída |
|
|
43
|
+
| mcp | mcp-builder | anthropics/skills | sin verificar | **pendiente**: no aparece por nombre |
|
|
44
|
+
| architecture | DDD, hexagonal, clean, microservicios | kayaman/skills | CC0-1.0 | leída |
|
|
45
|
+
| testing | tdd | kayaman/skills | CC0-1.0 | leída |
|
|
46
|
+
| seo | Claude SEO | AgriciDaniel/claude-seo | MIT | leída |
|
|
47
|
+
| security | insecure-defaults, supply-chain-risk-auditor, differential-review, open-sourcing | trailofbits/skills | CC BY-SA 4.0 | leída |
|
|
48
|
+
|
|
49
|
+
Quedan **sin candidata verificada**: marketing, privacidad y cumplimiento, datos y migraciones,
|
|
50
|
+
diseño de API, observabilidad y rendimiento. `accessibility` tiene solo las reglas de Vercel;
|
|
51
|
+
`fixing-accessibility` (ibelick/ui-skills) no pudo confirmarse en el repositorio. Para esos
|
|
52
|
+
huecos, `pk-foundations` escribe las reglas del proyecto y `find-skills` ayuda a buscar.
|
|
53
|
+
|
|
54
|
+
Las reglas de código, testing, seguridad preventiva y documentación **no** se piden a terceros:
|
|
55
|
+
`pk-foundations` las genera con el stack decidido, porque una regla genérica no se cumple.
|
|
56
|
+
Las revisiones de código y de seguridad que ya trae Claude Code (`/code-review`,
|
|
57
|
+
`/security-review`) se enlazan, no se reescriben.
|
|
58
|
+
|
|
59
|
+
## Cómo se añade una skill al catálogo
|
|
60
|
+
|
|
61
|
+
Edita `src/project_kit/assets/project/skills-catalog.yml` con los campos `id`, `name`, `area`,
|
|
62
|
+
`source`, `install`, `license`, `summary`, `when`, `checked` y, si hace falta, `notes`. Los
|
|
63
|
+
tests validan el formato. Abre antes el repositorio de la skill y anota lo que viste.
|
|
@@ -0,0 +1,58 @@
|
|
|
1
|
+
# Barra de estado
|
|
2
|
+
|
|
3
|
+
`pjkit statusline` escribe **una línea** para la barra de estado del agente: modelo, esfuerzo,
|
|
4
|
+
contexto, límites de uso y la fase del proyecto.
|
|
5
|
+
|
|
6
|
+
```
|
|
7
|
+
[Opus · high] · ctx 23% · 5h 41% (↻ 17:00) · 7d 12% · ~$1.23 · fase: decide → /pk-decide
|
|
8
|
+
```
|
|
9
|
+
|
|
10
|
+
## Activarla
|
|
11
|
+
|
|
12
|
+
```
|
|
13
|
+
pjkit statusline --install # escribe statusLine en .claude/settings.json
|
|
14
|
+
pjkit statusline --install --dry-run
|
|
15
|
+
pjkit statusline --remove
|
|
16
|
+
```
|
|
17
|
+
|
|
18
|
+
`init` (en un proyecto nuevo y con terminal) pregunta si la quieres; `/pk-start` también. Sin un
|
|
19
|
+
sí no se toca nada. Con `init --statusline` / `--no-statusline` se decide sin preguntar.
|
|
20
|
+
|
|
21
|
+
Si ya tienes una barra (la del proyecto o la de tu `~/.claude/settings.json`), **se conserva**: se
|
|
22
|
+
configura `pjkit statusline --wrap "<tu comando>"`, que ejecuta primero el tuyo y añade el nuestro
|
|
23
|
+
detrás. `--remove` restaura tu comando. Si prefieres incrustar solo el trozo de project-kit en
|
|
24
|
+
otra barra, usa `pjkit statusline --segment`, que imprime únicamente la fase.
|
|
25
|
+
|
|
26
|
+
## Qué se muestra y qué se recorta
|
|
27
|
+
|
|
28
|
+
| Parte | Origen |
|
|
29
|
+
|---|---|
|
|
30
|
+
| `[Opus · high]` | modelo y esfuerzo que entrega el agente |
|
|
31
|
+
| `ctx 23%` | contexto usado |
|
|
32
|
+
| `5h 41% (↻ 17:00)`, `7d 12%` | límites de uso de las ventanas de 5 horas y 7 días, con la hora de reinicio (solo planes Pro y Max) |
|
|
33
|
+
| `~$1.23` | coste de la sesión, **estimado** a precio de lista; puede diferir de la factura |
|
|
34
|
+
| `fase: decide → /pk-decide` | `.project-kit/state.json` y `workflow.yml`; no depende del agente |
|
|
35
|
+
|
|
36
|
+
Si la línea no cabe (anchura de `$COLUMNS`, 120 por defecto, o `--width`), se quita primero el
|
|
37
|
+
coste, luego el límite de 7 días, el esfuerzo y el contexto; el límite de 5 horas y la fase son lo
|
|
38
|
+
último en desaparecer. Verde por debajo del 60 %, ámbar hasta el 85 %, rojo a partir de ahí.
|
|
39
|
+
`NO_COLOR` o `--no-color` quitan los colores.
|
|
40
|
+
|
|
41
|
+
Todo es opcional: un campo que falta, un documento que no es JSON o un directorio que no es un
|
|
42
|
+
proyecto no producen errores, solo una línea más corta.
|
|
43
|
+
|
|
44
|
+
## Rendimiento
|
|
45
|
+
|
|
46
|
+
El comando se ejecuta con cada actualización del agente, así que se despacha desde
|
|
47
|
+
`project_kit/entry.py` antes de cargar el resto del programa. En la máquina donde se midió
|
|
48
|
+
(Windows, con el lanzador de `uv`) tarda unos 140 ms fuera de un proyecto y unos 180 ms dentro de
|
|
49
|
+
uno, que es el coste de leer el YAML del flujo. No usa la red.
|
|
50
|
+
|
|
51
|
+
## Otros agentes
|
|
52
|
+
|
|
53
|
+
Solo Claude Code tiene hoy una barra de estado documentada
|
|
54
|
+
([documentación](https://code.claude.com/docs/en/statusline)), así que solo existe su adaptador.
|
|
55
|
+
La lectura de los datos está aislada en `ADAPTERS` (`statusline.py`): un adaptador recibe el
|
|
56
|
+
documento que entrega el agente y devuelve `Metrics`. Para Copilot, Codex, Gemini o Cursor basta
|
|
57
|
+
con escribir su adaptador y registrarlo cuando se confirme que tienen un mecanismo equivalente; la
|
|
58
|
+
parte de project-kit no cambia.
|
|
@@ -0,0 +1,47 @@
|
|
|
1
|
+
# Actualizar un proyecto: `pjkit upgrade`
|
|
2
|
+
|
|
3
|
+
`uv tool upgrade project-kit-cli` actualiza el **programa**. Pero `pjkit init` copia al
|
|
4
|
+
repositorio ficheros que después viven allí por su cuenta (las skills de `.claude/skills/pk-*`,
|
|
5
|
+
las plantillas de `.project-kit/templates/` y `.project-kit/workflow.yml`) y no los sobrescribe
|
|
6
|
+
nunca. Por eso un proyecto ya creado se queda con la versión con la que nació. `upgrade` lo pone
|
|
7
|
+
al día sin pisar lo que hayas editado.
|
|
8
|
+
|
|
9
|
+
```
|
|
10
|
+
pjkit upgrade # muestra qué cambia; no escribe nada
|
|
11
|
+
pjkit upgrade --diff # además, las diferencias de cada fichero
|
|
12
|
+
pjkit upgrade --apply # lo aplica
|
|
13
|
+
pjkit upgrade --apply --adopt
|
|
14
|
+
```
|
|
15
|
+
|
|
16
|
+
## Cómo decide
|
|
17
|
+
|
|
18
|
+
`init` y `upgrade` guardan en `.project-kit/installed.json` la huella (SHA-256) de cada fichero tal
|
|
19
|
+
como lo instalaron. Se versiona con el repositorio. Con ella, para cada fichero:
|
|
20
|
+
|
|
21
|
+
| Situación | Resultado |
|
|
22
|
+
|---|---|
|
|
23
|
+
| Idéntico a la versión actual | Nada que hacer |
|
|
24
|
+
| No lo editaste y el paquete trae una versión nueva | **update**: se reemplaza |
|
|
25
|
+
| Falta (es nuevo en esta versión, o lo borraste) | **add**: se crea |
|
|
26
|
+
| Lo editaste y el paquete no lo cambió | Se deja; no hay nada nuevo |
|
|
27
|
+
| Lo editaste **y** el paquete lo cambió | **conflict**: se queda el tuyo y la versión nueva se deja en `.project-kit/upgrade/new/` para que la mezcles |
|
|
28
|
+
| Difiere y no hay huella registrada (proyecto anterior a esta función) | **unknown**: igual que un conflicto, salvo con `--adopt` |
|
|
29
|
+
| Estaba instalado y ya no se distribuye | **obsolete**: se avisa, nunca se borra |
|
|
30
|
+
|
|
31
|
+
Los saltos de línea CRLF de un checkout de Git en Windows no cuentan como edición.
|
|
32
|
+
|
|
33
|
+
## Proyectos anteriores al registro
|
|
34
|
+
|
|
35
|
+
Un proyecto creado con una versión que no guardaba huellas no permite saber si un fichero distinto
|
|
36
|
+
es una versión antigua o una edición tuya, y `upgrade` no lo adivina. Los marca `unknown` y, sin
|
|
37
|
+
`--apply --adopt`, no los toca (deja la versión nueva en `.project-kit/upgrade/new/`). Si sabes que
|
|
38
|
+
no los editaste, `--adopt` los reemplaza. Revisa antes el resultado de `pjkit upgrade --diff`.
|
|
39
|
+
|
|
40
|
+
## Seguridad
|
|
41
|
+
|
|
42
|
+
- Sin `--apply` no se escribe nada.
|
|
43
|
+
- Todo fichero que se reemplaza se copia antes a `.project-kit/upgrade/backup/`.
|
|
44
|
+
- Nunca se pisa un fichero que hayas editado (ni con `--adopt`).
|
|
45
|
+
- `.project-kit/upgrade/` es temporal: cuando hayas revisado o mezclado, bórralo o añádelo a
|
|
46
|
+
`.gitignore`.
|
|
47
|
+
- `config.yml`, `state.json`, el backlog y tus documentos no se tocan.
|
|
@@ -23,6 +23,7 @@ from project_kit import (
|
|
|
23
23
|
statusline,
|
|
24
24
|
trace,
|
|
25
25
|
upgrade,
|
|
26
|
+
userdocs,
|
|
26
27
|
)
|
|
27
28
|
from project_kit import (
|
|
28
29
|
help as help_guide,
|
|
@@ -134,6 +135,9 @@ def build_parser() -> argparse.ArgumentParser:
|
|
|
134
135
|
)
|
|
135
136
|
im.add_argument("--dry-run", action="store_true", help="show what would be copied")
|
|
136
137
|
|
|
138
|
+
dc = sub.add_parser("docs", help="the user guides that ship with the program")
|
|
139
|
+
dc.add_argument("topic", nargs="?", help="a guide to print (omit to list them)")
|
|
140
|
+
|
|
137
141
|
nx = sub.add_parser("next", help="what comes next, in words you can give to your AI")
|
|
138
142
|
nx.add_argument("--json", action="store_true", help="machine-readable output")
|
|
139
143
|
|
|
@@ -289,6 +293,18 @@ def _import(path: str, *, allow_sensitive: bool, dry_run: bool) -> int:
|
|
|
289
293
|
return 1 if result.sensitive else 0
|
|
290
294
|
|
|
291
295
|
|
|
296
|
+
def _docs(topic: str | None) -> int:
|
|
297
|
+
if topic is None:
|
|
298
|
+
print(userdocs.render_list())
|
|
299
|
+
return 0
|
|
300
|
+
try:
|
|
301
|
+
print(userdocs.read(topic))
|
|
302
|
+
except userdocs.UnknownTopic as exc:
|
|
303
|
+
print(f"pjkit docs: {exc.args[0]}", file=sys.stderr)
|
|
304
|
+
return 1
|
|
305
|
+
return 0
|
|
306
|
+
|
|
307
|
+
|
|
292
308
|
def _next(as_json: bool) -> int:
|
|
293
309
|
try:
|
|
294
310
|
nxt = next_step.compute(Path.cwd())
|
|
@@ -728,6 +744,8 @@ def main(argv: Sequence[str] | None = None) -> int:
|
|
|
728
744
|
return _handoff(args)
|
|
729
745
|
if args.command == "import":
|
|
730
746
|
return _import(args.path, allow_sensitive=args.allow_sensitive, dry_run=args.dry_run)
|
|
747
|
+
if args.command == "docs":
|
|
748
|
+
return _docs(args.topic)
|
|
731
749
|
if args.command == "next":
|
|
732
750
|
return _next(args.json)
|
|
733
751
|
if args.command == "hook":
|
|
@@ -32,6 +32,7 @@ TERMINAL_COMMANDS = (
|
|
|
32
32
|
"recommended skills for this project and what was decided",
|
|
33
33
|
),
|
|
34
34
|
("pjkit import <path>", "copy existing documentation for the project to start from"),
|
|
35
|
+
("pjkit docs [topic]", "read the guides that ship with the program"),
|
|
35
36
|
("pjkit next", "what comes next, in words you can give to your AI"),
|
|
36
37
|
("pjkit hook install", "let Claude Code know the project's state at each session start"),
|
|
37
38
|
("pjkit trace [--criteria]", "link issues, decisions, specs and tests; show the gaps"),
|
|
@@ -0,0 +1,41 @@
|
|
|
1
|
+
"""``pjkit docs``: the user guides that ship with the program.
|
|
2
|
+
|
|
3
|
+
The package page on PyPI shows only the README, and the repository may not be public, so the
|
|
4
|
+
detailed guides travel inside the package and are read with ``pjkit docs <topic>``.
|
|
5
|
+
"""
|
|
6
|
+
|
|
7
|
+
from importlib.resources import files
|
|
8
|
+
|
|
9
|
+
_DIR = files("project_kit") / "assets" / "docs"
|
|
10
|
+
|
|
11
|
+
|
|
12
|
+
class UnknownTopic(KeyError):
|
|
13
|
+
"""No guide with that name."""
|
|
14
|
+
|
|
15
|
+
|
|
16
|
+
def topics() -> list[tuple[str, str]]:
|
|
17
|
+
"""(name, title) of every guide, by name. The title is the guide's first heading."""
|
|
18
|
+
found = []
|
|
19
|
+
for node in _DIR.iterdir():
|
|
20
|
+
if node.name.endswith(".md"):
|
|
21
|
+
text = node.read_text(encoding="utf-8")
|
|
22
|
+
title = next(
|
|
23
|
+
(line.lstrip("# ").strip() for line in text.splitlines() if line.startswith("#")),
|
|
24
|
+
node.name,
|
|
25
|
+
)
|
|
26
|
+
found.append((node.name[: -len(".md")], title))
|
|
27
|
+
return sorted(found)
|
|
28
|
+
|
|
29
|
+
|
|
30
|
+
def read(topic: str) -> str:
|
|
31
|
+
node = _DIR / f"{topic}.md"
|
|
32
|
+
if not node.is_file():
|
|
33
|
+
known = ", ".join(name for name, _ in topics())
|
|
34
|
+
raise UnknownTopic(f"No guide called {topic!r}. Available: {known}")
|
|
35
|
+
return node.read_text(encoding="utf-8")
|
|
36
|
+
|
|
37
|
+
|
|
38
|
+
def render_list() -> str:
|
|
39
|
+
lines = ["Guides (pjkit docs <topic>):", ""]
|
|
40
|
+
lines += [f" {name:<16} {title}" for name, title in topics()]
|
|
41
|
+
return "\n".join(lines)
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{project_kit_cli-0.5.0 → project_kit_cli-0.5.1}/src/project_kit/assets/project/skills-catalog.yml
RENAMED
|
File without changes
|
|
File without changes
|
{project_kit_cli-0.5.0 → project_kit_cli-0.5.1}/src/project_kit/assets/skills/pk-amend/SKILL.md
RENAMED
|
File without changes
|
{project_kit_cli-0.5.0 → project_kit_cli-0.5.1}/src/project_kit/assets/skills/pk-decide/SKILL.md
RENAMED
|
File without changes
|
{project_kit_cli-0.5.0 → project_kit_cli-0.5.1}/src/project_kit/assets/skills/pk-discover/SKILL.md
RENAMED
|
File without changes
|
|
File without changes
|
{project_kit_cli-0.5.0 → project_kit_cli-0.5.1}/src/project_kit/assets/skills/pk-grill/SKILL.md
RENAMED
|
File without changes
|
{project_kit_cli-0.5.0 → project_kit_cli-0.5.1}/src/project_kit/assets/skills/pk-handoff/SKILL.md
RENAMED
|
File without changes
|
{project_kit_cli-0.5.0 → project_kit_cli-0.5.1}/src/project_kit/assets/skills/pk-import/SKILL.md
RENAMED
|
File without changes
|
{project_kit_cli-0.5.0 → project_kit_cli-0.5.1}/src/project_kit/assets/skills/pk-next/SKILL.md
RENAMED
|
File without changes
|
{project_kit_cli-0.5.0 → project_kit_cli-0.5.1}/src/project_kit/assets/skills/pk-plan/SKILL.md
RENAMED
|
File without changes
|
{project_kit_cli-0.5.0 → project_kit_cli-0.5.1}/src/project_kit/assets/skills/pk-provision/SKILL.md
RENAMED
|
File without changes
|
{project_kit_cli-0.5.0 → project_kit_cli-0.5.1}/src/project_kit/assets/skills/pk-skills/SKILL.md
RENAMED
|
File without changes
|
{project_kit_cli-0.5.0 → project_kit_cli-0.5.1}/src/project_kit/assets/skills/pk-start/SKILL.md
RENAMED
|
File without changes
|
{project_kit_cli-0.5.0 → project_kit_cli-0.5.1}/src/project_kit/assets/skills/pk-verify/SKILL.md
RENAMED
|
File without changes
|
{project_kit_cli-0.5.0 → project_kit_cli-0.5.1}/src/project_kit/assets/skills/pk-workflow/SKILL.md
RENAMED
|
File without changes
|
{project_kit_cli-0.5.0 → project_kit_cli-0.5.1}/src/project_kit/assets/subagents/pk-reviewer.md
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
{project_kit_cli-0.5.0 → project_kit_cli-0.5.1}/src/project_kit/assets/templates/interview.md
RENAMED
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|
|
File without changes
|