project-init 0.3.0__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.
Files changed (173) hide show
  1. project_init/__init__.py +4 -0
  2. project_init/__main__.py +662 -0
  3. project_init/mcps.py +57 -0
  4. project_init/scaffold.py +374 -0
  5. project_init/templates/base/AGENTS.md.tmpl +50 -0
  6. project_init/templates/base/CLAUDE.md.tmpl +16 -0
  7. project_init/templates/base/CONTRIBUTING.md.tmpl +55 -0
  8. project_init/templates/base/GEMINI.md.tmpl +16 -0
  9. project_init/templates/base/LICENSE.tmpl +231 -0
  10. project_init/templates/base/SECURITY.md.tmpl +26 -0
  11. project_init/templates/base/docs/explanation/index.md +9 -0
  12. project_init/templates/base/docs/how-to/index.md +7 -0
  13. project_init/templates/base/docs/index.md.tmpl +20 -0
  14. project_init/templates/base/docs/reference/index.md +13 -0
  15. project_init/templates/base/docs/tutorials/index.md +7 -0
  16. project_init/templates/base/dot_claude/agents/README.md +30 -0
  17. project_init/templates/base/dot_claude/config.yaml.tmpl +31 -0
  18. project_init/templates/base/dot_claude/docs/README.md +26 -0
  19. project_init/templates/base/dot_claude/docs/adr/adr-001-memory-stack.md.tmpl +22 -0
  20. project_init/templates/base/dot_claude/docs/adr/adr-002-mcp-choices.md.tmpl +32 -0
  21. project_init/templates/base/dot_claude/docs/adr/adr-template.md +29 -0
  22. project_init/templates/base/dot_claude/docs/development/conventions.md.tmpl +31 -0
  23. project_init/templates/base/dot_claude/docs/development/testing.md +25 -0
  24. project_init/templates/base/dot_claude/docs/guides/developer-onboarding.md +110 -0
  25. project_init/templates/base/dot_claude/docs/guides/issue-metadata.md +27 -0
  26. project_init/templates/base/dot_claude/docs/guides/secrets.md +50 -0
  27. project_init/templates/base/dot_claude/docs/guides/using-memory.md +36 -0
  28. project_init/templates/base/dot_claude/hooks/README.md +15 -0
  29. project_init/templates/base/dot_claude/hooks/agent_guard_adapter.py.tmpl +64 -0
  30. project_init/templates/base/dot_claude/hooks/dag_workflow.py +610 -0
  31. project_init/templates/base/dot_claude/memory/MEMORY.md.tmpl +11 -0
  32. project_init/templates/base/dot_claude/memory/README.md +51 -0
  33. project_init/templates/base/dot_claude/memory/SCHEMA.md +52 -0
  34. project_init/templates/base/dot_claude/memory/feedback_conventions.md +11 -0
  35. project_init/templates/base/dot_claude/memory/project_context.md.tmpl +11 -0
  36. project_init/templates/base/dot_claude/memory/user_role.md +7 -0
  37. project_init/templates/base/dot_claude/project-init.md.tmpl +174 -0
  38. project_init/templates/base/dot_claude/rules/go.md +14 -0
  39. project_init/templates/base/dot_claude/rules/hooks.md +30 -0
  40. project_init/templates/base/dot_claude/rules/node.md +17 -0
  41. project_init/templates/base/dot_claude/rules/python.md +25 -0
  42. project_init/templates/base/dot_claude/scripts/README.md +15 -0
  43. project_init/templates/base/dot_claude/scripts/create_issue.sh +577 -0
  44. project_init/templates/base/dot_claude/scripts/create_nojira_pr.sh +3 -0
  45. project_init/templates/base/dot_claude/scripts/finish_pr.sh +3 -0
  46. project_init/templates/base/dot_claude/scripts/install_hooks.sh +55 -0
  47. project_init/templates/base/dot_claude/scripts/monitor_pr.sh +270 -0
  48. project_init/templates/base/dot_claude/scripts/promote_review.sh +3 -0
  49. project_init/templates/base/dot_claude/scripts/push_branch.sh +5 -0
  50. project_init/templates/base/dot_claude/scripts/push_wiki.sh +34 -0
  51. project_init/templates/base/dot_claude/scripts/setup_github.sh +219 -0
  52. project_init/templates/base/dot_claude/scripts/start_issue.sh +134 -0
  53. project_init/templates/base/dot_claude/settings.json.tmpl +83 -0
  54. project_init/templates/base/dot_claude/skills/README.md +12 -0
  55. project_init/templates/base/dot_claude/skills/plan/SKILL.md.tmpl +40 -0
  56. project_init/templates/base/dot_claude/vault/README.md +21 -0
  57. project_init/templates/base/dot_claude/vault/decisions/README.md +22 -0
  58. project_init/templates/base/dot_claude/vault/design/README.md +3 -0
  59. project_init/templates/base/dot_claude/vault/knowledge/README.md +5 -0
  60. project_init/templates/base/dot_claude/vault/sessions/README.md +5 -0
  61. project_init/templates/base/dot_devcontainer/devcontainer.json.tmpl +17 -0
  62. project_init/templates/base/dot_devcontainer/post-create.sh.tmpl +31 -0
  63. project_init/templates/base/dot_env.example.tmpl +13 -0
  64. project_init/templates/base/dot_github/CODEOWNERS.tmpl +12 -0
  65. project_init/templates/base/dot_github/ISSUE_TEMPLATE/bug.yml +98 -0
  66. project_init/templates/base/dot_github/ISSUE_TEMPLATE/chore.yml +82 -0
  67. project_init/templates/base/dot_github/ISSUE_TEMPLATE/config.yml +5 -0
  68. project_init/templates/base/dot_github/ISSUE_TEMPLATE/docs.yml +84 -0
  69. project_init/templates/base/dot_github/ISSUE_TEMPLATE/feature.yml +87 -0
  70. project_init/templates/base/dot_github/ISSUE_TEMPLATE/test.yml +90 -0
  71. project_init/templates/base/dot_github/copilot-instructions.md.tmpl +25 -0
  72. project_init/templates/base/dot_github/hooks/commit-msg +52 -0
  73. project_init/templates/base/dot_github/hooks/pre-commit +16 -0
  74. project_init/templates/base/dot_github/hooks/pre-push +51 -0
  75. project_init/templates/base/dot_github/pull_request_template.md +22 -0
  76. project_init/templates/base/dot_github/workflows/board-automation.yml +232 -0
  77. project_init/templates/base/dot_github/workflows/ci.yml.tmpl +204 -0
  78. project_init/templates/base/dot_github/workflows/docs.yml.tmpl +98 -0
  79. project_init/templates/base/dot_github/workflows/issue-validation.yml +72 -0
  80. project_init/templates/base/dot_github/workflows/review-status.yml +48 -0
  81. project_init/templates/base/dot_github/workflows/validate-pr.yml +103 -0
  82. project_init/templates/base/dot_gitignore.tmpl +41 -0
  83. project_init/templates/base/dot_golangci.yml.tmpl +20 -0
  84. project_init/templates/base/dot_vscode/extensions.json.tmpl +10 -0
  85. project_init/templates/base/dot_vscode/settings.json.tmpl +8 -0
  86. project_init/templates/base/eslint.config.mjs.tmpl +29 -0
  87. project_init/templates/base/justfile.tmpl +95 -0
  88. project_init/templates/base/mise.toml.tmpl +20 -0
  89. project_init/templates/base/mkdocs.yml.tmpl +32 -0
  90. project_init/templates/base/renovate.json +14 -0
  91. project_init/templates/base/ruff.toml.tmpl +31 -0
  92. project_init/templates/base/typedoc.json.tmpl +14 -0
  93. project_init/templates/codex/dot_agents/skills/add_adr/SKILL.md +33 -0
  94. project_init/templates/codex/dot_agents/skills/add_command/SKILL.md +63 -0
  95. project_init/templates/codex/dot_agents/skills/add_hook/SKILL.md +112 -0
  96. project_init/templates/codex/dot_agents/skills/audit/SKILL.md +146 -0
  97. project_init/templates/codex/dot_agents/skills/create_issue/SKILL.md +59 -0
  98. project_init/templates/codex/dot_agents/skills/github_workflow/SKILL.md +80 -0
  99. project_init/templates/codex/dot_agents/skills/request_review/SKILL.md +19 -0
  100. project_init/templates/codex/dot_agents/skills/review/SKILL.md +17 -0
  101. project_init/templates/codex/dot_agents/skills/save_memory/SKILL.md +17 -0
  102. project_init/templates/codex/dot_agents/skills/session_summary/SKILL.md +35 -0
  103. project_init/templates/codex/dot_agents/skills/start_task/SKILL.md +48 -0
  104. project_init/templates/codex/dot_agents/skills/status/SKILL.md +15 -0
  105. project_init/templates/codex/dot_codex/hooks.json.tmpl +17 -0
  106. project_init/templates/fallback/dot_claude/hooks/github_command_guard.sh +11 -0
  107. project_init/templates/fallback/dot_claude/hooks/post_edit_lint.sh +58 -0
  108. project_init/templates/fallback/dot_claude/hooks/pre_commit_gate.sh +81 -0
  109. project_init/templates/fallback/dot_claude/hooks/prod_guard.py +140 -0
  110. project_init/templates/fallback/dot_claude/hooks/session_setup.sh +62 -0
  111. project_init/templates/fallback/dot_claude/hooks/workflow_state_reminder.sh +72 -0
  112. project_init/templates/fallback/dot_claude/skills/INDEX.md +28 -0
  113. project_init/templates/fallback/dot_claude/skills/add_adr/SKILL.md +33 -0
  114. project_init/templates/fallback/dot_claude/skills/add_command/SKILL.md +63 -0
  115. project_init/templates/fallback/dot_claude/skills/add_hook/SKILL.md +112 -0
  116. project_init/templates/fallback/dot_claude/skills/audit/SKILL.md +146 -0
  117. project_init/templates/fallback/dot_claude/skills/create_issue/SKILL.md +59 -0
  118. project_init/templates/fallback/dot_claude/skills/github_workflow/SKILL.md +80 -0
  119. project_init/templates/fallback/dot_claude/skills/request_review/SKILL.md +19 -0
  120. project_init/templates/fallback/dot_claude/skills/review/SKILL.md +17 -0
  121. project_init/templates/fallback/dot_claude/skills/save_memory/SKILL.md +17 -0
  122. project_init/templates/fallback/dot_claude/skills/session_summary/SKILL.md +35 -0
  123. project_init/templates/fallback/dot_claude/skills/start_task/SKILL.md +48 -0
  124. project_init/templates/fallback/dot_claude/skills/status/SKILL.md +15 -0
  125. project_init/templates/gemini/dot_agents/skills/add_adr/SKILL.md +33 -0
  126. project_init/templates/gemini/dot_agents/skills/add_command/SKILL.md +63 -0
  127. project_init/templates/gemini/dot_agents/skills/add_hook/SKILL.md +112 -0
  128. project_init/templates/gemini/dot_agents/skills/audit/SKILL.md +146 -0
  129. project_init/templates/gemini/dot_agents/skills/create_issue/SKILL.md +59 -0
  130. project_init/templates/gemini/dot_agents/skills/github_workflow/SKILL.md +80 -0
  131. project_init/templates/gemini/dot_agents/skills/request_review/SKILL.md +19 -0
  132. project_init/templates/gemini/dot_agents/skills/review/SKILL.md +17 -0
  133. project_init/templates/gemini/dot_agents/skills/save_memory/SKILL.md +17 -0
  134. project_init/templates/gemini/dot_agents/skills/session_summary/SKILL.md +35 -0
  135. project_init/templates/gemini/dot_agents/skills/start_task/SKILL.md +48 -0
  136. project_init/templates/gemini/dot_agents/skills/status/SKILL.md +15 -0
  137. project_init/templates/gemini/dot_claude/scripts/setup_gemini.sh.tmpl +16 -0
  138. project_init/templates/gemini/dot_gemini-extension/commands/add_adr.toml +5 -0
  139. project_init/templates/gemini/dot_gemini-extension/commands/add_command.toml +5 -0
  140. project_init/templates/gemini/dot_gemini-extension/commands/add_hook.toml +5 -0
  141. project_init/templates/gemini/dot_gemini-extension/commands/audit.toml +5 -0
  142. project_init/templates/gemini/dot_gemini-extension/commands/create_issue.toml +5 -0
  143. project_init/templates/gemini/dot_gemini-extension/commands/github_workflow.toml +5 -0
  144. project_init/templates/gemini/dot_gemini-extension/commands/request_review.toml +5 -0
  145. project_init/templates/gemini/dot_gemini-extension/commands/review.toml +5 -0
  146. project_init/templates/gemini/dot_gemini-extension/commands/save_memory.toml +5 -0
  147. project_init/templates/gemini/dot_gemini-extension/commands/session_summary.toml +5 -0
  148. project_init/templates/gemini/dot_gemini-extension/commands/start_task.toml +5 -0
  149. project_init/templates/gemini/dot_gemini-extension/commands/status.toml +5 -0
  150. project_init/templates/gemini/dot_gemini-extension/gemini-extension.json.tmpl +6 -0
  151. project_init/templates/gemini/dot_gemini-extension/hooks/hooks.json.tmpl +18 -0
  152. project_init/templates/graphify/dot_claude/docs/guides/using-graphify.md +37 -0
  153. project_init/templates/graphify/dot_claude/rules/graphify.md +18 -0
  154. project_init/templates/graphify/dot_claude/scripts/setup_graphify.sh +40 -0
  155. project_init/templates/obsidian/dot_claude/scripts/lint_memory.sh +115 -0
  156. project_init/templates/obsidian/dot_claude/vault/decisions/adr-000-project-setup.md.tmpl +22 -0
  157. project_init/templates/obsidian/dot_claude/vault/dot_obsidian/README.md +31 -0
  158. project_init/templates/obsidian/dot_claude/vault/dot_obsidian/app.json +6 -0
  159. project_init/templates/obsidian/dot_claude/vault/dot_obsidian/community-plugins.json +1 -0
  160. project_init/templates/obsidian/dot_claude/vault/dot_obsidian/core-plugins.json +1 -0
  161. project_init/templates/obsidian/dot_claude/vault/log.md +6 -0
  162. project_init/templates/obsidian/dot_claude/vault/templates/decision.md +16 -0
  163. project_init/templates/obsidian/dot_claude/vault/templates/design-note.md +14 -0
  164. project_init/templates/obsidian/dot_claude/vault/templates/knowledge-note.md +12 -0
  165. project_init/templates/obsidian/dot_claude/vault/templates/session-note.md +16 -0
  166. project_init/templates/presets/obsidian-graphify.toml +16 -0
  167. project_init/templates/presets/obsidian-only.toml +14 -0
  168. project_init/upgrade.py +569 -0
  169. project_init-0.3.0.dist-info/METADATA +342 -0
  170. project_init-0.3.0.dist-info/RECORD +173 -0
  171. project_init-0.3.0.dist-info/WHEEL +4 -0
  172. project_init-0.3.0.dist-info/entry_points.txt +2 -0
  173. project_init-0.3.0.dist-info/licenses/LICENSE +201 -0
@@ -0,0 +1,231 @@
1
+ {{#if license_mit}}MIT License
2
+
3
+ Copyright (c) {{created_year}} {{license_holder}}
4
+
5
+ Permission is hereby granted, free of charge, to any person obtaining a copy
6
+ of this software and associated documentation files (the "Software"), to deal
7
+ in the Software without restriction, including without limitation the rights
8
+ to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
9
+ copies of the Software, and to permit persons to whom the Software is
10
+ furnished to do so, subject to the following conditions:
11
+
12
+ The above copyright notice and this permission notice shall be included in all
13
+ copies or substantial portions of the Software.
14
+
15
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
16
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
17
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
18
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
19
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
20
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
21
+ SOFTWARE.
22
+ {{/if license_mit}}{{#if license_apache}} Apache License
23
+ Version 2.0, January 2004
24
+ http://www.apache.org/licenses/
25
+
26
+ TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
27
+
28
+ 1. Definitions.
29
+
30
+ "License" shall mean the terms and conditions for use, reproduction,
31
+ and distribution as defined by Sections 1 through 9 of this document.
32
+
33
+ "Licensor" shall mean the copyright owner or entity authorized by
34
+ the copyright owner that is granting the License.
35
+
36
+ "Legal Entity" shall mean the union of the acting entity and all
37
+ other entities that control, are controlled by, or are under common
38
+ control with that entity. For the purposes of this definition,
39
+ "control" means (i) the power, direct or indirect, to cause the
40
+ direction or management of such entity, whether by contract or
41
+ otherwise, or (ii) ownership of fifty percent (50%) or more of the
42
+ outstanding shares, or (iii) beneficial ownership of such entity.
43
+
44
+ "You" (or "Your") shall mean an individual or Legal Entity
45
+ exercising permissions granted by this License.
46
+
47
+ "Source" form shall mean the preferred form for making modifications,
48
+ including but not limited to software source code, documentation
49
+ source, and configuration files.
50
+
51
+ "Object" form shall mean any form resulting from mechanical
52
+ transformation or translation of a Source form, including but
53
+ not limited to compiled object code, generated documentation,
54
+ and conversions to other media types.
55
+
56
+ "Work" shall mean the work of authorship, whether in Source or
57
+ Object form, made available under the License, as indicated by a
58
+ copyright notice that is included in or attached to the work
59
+ (an example is provided in the Appendix below).
60
+
61
+ "Derivative Works" shall mean any work, whether in Source or Object
62
+ form, that is based on (or derived from) the Work and for which the
63
+ editorial revisions, annotations, elaborations, or other modifications
64
+ represent, as a whole, an original work of authorship. For the purposes
65
+ of this License, Derivative Works shall not include works that remain
66
+ separable from, or merely link (or bind by name) to the interfaces of,
67
+ the Work and Derivative Works thereof.
68
+
69
+ "Contribution" shall mean any work of authorship, including
70
+ the original version of the Work and any modifications or additions
71
+ to that Work or Derivative Works thereof, that is intentionally
72
+ submitted to Licensor for inclusion in the Work by the copyright owner
73
+ or by an individual or Legal Entity authorized to submit on behalf of
74
+ the copyright owner. For the purposes of this definition, "submitted"
75
+ means any form of electronic, verbal, or written communication sent
76
+ to the Licensor or its representatives, including but not limited to
77
+ communication on electronic mailing lists, source code control systems,
78
+ and issue tracking systems that are managed by, or on behalf of, the
79
+ Licensor for the purpose of discussing and improving the Work, but
80
+ excluding communication that is conspicuously marked or otherwise
81
+ designated in writing by the copyright owner as "Not a Contribution."
82
+
83
+ "Contributor" shall mean Licensor and any individual or Legal Entity
84
+ on behalf of whom a Contribution has been received by Licensor and
85
+ subsequently incorporated within the Work.
86
+
87
+ 2. Grant of Copyright License. Subject to the terms and conditions of
88
+ this License, each Contributor hereby grants to You a perpetual,
89
+ worldwide, non-exclusive, no-charge, royalty-free, irrevocable
90
+ copyright license to reproduce, prepare Derivative Works of,
91
+ publicly display, publicly perform, sublicense, and distribute the
92
+ Work and such Derivative Works in Source or Object form.
93
+
94
+ 3. Grant of Patent License. Subject to the terms and conditions of
95
+ this License, each Contributor hereby grants to You a perpetual,
96
+ worldwide, non-exclusive, no-charge, royalty-free, irrevocable
97
+ (except as stated in this section) patent license to make, have made,
98
+ use, offer to sell, sell, import, and otherwise transfer the Work,
99
+ where such license applies only to those patent claims licensable
100
+ by such Contributor that are necessarily infringed by their
101
+ Contribution(s) alone or by combination of their Contribution(s)
102
+ with the Work to which such Contribution(s) was submitted. If You
103
+ institute patent litigation against any entity (including a
104
+ cross-claim or counterclaim in a lawsuit) alleging that the Work
105
+ or a Contribution incorporated within the Work constitutes direct
106
+ or contributory patent infringement, then any patent licenses
107
+ granted to You under this License for that Work shall terminate
108
+ as of the date such litigation is filed.
109
+
110
+ 4. Redistribution. You may reproduce and distribute copies of the
111
+ Work or Derivative Works thereof in any medium, with or without
112
+ modifications, and in Source or Object form, provided that You
113
+ meet the following conditions:
114
+
115
+ (a) You must give any other recipients of the Work or
116
+ Derivative Works a copy of this License; and
117
+
118
+ (b) You must cause any modified files to carry prominent notices
119
+ stating that You changed the files; and
120
+
121
+ (c) You must retain, in the Source form of any Derivative Works
122
+ that You distribute, all copyright, patent, trademark, and
123
+ attribution notices from the Source form of the Work,
124
+ excluding those notices that do not pertain to any part of
125
+ the Derivative Works; and
126
+
127
+ (d) If the Work includes a "NOTICE" text file as part of its
128
+ distribution, then any Derivative Works that You distribute must
129
+ include a readable copy of the attribution notices contained
130
+ within such NOTICE file, excluding those notices that do not
131
+ pertain to any part of the Derivative Works, in at least one
132
+ of the following places: within a NOTICE text file distributed
133
+ as part of the Derivative Works; within the Source form or
134
+ documentation, if provided along with the Derivative Works; or,
135
+ within a display generated by the Derivative Works, if and
136
+ wherever such third-party notices normally appear. The contents
137
+ of the NOTICE file are for informational purposes only and
138
+ do not modify the License. You may add Your own attribution
139
+ notices within Derivative Works that You distribute, alongside
140
+ or as an addendum to the NOTICE text from the Work, provided
141
+ that such additional attribution notices cannot be construed
142
+ as modifying the License.
143
+
144
+ You may add Your own copyright statement to Your modifications and
145
+ may provide additional or different license terms and conditions
146
+ for use, reproduction, or distribution of Your modifications, or
147
+ for any such Derivative Works as a whole, provided Your use,
148
+ reproduction, and distribution of the Work otherwise complies with
149
+ the conditions stated in this License.
150
+
151
+ 5. Submission of Contributions. Unless You explicitly state otherwise,
152
+ any Contribution intentionally submitted for inclusion in the Work
153
+ by You to the Licensor shall be under the terms and conditions of
154
+ this License, without any additional terms or conditions.
155
+ Notwithstanding the above, nothing herein shall supersede or modify
156
+ the terms of any separate license agreement you may have executed
157
+ with Licensor regarding such Contributions.
158
+
159
+ 6. Trademarks. This License does not grant permission to use the trade
160
+ names, trademarks, service marks, or product names of the Licensor,
161
+ except as required for reasonable and customary use in describing the
162
+ origin of the Work and reproducing the content of the NOTICE file.
163
+
164
+ 7. Disclaimer of Warranty. Unless required by applicable law or
165
+ agreed to in writing, Licensor provides the Work (and each
166
+ Contributor provides its Contributions) on an "AS IS" BASIS,
167
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
168
+ implied, including, without limitation, any warranties or conditions
169
+ of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
170
+ PARTICULAR PURPOSE. You are solely responsible for determining the
171
+ appropriateness of using or redistributing the Work and assume any
172
+ risks associated with Your exercise of permissions under this License.
173
+
174
+ 8. Limitation of Liability. In no event and under no legal theory,
175
+ whether in tort (including negligence), contract, or otherwise,
176
+ unless required by applicable law (such as deliberate and grossly
177
+ negligent acts) or agreed to in writing, shall any Contributor be
178
+ liable to You for damages, including any direct, indirect, special,
179
+ incidental, or consequential damages of any character arising as a
180
+ result of this License or out of the use or inability to use the
181
+ Work (including but not limited to damages for loss of goodwill,
182
+ work stoppage, computer failure or malfunction, or any and all
183
+ other commercial damages or losses), even if such Contributor
184
+ has been advised of the possibility of such damages.
185
+
186
+ 9. Accepting Warranty or Additional Liability. While redistributing
187
+ the Work or Derivative Works thereof, You may choose to offer,
188
+ and charge a fee for, acceptance of support, warranty, indemnity,
189
+ or other liability obligations and/or rights consistent with this
190
+ License. However, in accepting such obligations, You may act only
191
+ on Your own behalf and on Your sole responsibility, not on behalf
192
+ of any other Contributor, and only if You agree to indemnify,
193
+ defend, and hold each Contributor harmless for any liability
194
+ incurred by, or claims asserted against, such Contributor by reason
195
+ of your accepting any such warranty or additional liability.
196
+
197
+ END OF TERMS AND CONDITIONS
198
+
199
+ APPENDIX: How to apply the Apache License to your work.
200
+
201
+ To apply the Apache License to your work, attach the following
202
+ boilerplate notice, with the fields enclosed by brackets "[]"
203
+ replaced with your own identifying information. (Don't include
204
+ the brackets!) The text should be enclosed in the appropriate
205
+ comment syntax for the file format. We recommend that a file or
206
+ class name and description of purpose be included on the same
207
+ "printed page" as the copyright notice for easier
208
+ identification within third-party archives.
209
+
210
+ Copyright {{created_year}} {{license_holder}}
211
+
212
+ Licensed under the Apache License, Version 2.0 (the "License");
213
+ you may not use this file except in compliance with the License.
214
+ You may obtain a copy of the License at
215
+
216
+ http://www.apache.org/licenses/LICENSE-2.0
217
+
218
+ Unless required by applicable law or agreed to in writing, software
219
+ distributed under the License is distributed on an "AS IS" BASIS,
220
+ WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
221
+ See the License for the specific language governing permissions and
222
+ limitations under the License.
223
+ {{/if license_apache}}{{#if license_proprietary}}Copyright (c) {{created_year}} {{license_holder}}. All rights reserved.
224
+
225
+ This software and its documentation are proprietary and confidential.
226
+ Internal use only: no part of this repository may be copied, modified,
227
+ distributed, sublicensed, or disclosed outside the organization without
228
+ prior written permission from the copyright holder.
229
+
230
+ Provided "AS IS", without warranty of any kind.
231
+ {{/if license_proprietary}}
@@ -0,0 +1,26 @@
1
+ # Security Policy
2
+
3
+ ## Reporting a vulnerability
4
+
5
+ Please do **not** open a public issue for security problems.
6
+
7
+ - Preferred: use GitHub's private vulnerability reporting on this
8
+ repository (Security tab → "Report a vulnerability").
9
+ {{#if project_owner}}
10
+ - Or contact the maintainer directly: {{project_owner}}
11
+ {{/if project_owner}}
12
+ You should receive an acknowledgement within a few business days. Please
13
+ include reproduction steps and the affected version or commit.
14
+
15
+ ## Supported versions
16
+
17
+ | Version | Supported |
18
+ |---|---|
19
+ | latest release / `main` | ✅ |
20
+ | older releases | ❌ |
21
+
22
+ ## Scope notes
23
+
24
+ Secrets must never be committed — the scaffolded pre-commit hook runs a
25
+ gitleaks scan, and CI re-checks. If you find a leaked credential in the
26
+ history, report it privately first so it can be rotated before disclosure.
@@ -0,0 +1,9 @@
1
+ # Explanation
2
+
3
+ Understanding-oriented discussion: why the system is shaped the way it is,
4
+ trade-offs considered, context that doesn't fit a recipe or a reference
5
+ table. Architectural decisions belong in `.claude/docs/adr/` — link them
6
+ from here when they need narrative.
7
+
8
+ *No explanation pages yet. Add the first one as
9
+ `docs/explanation/<topic>.md` and link it here.*
@@ -0,0 +1,7 @@
1
+ # How-to guides
2
+
3
+ Goal-oriented recipes for someone already working with the project: "How do
4
+ I X?" Each guide solves one real problem, assumes basic familiarity, and
5
+ skips teaching.
6
+
7
+ *No guides yet. Add the first one as `docs/how-to/<task>.md` and link it here.*
@@ -0,0 +1,20 @@
1
+ # {{project_name}}
2
+
3
+ {{project_description}}
4
+
5
+ This documentation follows the [Diátaxis](https://diataxis.fr/) structure —
6
+ put each page where its *purpose* fits, not where its topic fits:
7
+
8
+ | Section | Purpose | Reader is… |
9
+ |---|---|---|
10
+ | [Tutorials](tutorials/index.md) | Learning by doing | new, following along |
11
+ | [How-to guides](how-to/index.md) | Solving a specific problem | working, goal in hand |
12
+ | [Reference](reference/index.md) | Looking up facts (API, config) | working, needs precision |
13
+ | [Explanation](explanation/index.md) | Understanding why | studying, wants context |
14
+
15
+ Architectural decisions live in `.claude/docs/adr/` in the repository (not
16
+ part of this site) — use the `add_adr` skill to record one.
17
+
18
+ > Tip (public repos): [DeepWiki](https://deepwiki.com/) generates free,
19
+ > always-current architecture docs from the repository — link
20
+ > `deepwiki.com/<owner>/<repo>` from your README.
@@ -0,0 +1,13 @@
1
+ # Reference
2
+
3
+ Information-oriented technical description: API signatures, configuration
4
+ keys, CLI flags. Reference states facts — it does not explain or instruct.
5
+
6
+ For Python projects, render API docs from docstrings with a
7
+ [mkdocstrings](https://mkdocstrings.github.io/) directive:
8
+
9
+ ```markdown
10
+ ::: your_package.your_module
11
+ ```
12
+
13
+ *Add reference pages as `docs/reference/<area>.md` and link them here.*
@@ -0,0 +1,7 @@
1
+ # Tutorials
2
+
3
+ Learning-oriented, step-by-step lessons. A tutorial takes a newcomer from
4
+ zero to a working result — it teaches by doing, not by explaining.
5
+
6
+ *No tutorials yet. Add the first one as `docs/tutorials/<topic>.md` and link
7
+ it here.*
@@ -0,0 +1,30 @@
1
+ # `.claude/agents/`
2
+
3
+ Claude Code subagent definitions. Define custom subagent personas here when you need specialized agents for repeatable tasks (e.g., a code reviewer, a documentation specialist, a performance analyzer).
4
+
5
+ ## How to create a subagent
6
+
7
+ 1. Create a `.md` file with a frontmatter block:
8
+
9
+ ```yaml
10
+ ---
11
+ name: agent-name
12
+ description: What this agent does and when to invoke it
13
+ model: sonnet # optional: sonnet or opus
14
+ tools: # list of tools this agent can use
15
+ - Read
16
+ - Grep
17
+ - Bash
18
+ maxTurns: 15 # optional: max conversation depth
19
+ ---
20
+
21
+ <Detailed instructions for the agent's behavior, role, and approach>
22
+ ```
23
+
24
+ 2. Name the file after the agent (e.g., `reviewer.md` for a `reviewer` agent)
25
+
26
+ 3. Invoke the agent in skills or from the CLI using `Agent({"description": "...", "subagent_type": "agent-name", "prompt": "..."})`
27
+
28
+ ## Reference
29
+
30
+ See the [Claude Code subagents documentation](https://docs.claude.com/en/docs/claude-code/sub-agents) for full details on agent capabilities, tool access, and context management.
@@ -0,0 +1,31 @@
1
+ # project-init: record of choices made at init time.
2
+ # Safe to hand-edit; re-running `project-init` will reconcile with this file.
3
+
4
+ project:
5
+ name: "{{project_name}}"
6
+ description: "{{project_description}}"
7
+ created: {{created_date}}
8
+ project_init_version: {{project_init_version}}
9
+ project_key: "" # e.g. "PI" → branches use feat/PI-42-slug, PR titles use feat(PI-42):
10
+ github_project_number: 1 # numeric GitHub Project V2 board number (used by board-automation.yml and create_issue.sh)
11
+
12
+ language: {{language}} # python | node | go | none
13
+
14
+ memory:
15
+ stack: {{memory_stack}} # obsidian-only | obsidian-graphify
16
+ vault_path: .claude/vault
17
+ memory_path: .claude/memory
18
+
19
+ mcps:
20
+ installed: {{installed_mcps_yaml}}
21
+
22
+ safety:
23
+ # prod_guard escape hatch: JSON list of regex patterns for commands the
24
+ # destructive-operation guard should never flag (e.g. a dev-cluster
25
+ # kubectl context). Keep it narrow.
26
+ allow: []
27
+
28
+ tooling:
29
+ lint_command: "{{lint_command}}"
30
+ format_command: "{{format_command}}"
31
+ test_command: "{{test_command}}"
@@ -0,0 +1,26 @@
1
+ # .claude/docs — Internal Knowledge Base
2
+
3
+ This folder is the **system of record** for architectural decisions and development standards. It is version-controlled alongside code and is the primary source of context for AI agents.
4
+
5
+ ## Structure
6
+
7
+ ```
8
+ docs/
9
+ ├── adr/ # Architecture Decision Records — why decisions were made
10
+ ├── development/ # Standards, conventions, testing strategy
11
+ └── guides/ # How-to guides for common workflows
12
+ ```
13
+
14
+ ## How to use
15
+
16
+ **Agents:** Read `adr/` before starting tasks. If you establish a new pattern or make a non-obvious decision, write a brief ADR.
17
+
18
+ **Humans:** When an exploratory note in `.claude/vault/` solidifies into a real decision, move it here as an ADR and commit it.
19
+
20
+ ## One-way flow
21
+
22
+ ```
23
+ vault/knowledge/ (exploratory) → docs/adr/ (permanent)
24
+ ```
25
+
26
+ Never duplicate content. If it's in `docs/adr/`, don't repeat it in `vault/decisions/`.
@@ -0,0 +1,22 @@
1
+ # ADR-001: Memory Stack
2
+
3
+ **Date:** {{created_date}}
4
+ **Status:** Accepted
5
+
6
+ ## Context
7
+
8
+ {{project_name}} needs a memory system for AI agents to retain context across sessions.
9
+
10
+ ## Decision
11
+
12
+ - **`.claude/vault/`** (Obsidian) — human-authored notes, session logs, exploratory content
13
+ - **`.claude/memory/`** — flat markdown facts for quick agent recall
14
+ {{#if graphify}}- **`graphify-out/`** (Graphify) — queryable code knowledge graph, rebuilt per commit; agents query it before grepping
15
+ {{/if graphify}}
16
+ Obsidian provides a local app for humans; agents read markdown files directly.
17
+
18
+ ## Consequences
19
+
20
+ - Session logs written to `vault/sessions/YYYY-MM-DD.md` by the `/session_summary` skill
21
+ - Memory facts indexed in `memory/MEMORY.md` with per-file frontmatter
22
+ - AI agents read `memory/MEMORY.md` at session start, then `docs/adr/` for decisions
@@ -0,0 +1,32 @@
1
+ # ADR-002: MCP Choices
2
+
3
+ **Date:** {{created_date}}
4
+ **Status:** Accepted
5
+
6
+ ## Context
7
+
8
+ Model Context Protocol (MCP) servers extend Claude Code's toolset. Each server loads its full tool-definition set into the conversation on startup — even tools never used. This adds token overhead proportional to the number of tools.
9
+
10
+ ## Decision
11
+
12
+ Three MCPs are intentionally absent to reduce token overhead:
13
+
14
+ | MCP | Tokens saved | Replacement |
15
+ |---|---|---|
16
+ | GitHub MCP (~35 tools) | ~2000 tokens | `gh` CLI built-in |
17
+ | Linear MCP (~15 tools) | ~800 tokens | `gh` CLI + GitHub Issues |
18
+ | Filesystem MCP (~10 tools) | ~500 tokens | Claude Code built-in Read/Write/Edit/Glob/Grep |
19
+
20
+ **Selected at init:** {{installed_mcps}}
21
+
22
+ Retained MCPs:
23
+ - **Context7** — targeted library doc lookups; no CLI equivalent
24
+ - **Playwright** — browser automation; no CLI equivalent
25
+ - **Postgres / SQLite** — direct DB access; no CLI equivalent
26
+
27
+ ## Consequences
28
+
29
+ - Agents use `gh issue list`, `gh pr create`, etc. for project management
30
+ - File ops use Claude Code built-ins — no MCP config needed
31
+ - Token budget stays ~3300 tokens lower per session; more context for actual work
32
+ - `MCP_CATALOG` in project-init contains only context7 (and optional DB/browser)
@@ -0,0 +1,29 @@
1
+ # ADR-NNN: {short title: the problem and the chosen solution}
2
+
3
+ <!-- MADR-style template (https://adr.github.io/madr/). Copy to
4
+ adr-NNN-<kebab-slug>.md with the next free number — the add_adr skill
5
+ does this for you. Delete comments before committing. -->
6
+
7
+ - Status: proposed <!-- proposed | accepted | rejected | deprecated | superseded by ADR-XXX -->
8
+ - Date: YYYY-MM-DD
9
+
10
+ ## Context and Problem Statement
11
+
12
+ <!-- 2-5 sentences: what forces this decision? What breaks or stalls if it
13
+ is not made? Phrase the problem as a question when possible. -->
14
+
15
+ ## Considered Options
16
+
17
+ - Option 1
18
+ - Option 2
19
+ - Option 3
20
+
21
+ ## Decision Outcome
22
+
23
+ Chosen option: "Option 1", because <!-- justification: meets criterion X,
24
+ resolves the problem, fewest downsides -->.
25
+
26
+ ### Consequences
27
+
28
+ - Good: <!-- what becomes easier -->
29
+ - Bad: <!-- what becomes harder; accepted trade-offs -->
@@ -0,0 +1,31 @@
1
+ # Development Conventions
2
+
3
+ ## Code style
4
+
5
+ {{#if python}}
6
+ - Lint/format/test via `just` recipes — `just --list` shows them; linter is `ruff`
7
+ - Docstrings required on public functions (Google style — enforced by the ruff `D` rules in `ruff.toml`, with complexity caps)
8
+ - No type annotations required unless they clarify non-obvious interfaces
9
+ {{/if}}
10
+ {{#if node}}
11
+ - Lint/format/test via `just` recipes — `just --list` shows them; linter is ESLint (`eslint.config.mjs`, jsdoc/tsdoc + complexity gates)
12
+ - TypeScript preferred for non-trivial modules
13
+ {{/if}}
14
+
15
+ ## Commit messages
16
+
17
+ Format: `type(PROJECT-123): short description` or `type: short description` (no linked issue)
18
+
19
+ Types: `feat`, `fix`, `test`, `docs`, `chore`
20
+
21
+ Example: `feat(PI-42): Add OAuth login`
22
+
23
+ ## Pull requests
24
+
25
+ - Title: `type(PROJECT-123): Short description`
26
+ - Body must include `Closes #<number>` for auto-close on merge
27
+ - All tests must pass before merging
28
+
29
+ ## Comments
30
+
31
+ Only comment when the **why** is non-obvious — a hidden constraint, a workaround for a specific bug, or a counter-intuitive decision. Never describe what the code does.
@@ -0,0 +1,25 @@
1
+ # Testing Strategy
2
+
3
+ ## Principles
4
+
5
+ - **Test-driven** — write failing tests before implementation. Tests define the contract.
6
+ - **No mocks for external systems** — integration tests hit real instances (DB, APIs). Mocks mask divergence between test and production.
7
+ - **One assertion per test** — narrow tests pinpoint failures immediately.
8
+ - **Name tests descriptively** — `test_<unit>_<scenario>` (e.g. `test_auth_rejects_expired_token`)
9
+
10
+ ## Test boundaries
11
+
12
+ | What to test | How |
13
+ |---|---|
14
+ | Business logic | Unit tests, no I/O |
15
+ | DB queries | Integration tests against real DB |
16
+ | External APIs | Integration tests or contract tests |
17
+ | UI behaviour | E2E tests (Playwright if configured) |
18
+
19
+ ## Running tests
20
+
21
+ See `.claude/project-init.md` for the test command for this project's language/runtime.
22
+
23
+ ## Coverage
24
+
25
+ Coverage is a signal, not a target. Aim for high coverage of critical paths; don't write tests just to hit a number.
@@ -0,0 +1,110 @@
1
+ # Developer onboarding — personal machine setup
2
+
3
+ This page covers **per-developer machine state** that the scaffolder
4
+ deliberately does not manage: global git configuration and editor sync are
5
+ personal, not repository state, so they are documented here instead of being
6
+ scaffolded (see the project-init decision in PI-140).
7
+
8
+ Everything repo-level (linting, commands, env examples) ships with the
9
+ repository. The one per-clone step: run `.claude/scripts/install_hooks.sh`
10
+ once to activate the `pre-commit` (gitleaks secret scan), `commit-msg`,
11
+ and `pre-push` git hooks — git does not enable repository hooks
12
+ automatically. Install [gitleaks](https://github.com/gitleaks/gitleaks#installing)
13
+ for fast local secret scanning; without it the pre-commit scan is skipped
14
+ and CI catches leaks instead.
15
+
16
+ ## Dependency updates (Renovate)
17
+
18
+ The repo ships a `renovate.json` (weekly grouped updates, GitHub Actions
19
+ pinned by digest, lockfile maintenance — managers activate automatically
20
+ from the files present). Renovate PRs arrive as `chore: Update …`, the
21
+ canonical no-issue title format the PR validators accept. One per-org
22
+ step: install the [Renovate GitHub App](https://github.com/apps/renovate)
23
+ on the repository.
24
+
25
+ To centralize policy across an organization, replace the `extends` list
26
+ with a shared preset. Keep the PR-title settings unless the org preset
27
+ provides them — Renovate's defaults (`chore(deps): …`) fail this repo's
28
+ PR-title validator:
29
+
30
+ ```json
31
+ {
32
+ "extends": ["github>your-org/renovate-config"],
33
+ "semanticCommits": "disabled",
34
+ "commitMessagePrefix": "chore:"
35
+ }
36
+ ```
37
+
38
+ ## Global gitignore
39
+
40
+ Keep OS and editor junk out of every repo you touch, without bloating each
41
+ project's `.gitignore`:
42
+
43
+ ```bash
44
+ git config --global core.excludesFile ~/.gitignore_global
45
+ cat >> ~/.gitignore_global <<'EOF'
46
+ .DS_Store
47
+ Thumbs.db
48
+ *.swp
49
+ .idea/
50
+ EOF
51
+ ```
52
+
53
+ Project `.gitignore` files stay focused on project artifacts (build output,
54
+ env files, caches) — never add personal editor noise to them.
55
+
56
+ ## Recommended global git config
57
+
58
+ ```bash
59
+ git config --global init.defaultBranch main
60
+ git config --global pull.rebase true # no accidental merge commits on pull
61
+ git config --global push.autoSetupRemote true # first push sets upstream
62
+ git config --global fetch.prune true # drop deleted remote branches
63
+ ```
64
+
65
+ Identity (use your work email on work machines):
66
+
67
+ ```bash
68
+ git config --global user.name "Your Name"
69
+ git config --global user.email "you@example.com"
70
+ ```
71
+
72
+ ## Commit signing (if your org requires it)
73
+
74
+ ```bash
75
+ git config --global gpg.format ssh
76
+ git config --global user.signingkey ~/.ssh/id_ed25519.pub
77
+ git config --global commit.gpgsign true
78
+ ```
79
+
80
+ ## Editor settings
81
+
82
+ - **VS Code Settings Sync** is an account-level feature — enable it in VS Code
83
+ itself (`Settings Sync: Turn On`). It is intentionally not configured by the
84
+ repository.
85
+ - Repo-level editor settings (format-on-save, recommended extensions) live in
86
+ the repository's `.vscode/` directory when the project opted into that
87
+ overlay — personal themes and keybindings never belong there.
88
+
89
+ ## Checklist
90
+
91
+ - [ ] Global gitignore configured
92
+ - [ ] Global git config applied (rebase pulls, pruning, identity)
93
+ - [ ] Commit signing set up, if required
94
+ - [ ] Repo hooks installed: run `.claude/scripts/install_hooks.sh` once per clone
95
+ - [ ] gitleaks installed for the local pre-commit secret scan
96
+
97
+ ## Multi-agent support tiers
98
+
99
+ Only the Claude Code path is functionally CI-tested; treat other agents as
100
+ best-effort. If the project was scaffolded with extra agents (`--agents`):
101
+
102
+ | Agent | What you get | Setup per clone |
103
+ |---|---|---|
104
+ | Claude Code | full tier: hooks, skills, settings | none (plus `install_hooks.sh` like everyone) |
105
+ | Codex | shared skills at `.agents/skills/`, command guard via `.codex/hooks.json` | none |
106
+ | Gemini CLI | workflow /commands + command guard from the project extension | `.claude/scripts/setup_gemini.sh` |
107
+ | Ollama-based (Aider, Goose, …) | AGENTS.md instructions, portable scripts, markdown memory | none |
108
+
109
+ The git hooks and CI checks are the real enforcement boundary for every
110
+ agent — agent-side hooks are fast-feedback guardrails only.