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,342 @@
1
+ Metadata-Version: 2.4
2
+ Name: project-init
3
+ Version: 0.3.0
4
+ Summary: Scaffolder for agentic-development infrastructure inside any project
5
+ Project-URL: Repository, https://github.com/VytCepas/project-init
6
+ Project-URL: Documentation, https://vytcepas.github.io/project-init/
7
+ Project-URL: Changelog, https://github.com/VytCepas/project-init/releases
8
+ Project-URL: Issues, https://github.com/VytCepas/project-init/issues
9
+ Author-email: Vytautas Čepas <vyt.cepas.ve@gmail.com>
10
+ License: Apache-2.0
11
+ License-File: LICENSE
12
+ Keywords: agents,claude-code,graphify,obsidian,scaffolding
13
+ Classifier: Development Status :: 4 - Beta
14
+ Classifier: Environment :: Console
15
+ Classifier: Intended Audience :: Developers
16
+ Classifier: License :: OSI Approved :: Apache Software License
17
+ Classifier: Programming Language :: Python :: 3 :: Only
18
+ Classifier: Programming Language :: Python :: 3.11
19
+ Classifier: Programming Language :: Python :: 3.12
20
+ Classifier: Programming Language :: Python :: 3.13
21
+ Classifier: Topic :: Software Development :: Code Generators
22
+ Requires-Python: >=3.11
23
+ Requires-Dist: rich>=13.7
24
+ Provides-Extra: dev
25
+ Requires-Dist: pytest-xdist>=3.0; extra == 'dev'
26
+ Requires-Dist: pytest>=8.0; extra == 'dev'
27
+ Requires-Dist: ruff>=0.4; extra == 'dev'
28
+ Provides-Extra: docs
29
+ Requires-Dist: mkdocs-material>=9.7.6; extra == 'docs'
30
+ Description-Content-Type: text/markdown
31
+
32
+ # project-init
33
+
34
+ [![CI](https://github.com/VytCepas/project-init/actions/workflows/ci.yml/badge.svg)](https://github.com/VytCepas/project-init/actions/workflows/ci.yml)
35
+
36
+ Scaffolder for agentic-development infrastructure. One command drops a `.claude/` folder into any project so Claude Code (and other agents) have memory, docs, hooks, and curated MCPs ready to go.
37
+
38
+ ## What it gives you
39
+
40
+ Inside any target project:
41
+
42
+ ```
43
+ <your-project>/
44
+ ├── CLAUDE.md # canonical agent instructions; points into .claude/
45
+ ├── AGENTS.md # thin redirect to CLAUDE.md for non-Claude agents
46
+ └── .claude/
47
+ ├── project-init.md # workflow + conventions
48
+ ├── config.yaml # record of options chosen at init
49
+ ├── settings.json # Claude Code settings + hooks
50
+ ├── skills/ agents/ hooks/ scripts/ rules/
51
+ ├── memory/
52
+ │ ├── MEMORY.md # grep-able memory index
53
+ └── vault/ # Obsidian vault (humans)
54
+ ├── decisions/ design/ sessions/ knowledge/
55
+ ```
56
+
57
+ Principles:
58
+ - **One folder, `.claude/`**, for everything agentic. Project root stays clean.
59
+ - **Obsidian vault for humans, Graphify (optional) for agents** — separated on disk.
60
+ - **Deterministic-first** — hooks and scripts are bash/python. LLM calls only where generative.
61
+ - **Claude-first, portable core** — built and tested for Claude Code; other agents get instructions, not enforcement. See [Agent support tiers](#agent-support-tiers).
62
+ - **`bun` and `uv` only** — no `npm`/`npx`/`pip`/`venv` anywhere in scaffolded projects.
63
+
64
+ ## Agent support tiers
65
+
66
+ This is **firstly a Claude Code scaffolder**. It aims to be agent-agnostic where
67
+ that is cheap, but it is not natively so — be explicit about what each agent gets:
68
+
69
+ | Tier | What you get | Applies to |
70
+ |---|---|---|
71
+ | **Native (Claude Code)** | Everything: deterministic hooks (lifecycle guard, pre-commit gate), skills invoked as `/commands`, settings wiring | Claude Code only |
72
+ | **Instructions-only** | `AGENTS.md` / `GEMINI.md` redirect to the canonical `CLAUDE.md`; agents read conventions but **no hook fires and nothing is enforced** for them | Codex, Gemini CLI, Cursor, and other AGENTS.md-aware tools |
73
+ | **Portable regardless** | Lifecycle scripts (plain bash), memory and vault (plain markdown), git hooks (`commit-msg`, `pre-push`) — agent-independent by construction; git hooks bind once `.claude/scripts/install_hooks.sh` has run in the clone (server-side actions need branch protection) | Everything, including Ollama-based agents |
74
+
75
+ Two honest caveats:
76
+
77
+ - Hook enforcement and skill invocation **do not exist outside Claude Code**. An
78
+ agent reading `AGENTS.md` is asked to follow the rules; nothing makes it.
79
+ The git hooks and CI checks are the only enforcement that binds all agents.
80
+ - **Automated testing covers the Claude Code artifacts only.** The test suite
81
+ validates settings schema, skills, hooks, and rendered files; no other agent
82
+ is exercised in CI.
83
+
84
+ ## Install (one-time)
85
+
86
+ Two install paths — pick by how you'll invoke it:
87
+
88
+ **CLI-only, from PyPI** (after the first published release; ADR-011). Gives
89
+ you the `project-init` command — no `/project-init` slash command:
90
+
91
+ ```bash
92
+ uv tool install project-init # or one-off: uvx project-init .
93
+ ```
94
+
95
+ **Full setup, from git** — adds the Claude Code slash command:
96
+
97
+ ```bash
98
+ curl -sSL https://raw.githubusercontent.com/VytCepas/project-init/main/install.sh | bash
99
+ ```
100
+
101
+ This installs [`uv`](https://docs.astral.sh/uv/) if missing, clones the repo to `~/.local/share/project-init` (override with `PROJECT_INIT_HOME=...`) **pinned to the latest tagged release**, and writes a user-level slash command at `~/.claude/commands/project-init.md`.
102
+
103
+ Pin a specific version, or opt into the unreleased development head:
104
+
105
+ ```bash
106
+ PROJECT_INIT_REF=v0.3.0 bash -c "$(curl -sSL https://raw.githubusercontent.com/VytCepas/project-init/main/install.sh)"
107
+ PROJECT_INIT_REF=main bash -c "$(curl -sSL https://raw.githubusercontent.com/VytCepas/project-init/main/install.sh)"
108
+ ```
109
+
110
+ Direct tool install without the slash command (any pinned tag):
111
+
112
+ ```bash
113
+ uv tool install git+https://github.com/VytCepas/project-init@v0.3.0
114
+ ```
115
+
116
+ Distribution rationale: [ADR-008](https://github.com/VytCepas/project-init/blob/main/docs/adr/adr-008-distribution-channel.md) (git channel), [ADR-011](https://github.com/VytCepas/project-init/blob/main/docs/adr/adr-011-pypi-trusted-publishing.md) (PyPI via trusted publishing).
117
+
118
+ ## Use
119
+
120
+ ### Option 1: Inside a Claude Code session (interactive)
121
+
122
+ After the **git install** (`install.sh`), a `/project-init` slash command is available in any Claude Code session:
123
+
124
+ ```
125
+ /project-init
126
+ ```
127
+
128
+ This runs the interactive wizard in the current project directory. It asks for project name, language, memory stack, and MCPs — then scaffolds `.claude/` for you.
129
+
130
+ ### Option 2: From a shell (non-interactive, for CI / scripts)
131
+
132
+ With the PyPI install, plain `project-init . --non-interactive …` (or
133
+ `uvx project-init . …`) works anywhere. With the git install:
134
+
135
+ ```bash
136
+ cd your-project
137
+ uvx --from ~/.local/share/project-init project-init . \
138
+ --non-interactive \
139
+ --preset obsidian-only \
140
+ --name my-app \
141
+ --description "an app" \
142
+ --language python \
143
+ --mcps context7
144
+ ```
145
+
146
+ The wizard asks (interactive mode only):
147
+
148
+ - Project name / description
149
+ - Language (Python/Node/Go/none) — drives `lint_command`, `format_command`, `test_command`
150
+ - Memory stack — Obsidian-only or Obsidian + Graphify (recommended for code-heavy projects)
151
+ - Core MCPs (Context7)
152
+ - Database MCP — none / Postgres / SQLite
153
+ - Browser automation — Playwright (yes/no)
154
+ - Owner/team (`--owner`) — default CODEOWNERS owner, SECURITY contact, and LICENSE copyright holder (e.g. `@org/team`)
155
+ - License (`--license mit|apache-2.0|proprietary|none`) — renders a LICENSE with the current year and the owner (or project name); `none` skips the file
156
+ - No-plugin fallback (`--no-plugin`) — copies the shared hooks/skills into `.claude/` and wires them in `settings.json` instead of relying on the `project-init-workflow` plugin (offline / no-trust environments)
157
+ - Devcontainer (`--devcontainer`) — renders `.devcontainer/` for Codespaces, fresh clones, and remote agent containers (see below)
158
+ - Agents (`--agents claude,codex,gemini,ollama`) — which agents the project supports; default `claude`. Codex gets the shared skills at `.agents/skills/` plus the command guard via `.codex/hooks.json`; Gemini CLI gets a project extension (workflow `/commands` + guard; link once with `.claude/scripts/setup_gemini.sh`); Ollama-based agents are instructions-level only. Only the Claude path is functionally CI-tested — overlays are contract-tested on the rendered files
159
+ - Toolchain pinning (`--mise`) — renders `mise.toml` pinning runtime/tool versions. Ownership rule: mise owns versions only; uv/bun own dependencies, just owns commands, `.env` owns environment
160
+ - Editor config (`--vscode`) — renders `.vscode/extensions.json` + a minimal `settings.json` (format-on-save wired to the preset formatter); nothing personal, and the `.gitignore` shares only these two files
161
+
162
+ Every preset also scaffolds the env/secret pattern: `.env.example`
163
+ documents the variables and their loading order, `.env` is gitignored, and
164
+ `.claude/docs/guides/secrets.md` covers when and how to escalate to an org
165
+ secret manager (sops / 1Password CLI / Doppler) — none is installed, that
166
+ choice is org-specific.
167
+
168
+ Every preset also ships governance starters: `.github/CODEOWNERS`,
169
+ `CONTRIBUTING.md` (setup, `just --list` command surface, branch/PR
170
+ conventions, review flow), and `SECURITY.md`. After pushing to GitHub, run
171
+ `.claude/scripts/setup_github.sh --protect` inside the project to apply
172
+ baseline branch protection (require CI green, require PR review, block
173
+ force-push) — unprotected default branches undermine the workflow
174
+ enforcement everything else sets up.
175
+
176
+ Your answers are recorded in `.claude/config.yaml`. On the **first** scaffold into a project that already has files, your existing files are never clobbered: when a generated file (e.g. a hand-written `CLAUDE.md`) would differ, the new render is written alongside as a `<file>.new` sibling for you to merge, and the run prints which files were preserved. On a **re-run** (config already present) it refreshes the files project-init manages and never overwrites your `memory/` or `vault/` notes. With `--strict`, templates are rendered and validated in a temporary directory first, then the validated scaffold files are merged into the target; strict mode is not a whole-directory replacement.
177
+
178
+ ### Remote and web agent sessions
179
+
180
+ Scaffolded projects bootstrap themselves in ephemeral environments
181
+ (Claude Code on the web, CI agents, fresh clones):
182
+
183
+ - A **SessionStart hook** (`.claude/hooks/session_setup.sh`) syncs
184
+ dependencies when a session opens in a cold environment — `just setup`
185
+ when available, falling back to `uv sync` / `bun install` /
186
+ `go mod download`. Warm sessions are a no-op: a content stamp of the
187
+ dependency manifests short-circuits before any tool runs, and a failed
188
+ bootstrap warns without blocking the session.
189
+ - The opt-in **`--devcontainer`** flag renders a minimal
190
+ `.devcontainer/` (Ubuntu base image; post-create installs `just` plus
191
+ the language toolchain and reuses the same bootstrap) — one consistent
192
+ environment for new colleagues, Codespaces, and agent containers.
193
+
194
+ ## Example command
195
+
196
+ Scaffold an Obsidian-only Python project with Context7 MCP:
197
+
198
+ ```bash
199
+ uvx --from ~/.local/share/project-init project-init /path/to/my-project \
200
+ --non-interactive \
201
+ --preset obsidian-only --name example --description "example python project" \
202
+ --language python --mcps context7
203
+ ```
204
+
205
+ The test suite validates this command works correctly — see `TestREADMEExampleCommand` in `tests/test_readme_examples.py`.
206
+
207
+ ## Update
208
+
209
+ Re-run the installer — it moves the clone to the latest tagged release:
210
+
211
+ ```bash
212
+ curl -sSL https://raw.githubusercontent.com/VytCepas/project-init/main/install.sh | bash
213
+ ```
214
+
215
+ (`PROJECT_INIT_REF=main` for the development head; releases are cut by
216
+ tagging `vX.Y.Z`, which triggers the release workflow.)
217
+
218
+ ### Upgrading a scaffolded project
219
+
220
+ Scaffolded projects are snapshots — as project-init improves, they drift.
221
+ After updating the tool itself, re-render any project from its recorded
222
+ config and see what changed:
223
+
224
+ ```bash
225
+ project-init upgrade /path/to/my-project # drift report only, touches nothing
226
+ project-init upgrade /path/to/my-project --apply # apply the changes
227
+ ```
228
+
229
+ The report classifies every template-owned file:
230
+
231
+ | State | Meaning | `--apply` does |
232
+ |---|---|---|
233
+ | new | not in your project | creates it |
234
+ | changed | drifted, but you never edited it | updates it |
235
+ | conflict | drifted **and** locally edited | writes the new render as a `<file>.new` sibling — your edit is never overwritten |
236
+ | removed | no longer rendered by current templates | nothing (reported only; upgrade never deletes) |
237
+
238
+ `.claude/memory/` and `.claude/vault/` are never compared or touched, and
239
+ `.claude/config.yaml` keeps your hand-edited fields (`project_key`, board
240
+ number) — only its `project_init_version` and the scaffold record are
241
+ refreshed.
242
+
243
+ How it works: scaffolding records the preset, template variables, and a
244
+ content-hash manifest in a `scaffold:` block at the end of
245
+ `.claude/config.yaml`. Upgrade re-renders the same preset at the current
246
+ template version into a staging directory and compares hashes, so user
247
+ edits are distinguishable from upstream template changes. **Migration:**
248
+ projects scaffolded before this record existed are reconstructed from the
249
+ semantic config fields; without recorded hashes, every modified file is
250
+ conservatively treated as a conflict (`.new` sibling). Run `upgrade --apply`
251
+ once and the record is written for next time.
252
+
253
+ ## Uninstall
254
+
255
+ ```bash
256
+ rm -rf ~/.local/share/project-init ~/.claude/commands/project-init.md
257
+ ```
258
+
259
+ ## Troubleshooting
260
+
261
+ **`/usr/bin/env: 'bash\r': No such file or directory`**
262
+ A shell template arrived with CRLF line endings. The repo enforces LF via `.gitattributes`; if you cloned through Windows in a way that converted endings, run `dos2unix install.sh templates/**/*.sh` and re-clone with `git clone --config core.autocrlf=false`.
263
+
264
+ **`uv: command not found` after install**
265
+ The installer adds `~/.local/bin` to PATH for the current process only. Add it to your shell profile: `export PATH="$HOME/.local/bin:$PATH"` in `~/.bashrc` / `~/.zshrc`.
266
+
267
+ **`claude mcp add` fails with `command not found: bunx`**
268
+ The MCP catalog uses [bun](https://bun.sh) instead of npm/npx. Install it once:
269
+ ```bash
270
+ curl -fsSL https://bun.sh/install | bash
271
+ ```
272
+
273
+ **Hooks silently do nothing on commit**
274
+ The hooks need `python3` on `PATH` (replaces the previous `jq` dependency). They auto-detect `uv run ruff` for uv-managed Python projects and fall back to a system `ruff`.
275
+
276
+ **WSL: phantom permission/CRLF changes when working from Git Bash on Windows**
277
+ Edit and commit from inside WSL (`wsl` then `cd ~/projects/...`). Editing WSL files from Git Bash on Windows mangles executable bits and line endings.
278
+
279
+ **`Unknown preset 'foo'`**
280
+ Run `project-init --help` and pick from `obsidian-only` or `obsidian-graphify` (ADR-009). Custom presets go in `templates/presets/<name>.toml`.
281
+
282
+ ## Positioning in the ecosystem
283
+
284
+ Where project-init sits relative to the (fast-moving) community landscape, so
285
+ adopters know what this tool owns and where it defers:
286
+
287
+ - **What this scaffolder owns**: project infrastructure files (CI workflows,
288
+ `.gitignore`, GitHub issue/PR templates and board automation),
289
+ preset composition with deterministic, tested rendering, and the integrated
290
+ GitHub lifecycle (DAG-enforced issue → branch → PR → review → merge). No
291
+ community plugin or scaffolder covers these.
292
+ - **Knowledge-graph memory**: the community has consolidated around
293
+ [Graphify](https://github.com/safishamsi/graphify) for codebase knowledge
294
+ graphs. The `obsidian-graphify` preset wires it in (ADR-009); the
295
+ hand-rolled LightRAG overlay was removed once Graphify landed (PI-172).
296
+ - **Distributing `.claude/` components**: the official
297
+ [Claude Code plugin marketplace](https://code.claude.com/docs/en/discover-plugins)
298
+ is the standard channel for hooks/skills/agents. This repo doubles as a
299
+ marketplace (`.claude-plugin/marketplace.json`) shipping the
300
+ `project-init-workflow` plugin — the project-agnostic skills and guard
301
+ hooks, auto-update included. Scaffolds are **plugin-first** (ADR-010
302
+ cutover): `settings.json` enables the plugin, and a hook or skill fix
303
+ shipped in the plugin reaches every project without re-scaffolding. The
304
+ `--no-plugin` flag restores file copies + local wiring for offline or
305
+ no-marketplace-trust environments; the scaffolder keeps owning project
306
+ files either way.
307
+ - **`AGENTS.md` vs `CLAUDE.md`**: Claude Code still reads only `CLAUDE.md`
308
+ ([anthropics/claude-code#34235](https://github.com/anthropics/claude-code/issues/34235)),
309
+ while most other tools read the `AGENTS.md` standard — which is why this
310
+ repo and scaffolded projects keep both: today `AGENTS.md` (and `GEMINI.md`)
311
+ redirect readers to the canonical `CLAUDE.md`; inverting that so `AGENTS.md`
312
+ becomes canonical is planned in #136.
313
+
314
+ ## Further reading
315
+
316
+ - [Using project-init in Your Project](https://github.com/VytCepas/project-init/blob/main/docs/guides/using-project-init.md) — full workflow, day-to-day usage, customization, and troubleshooting
317
+ - [Template System](https://github.com/VytCepas/project-init/blob/main/docs/development/template-system.md) — how layers and variables work
318
+ - [Contributing](https://github.com/VytCepas/project-init/blob/main/docs/development/contributing.md) — how to contribute to project-init itself
319
+
320
+ ## Layout of this repo
321
+
322
+ ```
323
+ project-init/
324
+ ├── pyproject.toml # uv-managed, rich-only runtime dep, ruff-only dev
325
+ ├── install.sh # bootstrap one-liner
326
+ ├── src/project_init/ # wizard CLI + scaffold engine
327
+ ├── templates/
328
+ │ ├── base/ # always copied
329
+ │ ├── obsidian/ # Obsidian vault overlay (both presets)
330
+ │ ├── graphify/ # Graphify memory overlay
331
+ │ └── presets/ # toml preset definitions
332
+ ├── examples/ # sample scaffolded outputs
333
+ └── tests/ # focused pytest modules by behavior area
334
+ ```
335
+
336
+ ## Status
337
+
338
+ Actively developed; v0.3.0 is the first PyPI release. Track work in [GitHub Issues](https://github.com/VytCepas/project-init/issues).
339
+
340
+ ## License
341
+
342
+ Apache-2.0 — see [LICENSE](https://github.com/VytCepas/project-init/blob/main/LICENSE).
@@ -0,0 +1,173 @@
1
+ project_init/__init__.py,sha256=xvbIF_FyFh4rfRcTuP0Phj_Zzn92rQsZkUhbTWXnYf0,155
2
+ project_init/__main__.py,sha256=w5MPjaYesnsGTQ7WqDtg9XxRnYtTyn28B_2Wh4cI1oo,22795
3
+ project_init/mcps.py,sha256=R6OLwfW_QQB2NZ8Dzca8PdreOzl1pp_ulDsWxzpoTWI,1906
4
+ project_init/scaffold.py,sha256=FnFI5F7F4PyKpjprJQLhWMimOBCWV0GSZGlVCvDZgjs,14596
5
+ project_init/upgrade.py,sha256=q7tysZTcioMFwFyrVQLS76nvBF2loqojPgL924V-We8,21939
6
+ project_init/templates/base/AGENTS.md.tmpl,sha256=275sOO39RDK-8evy0SfaclOPE33E0KscW0rWRNjzp8Y,5128
7
+ project_init/templates/base/CLAUDE.md.tmpl,sha256=XahtVpgaSj8eiRIAC_GdRQPuo5KFb6gZ_j2HgScx5b0,741
8
+ project_init/templates/base/CONTRIBUTING.md.tmpl,sha256=S3_o7UgJ6QHi1GYHZkBQilMNfXCjTHAAk5NjHdvjx-c,1965
9
+ project_init/templates/base/GEMINI.md.tmpl,sha256=Te8Dk5tjl2wRz-HASThmsNqw4F5JRsZEAN66-970QSw,723
10
+ project_init/templates/base/LICENSE.tmpl,sha256=ipKvTfTkf4miGungxJQYlvjR3oYfSfI50-dYPsHgO1I,12965
11
+ project_init/templates/base/SECURITY.md.tmpl,sha256=GSe1UNUWkTS27rdCI1HzmbWj1WPWF9bQPADoc3sWKt8,826
12
+ project_init/templates/base/dot_env.example.tmpl,sha256=9X9r3g4CVThPv72oBBImu86xlKhjYKahatc3hug3gmU,609
13
+ project_init/templates/base/dot_gitignore.tmpl,sha256=TvW3C-hdXab7jgRMQ7jL9QI-BBJh61dYP473ZOT9Lzc,925
14
+ project_init/templates/base/dot_golangci.yml.tmpl,sha256=tjlfDI8hdQTe1MPbFHDw3qzUkd468gzCFoeD8JfD_F0,572
15
+ project_init/templates/base/eslint.config.mjs.tmpl,sha256=zpUxOr6DzA_2pmMjb6S8IqQQBctkOpMR8kyN0nSld0c,1074
16
+ project_init/templates/base/justfile.tmpl,sha256=vdd1rqS2plclbGb8FdH2GpZaEYHlnbvnfY68opP0smg,2784
17
+ project_init/templates/base/mise.toml.tmpl,sha256=Pxnds-g4WuvRzxWr_xeX9HB214OI5hWavDtVVeeDJF4,650
18
+ project_init/templates/base/mkdocs.yml.tmpl,sha256=oZyOy8d2DgaNShWVCBhV7eQe7p11_qyObxD-Tehh8ds,1086
19
+ project_init/templates/base/renovate.json,sha256=eLdaFGodeh0LUHfMLEy_O9IHOYCZsOOi0Yh60IxHuks,320
20
+ project_init/templates/base/ruff.toml.tmpl,sha256=qx62dxmJh1_f2tDYI3QU6sUyhIBeqxUr-QmFXz2Ktw8,1192
21
+ project_init/templates/base/typedoc.json.tmpl,sha256=Ckqh63E0BmF9YgQYLre4MX2Vw2_lgF7OHr6klueX2JM,408
22
+ project_init/templates/base/docs/index.md.tmpl,sha256=w4K-cl995pKI3-NXRE0g599Z3bwYNy0SuOb7qN9YYu4,918
23
+ project_init/templates/base/docs/explanation/index.md,sha256=a-YzQdDK1LWenlU5-zt4iF_yFaWEZvWo_bVuU9B5Szg,371
24
+ project_init/templates/base/docs/how-to/index.md,sha256=42wJexOyrGvCqg4oHV2FnCnLvE0QGfDN3fZ3_a4Djs4,263
25
+ project_init/templates/base/docs/reference/index.md,sha256=Y-dEwKKK6gPYh29UFJAf4cJ5xNaYovj-3A1wKu3KC0U,403
26
+ project_init/templates/base/docs/tutorials/index.md,sha256=c_khMxY-P3-svlvPMJrjTZNK1SjgDxqy-Hnqys5p1CA,244
27
+ project_init/templates/base/dot_claude/config.yaml.tmpl,sha256=d4SII-QbYTb3uUrwUNiTA85zkF-Ghg3coOXMcw9wfBE,1071
28
+ project_init/templates/base/dot_claude/project-init.md.tmpl,sha256=pTBYNqXRsKomLqX1ygvV_Sjg4RQCyKDoW-QVJzAZuZM,9067
29
+ project_init/templates/base/dot_claude/settings.json.tmpl,sha256=xCjCRjJb72BXZL94tSvhaw9JjmFmYmFd3VpJ2wRiysw,2078
30
+ project_init/templates/base/dot_claude/agents/README.md,sha256=DCJgcPWNsQ4a833xsnQe0BEIMS_CtLBwpZJhMknGBLA,1095
31
+ project_init/templates/base/dot_claude/docs/README.md,sha256=M_vTg3CxwXpBgIgg856SvpNWAGRoHH8N3eSWfeZ2POY,923
32
+ project_init/templates/base/dot_claude/docs/adr/adr-001-memory-stack.md.tmpl,sha256=Kcw7RwWXG7JnoZlTFaSjwNLa2UaP8--Av1DRWzR28so,849
33
+ project_init/templates/base/dot_claude/docs/adr/adr-002-mcp-choices.md.tmpl,sha256=psL6Gh0VMKUP7FvhGz0tnyC89j_CgSkL_5dK41UCv8k,1238
34
+ project_init/templates/base/dot_claude/docs/adr/adr-template.md,sha256=xeft-LilfFpDPFRn6vkWU4yuEfof6a5Fr56ye2VxbhI,873
35
+ project_init/templates/base/dot_claude/docs/development/conventions.md.tmpl,sha256=PnvxT3ca38WrGEizThiNMy9a9-vbQTpfKRRhwzbWDwU,1115
36
+ project_init/templates/base/dot_claude/docs/development/testing.md,sha256=BXBLbmCyTwhdQGXHxzUT6_14YQJi8lqtrPU05DqFytY,940
37
+ project_init/templates/base/dot_claude/docs/guides/developer-onboarding.md,sha256=e3ATJFmDUWmUcBeHeS7OZhBDDKNfNk9nkxxLb-CHa04,4165
38
+ project_init/templates/base/dot_claude/docs/guides/issue-metadata.md,sha256=nF-H8J7s6CTXOZBPhQZRThOXt5Ot7W7vJuJtSIgynX4,1167
39
+ project_init/templates/base/dot_claude/docs/guides/secrets.md,sha256=OXGp3QVoqqHsZeE6boOwewuW95XLKxDsbolBEdcqnM4,2472
40
+ project_init/templates/base/dot_claude/docs/guides/using-memory.md,sha256=BeanXCfeoi4n6US6XNeecG-lhjh_b7u35lze9Y3BQZk,1275
41
+ project_init/templates/base/dot_claude/hooks/README.md,sha256=ElBlh7IniLdtYyXq8Vbc9kVL2DACMmKu_eSjwp4_juY,808
42
+ project_init/templates/base/dot_claude/hooks/agent_guard_adapter.py.tmpl,sha256=hucq5XMVljDy4AbfIGJv1byOzeB-lltXvP9qYdR46gw,2164
43
+ project_init/templates/base/dot_claude/hooks/dag_workflow.py,sha256=tsjTgM4Wj9K-5sAgcYweUpmYUTCXoR1jMOE-YqNvyVk,21858
44
+ project_init/templates/base/dot_claude/memory/MEMORY.md.tmpl,sha256=VE2sgZecvnlcxVoCA2DCVpA2OBti-HnRDOjf_cDeB5E,508
45
+ project_init/templates/base/dot_claude/memory/README.md,sha256=_34U2ELYdfU319Omy-GN9H51QIiUmAT5TzSOMAu8vF4,1614
46
+ project_init/templates/base/dot_claude/memory/SCHEMA.md,sha256=XHGRy1lGpgOp4fcVg38ng_5L9zbYczTPRbhTiS-rkQI,1698
47
+ project_init/templates/base/dot_claude/memory/feedback_conventions.md,sha256=q9lIE7vWqoUi9d8VI_Y3hfoAXZBSuFE8rVlm4N4LpEM,296
48
+ project_init/templates/base/dot_claude/memory/project_context.md.tmpl,sha256=X4dLvQFFxJquQaLCH723hCKVKRDOSy3AwGvlAF0bUGs,332
49
+ project_init/templates/base/dot_claude/memory/user_role.md,sha256=y-sIhuL5yOS45ETEg14trIW2a9-Nwk1oMp7ju_RYWGs,202
50
+ project_init/templates/base/dot_claude/rules/go.md,sha256=_32OHTZjcPUwsnrgSJala8J1r9ny_F3WOx-zGW9RF-c,205
51
+ project_init/templates/base/dot_claude/rules/hooks.md,sha256=zhV-oB859pexDRcEiTgreOsjT-AkpoXjgUzMDkFhoIA,1367
52
+ project_init/templates/base/dot_claude/rules/node.md,sha256=XBzc7cGiHY5uJ-wnVJz3P3dJPSQiOvapFlHYmWtcl1U,417
53
+ project_init/templates/base/dot_claude/rules/python.md,sha256=HgcSk154u25k9bzqa824mS4_bzGgj1yAwi2ay2fRCe8,901
54
+ project_init/templates/base/dot_claude/scripts/README.md,sha256=3kaBqOAGi7YzTJ4zjAi5o79edLfFyi_jO6yun00ISB4,1062
55
+ project_init/templates/base/dot_claude/scripts/create_issue.sh,sha256=mFFG5wHuf5UVi6o1m815Y2AXqn5mQGgdfEQS825OR6g,16615
56
+ project_init/templates/base/dot_claude/scripts/create_nojira_pr.sh,sha256=UJN94j7mNwWTS1ik9_wJ--8rqdGfBHA4YTV-QLx2g2o,159
57
+ project_init/templates/base/dot_claude/scripts/finish_pr.sh,sha256=syCr3QlABEcw7JTKfQIZQkMQqpUfLh-oirlQqRlJVo4,149
58
+ project_init/templates/base/dot_claude/scripts/install_hooks.sh,sha256=EUdCKzT8e4rCdIj8hGDQ-ErrBiZQ8ExKpF83nXUfJn0,1703
59
+ project_init/templates/base/dot_claude/scripts/monitor_pr.sh,sha256=ppNfJ7lhoI585FgU2vDMe3K3zaYOyT3F9k2PWTIPYo4,9877
60
+ project_init/templates/base/dot_claude/scripts/promote_review.sh,sha256=L5nQ_vW1F02KVjb6TXyvwav7zJLCyWMo8EnvaXJQAO8,150
61
+ project_init/templates/base/dot_claude/scripts/push_branch.sh,sha256=r-d81x7gViabHiPwfyfuY2ITO_mMgnVYUVgcB0kmEl4,241
62
+ project_init/templates/base/dot_claude/scripts/push_wiki.sh,sha256=H5eYWhfEM7HlWvsAJIaCHFtSQoKnQl5bbahthtZ6ExE,857
63
+ project_init/templates/base/dot_claude/scripts/setup_github.sh,sha256=uDizAJosfmhZFMknZ2YffRM_kntTtCHbfi3QIM2WZHU,7884
64
+ project_init/templates/base/dot_claude/scripts/start_issue.sh,sha256=5_HM901oIrobYWJcTyPnIKwn2R88iXwxDuvPbZ7aA88,3665
65
+ project_init/templates/base/dot_claude/skills/README.md,sha256=PcIqtxLcXHfpJZwE5Wyn-up5N9myWmdO7ozWlkQ8KHQ,528
66
+ project_init/templates/base/dot_claude/skills/plan/SKILL.md.tmpl,sha256=V2eZnMYpHe7b_W9LcX3fvRQUBrJ8cvO8gfWVzmC8PIo,1248
67
+ project_init/templates/base/dot_claude/vault/README.md,sha256=d4vYXPjK0x2PvWlVHs0OC4_N97rJhGnWT2hTYFDg31Q,850
68
+ project_init/templates/base/dot_claude/vault/decisions/README.md,sha256=qmpoLzhkechTy1I3NBiYKBkqGMGNCOacLS6szb_0pHE,307
69
+ project_init/templates/base/dot_claude/vault/design/README.md,sha256=5_mVAA1NU_a0xANw3TYbsknXlz-KTZg5P2njXvhVYh8,120
70
+ project_init/templates/base/dot_claude/vault/knowledge/README.md,sha256=fr8Gqy_Om8IQozYlFiIA6LRF7xcwkny1KapD--jtBu4,182
71
+ project_init/templates/base/dot_claude/vault/sessions/README.md,sha256=WWZ7U1c12_HYu_9f2y25vkossX9V-LzeFf2VqYq5MaY,182
72
+ project_init/templates/base/dot_devcontainer/devcontainer.json.tmpl,sha256=Ssg7fZcQ1vDa_4s0flqh56-WcjhnlAtjY2r4a67TcNc,498
73
+ project_init/templates/base/dot_devcontainer/post-create.sh.tmpl,sha256=6FkoRsUym8bvVPMManTjRwu92CTSh_DHAbswNNZES64,1309
74
+ project_init/templates/base/dot_github/CODEOWNERS.tmpl,sha256=ECpvW5lyFuzHXvgXh1Ub3izbBtigercOLcwZc9WmniQ,539
75
+ project_init/templates/base/dot_github/copilot-instructions.md.tmpl,sha256=9P8sRgJBhAEgvw93zA2I5tEkSTz6g4adOCIfpV39PpQ,1854
76
+ project_init/templates/base/dot_github/pull_request_template.md,sha256=7PNW7XYbv6NHAyoG3hM8djNSR9p-FAfWm8ocGIHsQGQ,428
77
+ project_init/templates/base/dot_github/ISSUE_TEMPLATE/bug.yml,sha256=pOmwRCmYk7IOr-v61Py-EOMJPqCyHrXWGUpuhLjjSx4,2357
78
+ project_init/templates/base/dot_github/ISSUE_TEMPLATE/chore.yml,sha256=_zjW5S4WBO0IY9hS_SM3B-9-QKcVGI5sez39ai9VREk,2049
79
+ project_init/templates/base/dot_github/ISSUE_TEMPLATE/config.yml,sha256=h_qvS6eX4RnfH98gvEpMaDf0PrAH2E5OfLmgKaQq2ec,189
80
+ project_init/templates/base/dot_github/ISSUE_TEMPLATE/docs.yml,sha256=jl-sM0bEM2oyR3pizjYlqjHo3jNAJyi48oH4ENKF-hU,2182
81
+ project_init/templates/base/dot_github/ISSUE_TEMPLATE/feature.yml,sha256=bTI-dhMW1oXYN3-htwAFss5C_b3X6aMSnQnpfIyRbIs,2192
82
+ project_init/templates/base/dot_github/ISSUE_TEMPLATE/test.yml,sha256=Udj2wu9gQ5snhT_xF_VvWt7Be6jMtIOuAvxN3uwYzPU,2352
83
+ project_init/templates/base/dot_github/hooks/commit-msg,sha256=kvunmEhrF2bjHuXY0cmXg0Qtowl8Gwdrg3mYhvoj0qc,1700
84
+ project_init/templates/base/dot_github/hooks/pre-commit,sha256=pKBbAAFlAsxNQ4uKn82pTsLp9sCNrcVLSzjepHoAPKs,677
85
+ project_init/templates/base/dot_github/hooks/pre-push,sha256=-4SNx8VMNNsH8LQe1ImfBd9F1xDLEQT8YUvrK7juvHY,1956
86
+ project_init/templates/base/dot_github/workflows/board-automation.yml,sha256=jpi6QPCt92tY1nDI7lV8UaGcrE90MpvDKpab6BIvWP8,8874
87
+ project_init/templates/base/dot_github/workflows/ci.yml.tmpl,sha256=mH1Ix9ppCQEUTDq2wDPWS7VH449TqArmpuWENvjbJ8c,6805
88
+ project_init/templates/base/dot_github/workflows/docs.yml.tmpl,sha256=rJX91SmypSaYY6cRGqRg2lIZQF1DH00_8RaHBqe-ZSc,2282
89
+ project_init/templates/base/dot_github/workflows/issue-validation.yml,sha256=8sLXumBSB1cr_X1BHkMby0PfGo2jbh-l8t4PdQjbi38,2532
90
+ project_init/templates/base/dot_github/workflows/review-status.yml,sha256=Gnhq0QyuTPzavX9oKaAHVd-dKfLR8scC0-6S8yUt8WM,1811
91
+ project_init/templates/base/dot_github/workflows/validate-pr.yml,sha256=Xu_2vY7e8uNlmAYqdKVxaCdpc8-HKSw8ApFGDCKLtgw,4489
92
+ project_init/templates/base/dot_vscode/extensions.json.tmpl,sha256=0pZBfIu0Nyxiebx2kuWBmdgSMU-agkBEH46fTofUJB4,290
93
+ project_init/templates/base/dot_vscode/settings.json.tmpl,sha256=3asegrck_yIrgl89ZMtujIhLO_M10gwlLEr8EkUHZZw,211
94
+ project_init/templates/codex/dot_agents/skills/add_adr/SKILL.md,sha256=dFpXUaRjrlGd7-rY4_aKQepIbha7t9Jk76Tc7ik2L7Q,1581
95
+ project_init/templates/codex/dot_agents/skills/add_command/SKILL.md,sha256=CSFwA4lI1fL9pK1FcF6f7_0I6Tj1Pnn6oWiVC8vTp4U,2423
96
+ project_init/templates/codex/dot_agents/skills/add_hook/SKILL.md,sha256=bTi8YkGsZsx88vRGbVCPtuAcLVGrG4hempu_H4qkjFU,3369
97
+ project_init/templates/codex/dot_agents/skills/audit/SKILL.md,sha256=v3tENtJII8H4wZt1wTzA9izjBr6RPy7MQQ8tqEFP6Aw,5558
98
+ project_init/templates/codex/dot_agents/skills/create_issue/SKILL.md,sha256=W3InMsmCs4hx8kNi-1BLwGEdlPyWcCJYkydguwjV7zU,2084
99
+ project_init/templates/codex/dot_agents/skills/github_workflow/SKILL.md,sha256=jFFLQDXwXilRAyIv-E7dQAMcWXvpKHLce1GUfkjq87A,3337
100
+ project_init/templates/codex/dot_agents/skills/request_review/SKILL.md,sha256=RX2wFGYJ6IB1a5sur-HKSQaFZ4X6IiRDnLUAEGT4aE0,632
101
+ project_init/templates/codex/dot_agents/skills/review/SKILL.md,sha256=33rjM1K6peYfJb9SrNT7aN92yr7whBqZRx6k9m7mZUg,715
102
+ project_init/templates/codex/dot_agents/skills/save_memory/SKILL.md,sha256=8i7X8BcKzG2jR77mtndfowE1aCsIxfoTB3dWGuXyhFU,786
103
+ project_init/templates/codex/dot_agents/skills/session_summary/SKILL.md,sha256=cdDYocn9zDd3NKNSF1RWHk4BYp-Uub8clAJRKH24Ls0,1240
104
+ project_init/templates/codex/dot_agents/skills/start_task/SKILL.md,sha256=pE74LgR9kQVWL9ctS-BFk-zeHi5piBtuINZIjNRJRsk,2758
105
+ project_init/templates/codex/dot_agents/skills/status/SKILL.md,sha256=lJgDgk2XR4YgOEeBg4xmzeA3Xe3fPMEdLXXHbhnb4iA,685
106
+ project_init/templates/codex/dot_codex/hooks.json.tmpl,sha256=LxJcxXeMVJgkwpXTOO9_b2CY1iS0ie8YiEjUALKTyjI,303
107
+ project_init/templates/fallback/dot_claude/hooks/github_command_guard.sh,sha256=BXZUJEZN3WHF0AH5PhiiXPt5L5UA7Spug3jjAx4eqww,425
108
+ project_init/templates/fallback/dot_claude/hooks/post_edit_lint.sh,sha256=Bjpbnx7EZPeth8eZoA8wJjEqBk6nuwvfKdf5Nd7ae9g,1989
109
+ project_init/templates/fallback/dot_claude/hooks/pre_commit_gate.sh,sha256=pBmz0vPsY5NiIDa-POMkiPhq-vWdeaXZuWN0aCRcc6A,3287
110
+ project_init/templates/fallback/dot_claude/hooks/prod_guard.py,sha256=asj0aoiyccGRpPLgQPVpWjSGp3fWzn958WVnA4C7FcA,5935
111
+ project_init/templates/fallback/dot_claude/hooks/session_setup.sh,sha256=QrCRxXf5tLV6jhHhRxHzvAIC6sGRxCK4i3yaK051o-4,2077
112
+ project_init/templates/fallback/dot_claude/hooks/workflow_state_reminder.sh,sha256=oCDqFQbETgbf8kysGqRZkUvAbSFXL6MWxjUVo03uKYE,2631
113
+ project_init/templates/fallback/dot_claude/skills/INDEX.md,sha256=DqOUPhK3gPWhJmihZNgKkF41bE9UVUktmd96b5BWxYc,1454
114
+ project_init/templates/fallback/dot_claude/skills/add_adr/SKILL.md,sha256=dFpXUaRjrlGd7-rY4_aKQepIbha7t9Jk76Tc7ik2L7Q,1581
115
+ project_init/templates/fallback/dot_claude/skills/add_command/SKILL.md,sha256=CSFwA4lI1fL9pK1FcF6f7_0I6Tj1Pnn6oWiVC8vTp4U,2423
116
+ project_init/templates/fallback/dot_claude/skills/add_hook/SKILL.md,sha256=bTi8YkGsZsx88vRGbVCPtuAcLVGrG4hempu_H4qkjFU,3369
117
+ project_init/templates/fallback/dot_claude/skills/audit/SKILL.md,sha256=v3tENtJII8H4wZt1wTzA9izjBr6RPy7MQQ8tqEFP6Aw,5558
118
+ project_init/templates/fallback/dot_claude/skills/create_issue/SKILL.md,sha256=W3InMsmCs4hx8kNi-1BLwGEdlPyWcCJYkydguwjV7zU,2084
119
+ project_init/templates/fallback/dot_claude/skills/github_workflow/SKILL.md,sha256=jFFLQDXwXilRAyIv-E7dQAMcWXvpKHLce1GUfkjq87A,3337
120
+ project_init/templates/fallback/dot_claude/skills/request_review/SKILL.md,sha256=RX2wFGYJ6IB1a5sur-HKSQaFZ4X6IiRDnLUAEGT4aE0,632
121
+ project_init/templates/fallback/dot_claude/skills/review/SKILL.md,sha256=33rjM1K6peYfJb9SrNT7aN92yr7whBqZRx6k9m7mZUg,715
122
+ project_init/templates/fallback/dot_claude/skills/save_memory/SKILL.md,sha256=8i7X8BcKzG2jR77mtndfowE1aCsIxfoTB3dWGuXyhFU,786
123
+ project_init/templates/fallback/dot_claude/skills/session_summary/SKILL.md,sha256=cdDYocn9zDd3NKNSF1RWHk4BYp-Uub8clAJRKH24Ls0,1240
124
+ project_init/templates/fallback/dot_claude/skills/start_task/SKILL.md,sha256=pE74LgR9kQVWL9ctS-BFk-zeHi5piBtuINZIjNRJRsk,2758
125
+ project_init/templates/fallback/dot_claude/skills/status/SKILL.md,sha256=lJgDgk2XR4YgOEeBg4xmzeA3Xe3fPMEdLXXHbhnb4iA,685
126
+ project_init/templates/gemini/dot_agents/skills/add_adr/SKILL.md,sha256=dFpXUaRjrlGd7-rY4_aKQepIbha7t9Jk76Tc7ik2L7Q,1581
127
+ project_init/templates/gemini/dot_agents/skills/add_command/SKILL.md,sha256=CSFwA4lI1fL9pK1FcF6f7_0I6Tj1Pnn6oWiVC8vTp4U,2423
128
+ project_init/templates/gemini/dot_agents/skills/add_hook/SKILL.md,sha256=bTi8YkGsZsx88vRGbVCPtuAcLVGrG4hempu_H4qkjFU,3369
129
+ project_init/templates/gemini/dot_agents/skills/audit/SKILL.md,sha256=v3tENtJII8H4wZt1wTzA9izjBr6RPy7MQQ8tqEFP6Aw,5558
130
+ project_init/templates/gemini/dot_agents/skills/create_issue/SKILL.md,sha256=W3InMsmCs4hx8kNi-1BLwGEdlPyWcCJYkydguwjV7zU,2084
131
+ project_init/templates/gemini/dot_agents/skills/github_workflow/SKILL.md,sha256=jFFLQDXwXilRAyIv-E7dQAMcWXvpKHLce1GUfkjq87A,3337
132
+ project_init/templates/gemini/dot_agents/skills/request_review/SKILL.md,sha256=RX2wFGYJ6IB1a5sur-HKSQaFZ4X6IiRDnLUAEGT4aE0,632
133
+ project_init/templates/gemini/dot_agents/skills/review/SKILL.md,sha256=33rjM1K6peYfJb9SrNT7aN92yr7whBqZRx6k9m7mZUg,715
134
+ project_init/templates/gemini/dot_agents/skills/save_memory/SKILL.md,sha256=8i7X8BcKzG2jR77mtndfowE1aCsIxfoTB3dWGuXyhFU,786
135
+ project_init/templates/gemini/dot_agents/skills/session_summary/SKILL.md,sha256=cdDYocn9zDd3NKNSF1RWHk4BYp-Uub8clAJRKH24Ls0,1240
136
+ project_init/templates/gemini/dot_agents/skills/start_task/SKILL.md,sha256=pE74LgR9kQVWL9ctS-BFk-zeHi5piBtuINZIjNRJRsk,2758
137
+ project_init/templates/gemini/dot_agents/skills/status/SKILL.md,sha256=lJgDgk2XR4YgOEeBg4xmzeA3Xe3fPMEdLXXHbhnb4iA,685
138
+ project_init/templates/gemini/dot_claude/scripts/setup_gemini.sh.tmpl,sha256=7IjgJ2qN_693-YncrCYnL9hJD86xf0abG3_ZiWk56Co,592
139
+ project_init/templates/gemini/dot_gemini-extension/gemini-extension.json.tmpl,sha256=LxTbxBfBWumRQJ6ly1QVFaOiLdW7PQpWA8uqNc3oYZk,286
140
+ project_init/templates/gemini/dot_gemini-extension/commands/add_adr.toml,sha256=SXR9-keB1pK6Ifo71N3e3lwArjccx6-asQ_Y4Oza7Ss,304
141
+ project_init/templates/gemini/dot_gemini-extension/commands/add_command.toml,sha256=mmypcxgM3xmeI_cRoU0Ed721wi4RyTcolvEdct9Z720,315
142
+ project_init/templates/gemini/dot_gemini-extension/commands/add_hook.toml,sha256=VnoCWOgsZEcMKYcqkkA7dzAhwhmBYa7sqvb9L1fGb1w,318
143
+ project_init/templates/gemini/dot_gemini-extension/commands/audit.toml,sha256=K1PhruzaWQtUHbNypFjhWX-j9yKswbUspAM7e-qQ3vQ,368
144
+ project_init/templates/gemini/dot_gemini-extension/commands/create_issue.toml,sha256=7LN_iLILkXLEVsemReVaEiDwiLPjodEM2J6z81s1j88,316
145
+ project_init/templates/gemini/dot_gemini-extension/commands/github_workflow.toml,sha256=k0U_6xefzLinJxCdCB2hhgMEp_KgZfdGwlGEpByyva4,334
146
+ project_init/templates/gemini/dot_gemini-extension/commands/request_review.toml,sha256=errCsow1HX3qGf2aFrTg6XN79GEqe8U86FrqWZ8LiSI,183
147
+ project_init/templates/gemini/dot_gemini-extension/commands/review.toml,sha256=j-6qyyKEh-kc3UEPIoGEaeC3ZTLo26J3mDJsUzFoBQQ,210
148
+ project_init/templates/gemini/dot_gemini-extension/commands/save_memory.toml,sha256=HKKgQmwpXZH6gAFwP7mikaDcqEp2XSe6KDvjCEVkTpc,187
149
+ project_init/templates/gemini/dot_gemini-extension/commands/session_summary.toml,sha256=mpslEi3tga8qKev-C0BNWCtemQU5IQcv05KM5ByLGmM,311
150
+ project_init/templates/gemini/dot_gemini-extension/commands/start_task.toml,sha256=weVdcJMqqyHPxrVDHD_ZhAtVIvVkwNMpmPrv-W26S48,301
151
+ project_init/templates/gemini/dot_gemini-extension/commands/status.toml,sha256=meErNZGB7dSY9SQvjN6nTXAMdnDeI1KLn-Dw35O-fjY,214
152
+ project_init/templates/gemini/dot_gemini-extension/hooks/hooks.json.tmpl,sha256=GfTj2D9138SRnYNZ20WnohCcelC7vBuhIMJVZB9eZyI,366
153
+ project_init/templates/graphify/dot_claude/docs/guides/using-graphify.md,sha256=BSpF_ZY3crU52FQrhwl7egd2UJg0nZNuorO0zBuoHNI,1562
154
+ project_init/templates/graphify/dot_claude/rules/graphify.md,sha256=R9mmtnYIU21w4sYOZffTsOmieNE6V7gJZjXd_wMe9lM,762
155
+ project_init/templates/graphify/dot_claude/scripts/setup_graphify.sh,sha256=9aiLe5k6NrdC9Z1-yvXu38Ix-qkFcEGlDIGl7rNYO5M,1370
156
+ project_init/templates/obsidian/dot_claude/scripts/lint_memory.sh,sha256=kyIgNQXN3Gwyc2vM8aiRTLJSuECN8JpLkKm0ufaEQSE,3324
157
+ project_init/templates/obsidian/dot_claude/vault/log.md,sha256=KtIs6uwtamyzuDZMorhJ72hoj-nXrXDf7CPJpLkip-I,166
158
+ project_init/templates/obsidian/dot_claude/vault/decisions/adr-000-project-setup.md.tmpl,sha256=lUgmfejFD3hcrrkU7usBRZt_e-PYMgsUOCe7D9lFoP4,539
159
+ project_init/templates/obsidian/dot_claude/vault/dot_obsidian/README.md,sha256=pbD37QddfDVvX6zXd2xWQ1wfpz29VUQX5ZmTB380TeM,1369
160
+ project_init/templates/obsidian/dot_claude/vault/dot_obsidian/app.json,sha256=GbMmgXnjctlt0RL4B7PKWVlagyYxE0i_nKlzShUOlyQ,135
161
+ project_init/templates/obsidian/dot_claude/vault/dot_obsidian/community-plugins.json,sha256=Pm4HVrM_CHlktmWLGipxPvORHSuFto9MhLHYU85_K_M,54
162
+ project_init/templates/obsidian/dot_claude/vault/dot_obsidian/core-plugins.json,sha256=2gW3lqPBKYfA30fs8XAHl-0iSjeeuqdOdPhigLQxrcI,73
163
+ project_init/templates/obsidian/dot_claude/vault/templates/decision.md,sha256=Aq2qiWORhXIBurFsejDpLLqOMaVcUErytXXXzZD3zNw,187
164
+ project_init/templates/obsidian/dot_claude/vault/templates/design-note.md,sha256=5MPiDVfQuf9QQoOjWRVCvrx1K1wxYcu8RRXpc_PkoDc,159
165
+ project_init/templates/obsidian/dot_claude/vault/templates/knowledge-note.md,sha256=9T2uaeToUjcQ95V7SnumgCyGta4-JNtmQm5q7iddDeI,117
166
+ project_init/templates/obsidian/dot_claude/vault/templates/session-note.md,sha256=0qe-gd9_y14IQkar8AZZO5DNFQZPX_9EaUIiST_g2Fs,152
167
+ project_init/templates/presets/obsidian-graphify.toml,sha256=spzof9ciP4ZABKzS791IEC5sdZEhm3O0CLezDh-lGrA,538
168
+ project_init/templates/presets/obsidian-only.toml,sha256=q6IYA3SuS5fCOS9b5mmp8yRfmtH2qRK1jzIyMKkneCE,342
169
+ project_init-0.3.0.dist-info/METADATA,sha256=gw-TS4GqyrNexRMKd9CG16yr9dZMROiTuzY20_GKAao,18105
170
+ project_init-0.3.0.dist-info/WHEEL,sha256=mffPy8wBnZQn2VnJUU5jE99KsxaSfiyMHV9Yt0aLVxs,87
171
+ project_init-0.3.0.dist-info/entry_points.txt,sha256=2Sm4GKbH0dRJfI72mp6FDyj81B5TOhaH7440v5BcXUE,60
172
+ project_init-0.3.0.dist-info/licenses/LICENSE,sha256=aDPtCSItRxijBNaazoqUdhA-zf4caMcZR0aqMngiXqk,11340
173
+ project_init-0.3.0.dist-info/RECORD,,
@@ -0,0 +1,4 @@
1
+ Wheel-Version: 1.0
2
+ Generator: hatchling 1.30.1
3
+ Root-Is-Purelib: true
4
+ Tag: py3-none-any
@@ -0,0 +1,2 @@
1
+ [console_scripts]
2
+ project-init = project_init.__main__:main