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.
- project_init/__init__.py +4 -0
- project_init/__main__.py +662 -0
- project_init/mcps.py +57 -0
- project_init/scaffold.py +374 -0
- project_init/templates/base/AGENTS.md.tmpl +50 -0
- project_init/templates/base/CLAUDE.md.tmpl +16 -0
- project_init/templates/base/CONTRIBUTING.md.tmpl +55 -0
- project_init/templates/base/GEMINI.md.tmpl +16 -0
- project_init/templates/base/LICENSE.tmpl +231 -0
- project_init/templates/base/SECURITY.md.tmpl +26 -0
- project_init/templates/base/docs/explanation/index.md +9 -0
- project_init/templates/base/docs/how-to/index.md +7 -0
- project_init/templates/base/docs/index.md.tmpl +20 -0
- project_init/templates/base/docs/reference/index.md +13 -0
- project_init/templates/base/docs/tutorials/index.md +7 -0
- project_init/templates/base/dot_claude/agents/README.md +30 -0
- project_init/templates/base/dot_claude/config.yaml.tmpl +31 -0
- project_init/templates/base/dot_claude/docs/README.md +26 -0
- project_init/templates/base/dot_claude/docs/adr/adr-001-memory-stack.md.tmpl +22 -0
- project_init/templates/base/dot_claude/docs/adr/adr-002-mcp-choices.md.tmpl +32 -0
- project_init/templates/base/dot_claude/docs/adr/adr-template.md +29 -0
- project_init/templates/base/dot_claude/docs/development/conventions.md.tmpl +31 -0
- project_init/templates/base/dot_claude/docs/development/testing.md +25 -0
- project_init/templates/base/dot_claude/docs/guides/developer-onboarding.md +110 -0
- project_init/templates/base/dot_claude/docs/guides/issue-metadata.md +27 -0
- project_init/templates/base/dot_claude/docs/guides/secrets.md +50 -0
- project_init/templates/base/dot_claude/docs/guides/using-memory.md +36 -0
- project_init/templates/base/dot_claude/hooks/README.md +15 -0
- project_init/templates/base/dot_claude/hooks/agent_guard_adapter.py.tmpl +64 -0
- project_init/templates/base/dot_claude/hooks/dag_workflow.py +610 -0
- project_init/templates/base/dot_claude/memory/MEMORY.md.tmpl +11 -0
- project_init/templates/base/dot_claude/memory/README.md +51 -0
- project_init/templates/base/dot_claude/memory/SCHEMA.md +52 -0
- project_init/templates/base/dot_claude/memory/feedback_conventions.md +11 -0
- project_init/templates/base/dot_claude/memory/project_context.md.tmpl +11 -0
- project_init/templates/base/dot_claude/memory/user_role.md +7 -0
- project_init/templates/base/dot_claude/project-init.md.tmpl +174 -0
- project_init/templates/base/dot_claude/rules/go.md +14 -0
- project_init/templates/base/dot_claude/rules/hooks.md +30 -0
- project_init/templates/base/dot_claude/rules/node.md +17 -0
- project_init/templates/base/dot_claude/rules/python.md +25 -0
- project_init/templates/base/dot_claude/scripts/README.md +15 -0
- project_init/templates/base/dot_claude/scripts/create_issue.sh +577 -0
- project_init/templates/base/dot_claude/scripts/create_nojira_pr.sh +3 -0
- project_init/templates/base/dot_claude/scripts/finish_pr.sh +3 -0
- project_init/templates/base/dot_claude/scripts/install_hooks.sh +55 -0
- project_init/templates/base/dot_claude/scripts/monitor_pr.sh +270 -0
- project_init/templates/base/dot_claude/scripts/promote_review.sh +3 -0
- project_init/templates/base/dot_claude/scripts/push_branch.sh +5 -0
- project_init/templates/base/dot_claude/scripts/push_wiki.sh +34 -0
- project_init/templates/base/dot_claude/scripts/setup_github.sh +219 -0
- project_init/templates/base/dot_claude/scripts/start_issue.sh +134 -0
- project_init/templates/base/dot_claude/settings.json.tmpl +83 -0
- project_init/templates/base/dot_claude/skills/README.md +12 -0
- project_init/templates/base/dot_claude/skills/plan/SKILL.md.tmpl +40 -0
- project_init/templates/base/dot_claude/vault/README.md +21 -0
- project_init/templates/base/dot_claude/vault/decisions/README.md +22 -0
- project_init/templates/base/dot_claude/vault/design/README.md +3 -0
- project_init/templates/base/dot_claude/vault/knowledge/README.md +5 -0
- project_init/templates/base/dot_claude/vault/sessions/README.md +5 -0
- project_init/templates/base/dot_devcontainer/devcontainer.json.tmpl +17 -0
- project_init/templates/base/dot_devcontainer/post-create.sh.tmpl +31 -0
- project_init/templates/base/dot_env.example.tmpl +13 -0
- project_init/templates/base/dot_github/CODEOWNERS.tmpl +12 -0
- project_init/templates/base/dot_github/ISSUE_TEMPLATE/bug.yml +98 -0
- project_init/templates/base/dot_github/ISSUE_TEMPLATE/chore.yml +82 -0
- project_init/templates/base/dot_github/ISSUE_TEMPLATE/config.yml +5 -0
- project_init/templates/base/dot_github/ISSUE_TEMPLATE/docs.yml +84 -0
- project_init/templates/base/dot_github/ISSUE_TEMPLATE/feature.yml +87 -0
- project_init/templates/base/dot_github/ISSUE_TEMPLATE/test.yml +90 -0
- project_init/templates/base/dot_github/copilot-instructions.md.tmpl +25 -0
- project_init/templates/base/dot_github/hooks/commit-msg +52 -0
- project_init/templates/base/dot_github/hooks/pre-commit +16 -0
- project_init/templates/base/dot_github/hooks/pre-push +51 -0
- project_init/templates/base/dot_github/pull_request_template.md +22 -0
- project_init/templates/base/dot_github/workflows/board-automation.yml +232 -0
- project_init/templates/base/dot_github/workflows/ci.yml.tmpl +204 -0
- project_init/templates/base/dot_github/workflows/docs.yml.tmpl +98 -0
- project_init/templates/base/dot_github/workflows/issue-validation.yml +72 -0
- project_init/templates/base/dot_github/workflows/review-status.yml +48 -0
- project_init/templates/base/dot_github/workflows/validate-pr.yml +103 -0
- project_init/templates/base/dot_gitignore.tmpl +41 -0
- project_init/templates/base/dot_golangci.yml.tmpl +20 -0
- project_init/templates/base/dot_vscode/extensions.json.tmpl +10 -0
- project_init/templates/base/dot_vscode/settings.json.tmpl +8 -0
- project_init/templates/base/eslint.config.mjs.tmpl +29 -0
- project_init/templates/base/justfile.tmpl +95 -0
- project_init/templates/base/mise.toml.tmpl +20 -0
- project_init/templates/base/mkdocs.yml.tmpl +32 -0
- project_init/templates/base/renovate.json +14 -0
- project_init/templates/base/ruff.toml.tmpl +31 -0
- project_init/templates/base/typedoc.json.tmpl +14 -0
- project_init/templates/codex/dot_agents/skills/add_adr/SKILL.md +33 -0
- project_init/templates/codex/dot_agents/skills/add_command/SKILL.md +63 -0
- project_init/templates/codex/dot_agents/skills/add_hook/SKILL.md +112 -0
- project_init/templates/codex/dot_agents/skills/audit/SKILL.md +146 -0
- project_init/templates/codex/dot_agents/skills/create_issue/SKILL.md +59 -0
- project_init/templates/codex/dot_agents/skills/github_workflow/SKILL.md +80 -0
- project_init/templates/codex/dot_agents/skills/request_review/SKILL.md +19 -0
- project_init/templates/codex/dot_agents/skills/review/SKILL.md +17 -0
- project_init/templates/codex/dot_agents/skills/save_memory/SKILL.md +17 -0
- project_init/templates/codex/dot_agents/skills/session_summary/SKILL.md +35 -0
- project_init/templates/codex/dot_agents/skills/start_task/SKILL.md +48 -0
- project_init/templates/codex/dot_agents/skills/status/SKILL.md +15 -0
- project_init/templates/codex/dot_codex/hooks.json.tmpl +17 -0
- project_init/templates/fallback/dot_claude/hooks/github_command_guard.sh +11 -0
- project_init/templates/fallback/dot_claude/hooks/post_edit_lint.sh +58 -0
- project_init/templates/fallback/dot_claude/hooks/pre_commit_gate.sh +81 -0
- project_init/templates/fallback/dot_claude/hooks/prod_guard.py +140 -0
- project_init/templates/fallback/dot_claude/hooks/session_setup.sh +62 -0
- project_init/templates/fallback/dot_claude/hooks/workflow_state_reminder.sh +72 -0
- project_init/templates/fallback/dot_claude/skills/INDEX.md +28 -0
- project_init/templates/fallback/dot_claude/skills/add_adr/SKILL.md +33 -0
- project_init/templates/fallback/dot_claude/skills/add_command/SKILL.md +63 -0
- project_init/templates/fallback/dot_claude/skills/add_hook/SKILL.md +112 -0
- project_init/templates/fallback/dot_claude/skills/audit/SKILL.md +146 -0
- project_init/templates/fallback/dot_claude/skills/create_issue/SKILL.md +59 -0
- project_init/templates/fallback/dot_claude/skills/github_workflow/SKILL.md +80 -0
- project_init/templates/fallback/dot_claude/skills/request_review/SKILL.md +19 -0
- project_init/templates/fallback/dot_claude/skills/review/SKILL.md +17 -0
- project_init/templates/fallback/dot_claude/skills/save_memory/SKILL.md +17 -0
- project_init/templates/fallback/dot_claude/skills/session_summary/SKILL.md +35 -0
- project_init/templates/fallback/dot_claude/skills/start_task/SKILL.md +48 -0
- project_init/templates/fallback/dot_claude/skills/status/SKILL.md +15 -0
- project_init/templates/gemini/dot_agents/skills/add_adr/SKILL.md +33 -0
- project_init/templates/gemini/dot_agents/skills/add_command/SKILL.md +63 -0
- project_init/templates/gemini/dot_agents/skills/add_hook/SKILL.md +112 -0
- project_init/templates/gemini/dot_agents/skills/audit/SKILL.md +146 -0
- project_init/templates/gemini/dot_agents/skills/create_issue/SKILL.md +59 -0
- project_init/templates/gemini/dot_agents/skills/github_workflow/SKILL.md +80 -0
- project_init/templates/gemini/dot_agents/skills/request_review/SKILL.md +19 -0
- project_init/templates/gemini/dot_agents/skills/review/SKILL.md +17 -0
- project_init/templates/gemini/dot_agents/skills/save_memory/SKILL.md +17 -0
- project_init/templates/gemini/dot_agents/skills/session_summary/SKILL.md +35 -0
- project_init/templates/gemini/dot_agents/skills/start_task/SKILL.md +48 -0
- project_init/templates/gemini/dot_agents/skills/status/SKILL.md +15 -0
- project_init/templates/gemini/dot_claude/scripts/setup_gemini.sh.tmpl +16 -0
- project_init/templates/gemini/dot_gemini-extension/commands/add_adr.toml +5 -0
- project_init/templates/gemini/dot_gemini-extension/commands/add_command.toml +5 -0
- project_init/templates/gemini/dot_gemini-extension/commands/add_hook.toml +5 -0
- project_init/templates/gemini/dot_gemini-extension/commands/audit.toml +5 -0
- project_init/templates/gemini/dot_gemini-extension/commands/create_issue.toml +5 -0
- project_init/templates/gemini/dot_gemini-extension/commands/github_workflow.toml +5 -0
- project_init/templates/gemini/dot_gemini-extension/commands/request_review.toml +5 -0
- project_init/templates/gemini/dot_gemini-extension/commands/review.toml +5 -0
- project_init/templates/gemini/dot_gemini-extension/commands/save_memory.toml +5 -0
- project_init/templates/gemini/dot_gemini-extension/commands/session_summary.toml +5 -0
- project_init/templates/gemini/dot_gemini-extension/commands/start_task.toml +5 -0
- project_init/templates/gemini/dot_gemini-extension/commands/status.toml +5 -0
- project_init/templates/gemini/dot_gemini-extension/gemini-extension.json.tmpl +6 -0
- project_init/templates/gemini/dot_gemini-extension/hooks/hooks.json.tmpl +18 -0
- project_init/templates/graphify/dot_claude/docs/guides/using-graphify.md +37 -0
- project_init/templates/graphify/dot_claude/rules/graphify.md +18 -0
- project_init/templates/graphify/dot_claude/scripts/setup_graphify.sh +40 -0
- project_init/templates/obsidian/dot_claude/scripts/lint_memory.sh +115 -0
- project_init/templates/obsidian/dot_claude/vault/decisions/adr-000-project-setup.md.tmpl +22 -0
- project_init/templates/obsidian/dot_claude/vault/dot_obsidian/README.md +31 -0
- project_init/templates/obsidian/dot_claude/vault/dot_obsidian/app.json +6 -0
- project_init/templates/obsidian/dot_claude/vault/dot_obsidian/community-plugins.json +1 -0
- project_init/templates/obsidian/dot_claude/vault/dot_obsidian/core-plugins.json +1 -0
- project_init/templates/obsidian/dot_claude/vault/log.md +6 -0
- project_init/templates/obsidian/dot_claude/vault/templates/decision.md +16 -0
- project_init/templates/obsidian/dot_claude/vault/templates/design-note.md +14 -0
- project_init/templates/obsidian/dot_claude/vault/templates/knowledge-note.md +12 -0
- project_init/templates/obsidian/dot_claude/vault/templates/session-note.md +16 -0
- project_init/templates/presets/obsidian-graphify.toml +16 -0
- project_init/templates/presets/obsidian-only.toml +14 -0
- project_init/upgrade.py +569 -0
- project_init-0.3.0.dist-info/METADATA +342 -0
- project_init-0.3.0.dist-info/RECORD +173 -0
- project_init-0.3.0.dist-info/WHEEL +4 -0
- project_init-0.3.0.dist-info/entry_points.txt +2 -0
- project_init-0.3.0.dist-info/licenses/LICENSE +201 -0
|
@@ -0,0 +1,83 @@
|
|
|
1
|
+
{
|
|
2
|
+
"$schema": "https://json.schemastore.org/claude-code-settings.json",
|
|
3
|
+
"env": {
|
|
4
|
+
"CLAUDE_AUTOCOMPACT_PCT_OVERRIDE": "70"
|
|
5
|
+
},
|
|
6
|
+
"extraKnownMarketplaces": {
|
|
7
|
+
"claude-plugins-official": {
|
|
8
|
+
"source": {
|
|
9
|
+
"source": "github",
|
|
10
|
+
"repo": "anthropics/claude-plugins-official"
|
|
11
|
+
}
|
|
12
|
+
},
|
|
13
|
+
"project-init": {
|
|
14
|
+
"source": {
|
|
15
|
+
"source": "github",
|
|
16
|
+
"repo": "{{project_init_repo}}"
|
|
17
|
+
}
|
|
18
|
+
}
|
|
19
|
+
},
|
|
20
|
+
"enabledPlugins": {
|
|
21
|
+
"security-guidance@claude-plugins-official": true,
|
|
22
|
+
"pr-review-toolkit@claude-plugins-official": true{{#if plugin_mode}},
|
|
23
|
+
"project-init-workflow@project-init": true{{/if plugin_mode}}
|
|
24
|
+
}{{#if no_plugin}},
|
|
25
|
+
"hooks": {
|
|
26
|
+
"SessionStart": [
|
|
27
|
+
{
|
|
28
|
+
"hooks": [
|
|
29
|
+
{
|
|
30
|
+
"type": "command",
|
|
31
|
+
"command": "\"$CLAUDE_PROJECT_DIR\"/.claude/hooks/session_setup.sh",
|
|
32
|
+
"timeout": 300
|
|
33
|
+
}
|
|
34
|
+
]
|
|
35
|
+
}
|
|
36
|
+
],
|
|
37
|
+
"PreToolUse": [
|
|
38
|
+
{
|
|
39
|
+
"matcher": "Bash",
|
|
40
|
+
"hooks": [
|
|
41
|
+
{
|
|
42
|
+
"type": "command",
|
|
43
|
+
"command": "\"$CLAUDE_PROJECT_DIR\"/.claude/hooks/pre_commit_gate.sh",
|
|
44
|
+
"timeout": 60
|
|
45
|
+
},
|
|
46
|
+
{
|
|
47
|
+
"type": "command",
|
|
48
|
+
"command": "\"$CLAUDE_PROJECT_DIR\"/.claude/hooks/github_command_guard.sh",
|
|
49
|
+
"timeout": 10
|
|
50
|
+
},
|
|
51
|
+
{
|
|
52
|
+
"type": "command",
|
|
53
|
+
"command": "python3 \"$CLAUDE_PROJECT_DIR\"/.claude/hooks/prod_guard.py",
|
|
54
|
+
"timeout": 10
|
|
55
|
+
}
|
|
56
|
+
]
|
|
57
|
+
}
|
|
58
|
+
],
|
|
59
|
+
"PostToolUse": [
|
|
60
|
+
{
|
|
61
|
+
"matcher": "Edit|Write|MultiEdit",
|
|
62
|
+
"hooks": [
|
|
63
|
+
{
|
|
64
|
+
"type": "command",
|
|
65
|
+
"command": "\"$CLAUDE_PROJECT_DIR\"/.claude/hooks/post_edit_lint.sh",
|
|
66
|
+
"timeout": 30
|
|
67
|
+
}
|
|
68
|
+
]
|
|
69
|
+
}
|
|
70
|
+
],
|
|
71
|
+
"UserPromptSubmit": [
|
|
72
|
+
{
|
|
73
|
+
"hooks": [
|
|
74
|
+
{
|
|
75
|
+
"type": "command",
|
|
76
|
+
"command": "\"$CLAUDE_PROJECT_DIR\"/.claude/hooks/workflow_state_reminder.sh",
|
|
77
|
+
"timeout": 10
|
|
78
|
+
}
|
|
79
|
+
]
|
|
80
|
+
}
|
|
81
|
+
]
|
|
82
|
+
}{{/if no_plugin}}
|
|
83
|
+
}
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
# `.claude/skills/`
|
|
2
|
+
|
|
3
|
+
Project-local Claude Code skills. Each skill is a directory `.claude/skills/<name>/SKILL.md`.
|
|
4
|
+
|
|
5
|
+
| Skill | When to use |
|
|
6
|
+
|---|---|
|
|
7
|
+
| `session_summary` | End of session — summarize work and save to vault |
|
|
8
|
+
| `start_task` | Before any non-trivial task — create a GitHub Issue |
|
|
9
|
+
| `add_hook` | When you need a new deterministic hook (safety, lint, logging) |
|
|
10
|
+
| `add_command` | When you need a new slash command for a recurring workflow |
|
|
11
|
+
|
|
12
|
+
User-level skills (across all projects) live in `~/.claude/skills/`.
|
|
@@ -0,0 +1,40 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: plan
|
|
3
|
+
description: TDD-style planning — understand requirements, write tests first, then implement with numbered steps
|
|
4
|
+
when_to_use: Use for non-trivial features or bug fixes. Plan before code to reduce rework and improve test coverage.
|
|
5
|
+
allowed-tools: Read Grep Glob Bash
|
|
6
|
+
---
|
|
7
|
+
|
|
8
|
+
Plan this work in 5 phases. Format output clearly so it's actionable.
|
|
9
|
+
|
|
10
|
+
## Phase 1 — Understand the requirement
|
|
11
|
+
|
|
12
|
+
Ask clarifying questions if needed. Answer: What is the core change? Why now? What's the acceptance criteria?
|
|
13
|
+
|
|
14
|
+
## Phase 2 — Acceptance tests (write them first)
|
|
15
|
+
|
|
16
|
+
Write the test assertions **before** implementation code:
|
|
17
|
+
|
|
18
|
+
```bash
|
|
19
|
+
# Example: test that a function returns X when given Y
|
|
20
|
+
assert_equals(parse_config("key=val"), {"key": "val"})
|
|
21
|
+
assert_throws(parse_config("broken"), ParseError)
|
|
22
|
+
```
|
|
23
|
+
|
|
24
|
+
## Phase 3 — Implementation plan
|
|
25
|
+
|
|
26
|
+
Numbered steps for implementation. Link to files (`path:line_number`). Estimate scope (1-2h, half-day, day+).
|
|
27
|
+
|
|
28
|
+
## Phase 4 — Risks and scope
|
|
29
|
+
|
|
30
|
+
- What could go wrong?
|
|
31
|
+
- Is this change backward compatible?
|
|
32
|
+
- Do other parts of the system depend on this behavior?
|
|
33
|
+
|
|
34
|
+
## Phase 5 — Definition of done
|
|
35
|
+
|
|
36
|
+
When is this complete?
|
|
37
|
+
- Tests pass
|
|
38
|
+
- Behavior works end-to-end
|
|
39
|
+
- Error cases handled
|
|
40
|
+
- Documentation updated if needed
|
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
# `.claude/vault/` — Obsidian vault
|
|
2
|
+
|
|
3
|
+
Human-authored project documentation. Open this directory as an Obsidian vault root.
|
|
4
|
+
|
|
5
|
+
## Layout
|
|
6
|
+
|
|
7
|
+
- [`decisions/`](decisions/) — architectural decisions (ADRs). One note per decision.
|
|
8
|
+
- [`design/`](design/) — design notes, system sketches, spec drafts.
|
|
9
|
+
- [`sessions/`](sessions/) — session logs (append-only, dated).
|
|
10
|
+
- [`knowledge/`](knowledge/) — domain notes, research, references.
|
|
11
|
+
|
|
12
|
+
## Why inside `.claude/`
|
|
13
|
+
|
|
14
|
+
Keeps everything agentic-dev-related under a single root folder. Obsidian doesn't care that the path is hidden — point it at `.claude/vault/` and use normally.
|
|
15
|
+
|
|
16
|
+
## Conventions
|
|
17
|
+
|
|
18
|
+
- Plain markdown, nothing Obsidian-proprietary in note content (wikilinks are fine).
|
|
19
|
+
- Dates in filenames as `YYYY-MM-DD` for chronological sort.
|
|
20
|
+
- One topic per note.
|
|
21
|
+
- Use `#tags` for lightweight categorization.
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
# decisions/
|
|
2
|
+
|
|
3
|
+
Architectural decision records. One note per decision.
|
|
4
|
+
|
|
5
|
+
Suggested template:
|
|
6
|
+
|
|
7
|
+
```markdown
|
|
8
|
+
# <decision title>
|
|
9
|
+
|
|
10
|
+
**Date**: YYYY-MM-DD
|
|
11
|
+
**Status**: proposed | accepted | superseded
|
|
12
|
+
**Supersedes**: (link)
|
|
13
|
+
**Superseded by**: (link)
|
|
14
|
+
|
|
15
|
+
## Context
|
|
16
|
+
|
|
17
|
+
## Options considered
|
|
18
|
+
|
|
19
|
+
## Decision
|
|
20
|
+
|
|
21
|
+
## Consequences
|
|
22
|
+
```
|
|
@@ -0,0 +1,17 @@
|
|
|
1
|
+
{{#if devcontainer}}{
|
|
2
|
+
"name": "{{project_name}}",
|
|
3
|
+
"image": "mcr.microsoft.com/devcontainers/base:ubuntu-24.04",
|
|
4
|
+
{{#if go}} "features": {
|
|
5
|
+
"ghcr.io/devcontainers/features/go:1": {}
|
|
6
|
+
},
|
|
7
|
+
{{/if go}} "postCreateCommand": "bash .devcontainer/post-create.sh",
|
|
8
|
+
"remoteEnv": {
|
|
9
|
+
"PATH": "${containerEnv:HOME}/.local/bin:${containerEnv:HOME}/.bun/bin:${containerEnv:PATH}"
|
|
10
|
+
},
|
|
11
|
+
"customizations": {
|
|
12
|
+
"vscode": {
|
|
13
|
+
"extensions": ["anthropic.claude-code"]
|
|
14
|
+
}
|
|
15
|
+
}
|
|
16
|
+
}
|
|
17
|
+
{{/if devcontainer}}
|
|
@@ -0,0 +1,31 @@
|
|
|
1
|
+
{{#if devcontainer}}#!/bin/bash
|
|
2
|
+
# Devcontainer bootstrap (scaffolded by project-init): install the toolchain
|
|
3
|
+
# the scaffolded workflow expects, then sync dependencies through the same
|
|
4
|
+
# path the SessionStart hook uses. Idempotent — safe to re-run.
|
|
5
|
+
set -euo pipefail
|
|
6
|
+
|
|
7
|
+
mkdir -p "$HOME/.local/bin"
|
|
8
|
+
export PATH="$HOME/.local/bin:$PATH"
|
|
9
|
+
|
|
10
|
+
# just — the canonical command surface (`just --list`)
|
|
11
|
+
if ! command -v just >/dev/null 2>&1; then
|
|
12
|
+
curl --proto '=https' --tlsv1.2 -sSf https://just.systems/install.sh \
|
|
13
|
+
| bash -s -- --to "$HOME/.local/bin"
|
|
14
|
+
fi
|
|
15
|
+
{{#if python}}
|
|
16
|
+
# uv — Python toolchain and dependency manager
|
|
17
|
+
if ! command -v uv >/dev/null 2>&1; then
|
|
18
|
+
curl -LsSf https://astral.sh/uv/install.sh | sh
|
|
19
|
+
fi
|
|
20
|
+
{{/if python}}{{#if node}}
|
|
21
|
+
# bun — Node runtime and package manager
|
|
22
|
+
if ! command -v bun >/dev/null 2>&1; then
|
|
23
|
+
curl -fsSL https://bun.sh/install | bash
|
|
24
|
+
export PATH="$HOME/.bun/bin:$PATH"
|
|
25
|
+
fi
|
|
26
|
+
{{/if node}}
|
|
27
|
+
# Sync dependencies. With --no-plugin scaffolds the SessionStart script is
|
|
28
|
+
# local; plugin-mode containers bootstrap via just (the plugin hook stamps
|
|
29
|
+
# the environment once a session opens).
|
|
30
|
+
{{#if no_plugin}}bash .claude/hooks/session_setup.sh{{/if no_plugin}}{{#if plugin_mode}}command -v just >/dev/null 2>&1 && [ -f justfile ] && just setup || true{{/if plugin_mode}}
|
|
31
|
+
{{/if devcontainer}}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
# .env.example — template for local environment (scaffolded by project-init).
|
|
2
|
+
#
|
|
3
|
+
# Copy to .env (gitignored) and fill in real values: cp .env.example .env
|
|
4
|
+
#
|
|
5
|
+
# Loading order (first match wins):
|
|
6
|
+
# 1. variables already exported in your shell
|
|
7
|
+
# 2. .env, loaded by the tool itself — `uv run --env-file .env`, bun
|
|
8
|
+
# auto-loads .env, or direnv if your team uses it
|
|
9
|
+
# Nothing here is loaded implicitly by the scaffold; tools opt in.
|
|
10
|
+
#
|
|
11
|
+
# Never commit .env: the pre-commit gitleaks scan and CI both enforce this.
|
|
12
|
+
# For team secrets, see .claude/docs/guides/secrets.md (escalation paths).
|
|
13
|
+
# EXAMPLE_API_KEY=
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
# CODEOWNERS — reviewers auto-requested for matching paths (scaffolded by project-init).
|
|
2
|
+
# Order matters: the last matching pattern wins.
|
|
3
|
+
# Owners must be GitHub usernames (@user) or teams (@org/team) with write access.
|
|
4
|
+
{{#if project_owner}}
|
|
5
|
+
# Default owner for everything in the repository.
|
|
6
|
+
* {{project_owner}}
|
|
7
|
+
{{/if project_owner}}
|
|
8
|
+
# Per-area examples — uncomment and adjust:
|
|
9
|
+
# /src/ @your-org/backend
|
|
10
|
+
# /docs/ @your-org/docs
|
|
11
|
+
# /.github/ @your-org/platform
|
|
12
|
+
# /.claude/ @your-org/platform
|
|
@@ -0,0 +1,98 @@
|
|
|
1
|
+
name: Bug
|
|
2
|
+
description: Something is broken
|
|
3
|
+
labels: [bug]
|
|
4
|
+
body:
|
|
5
|
+
- type: dropdown
|
|
6
|
+
id: priority
|
|
7
|
+
attributes:
|
|
8
|
+
label: Priority
|
|
9
|
+
options: [high, medium, low]
|
|
10
|
+
validations:
|
|
11
|
+
required: true
|
|
12
|
+
- type: input
|
|
13
|
+
id: area
|
|
14
|
+
attributes:
|
|
15
|
+
label: Area
|
|
16
|
+
placeholder: frontend, backend, docs, devops, product
|
|
17
|
+
validations:
|
|
18
|
+
required: true
|
|
19
|
+
- type: dropdown
|
|
20
|
+
id: size
|
|
21
|
+
attributes:
|
|
22
|
+
label: Size
|
|
23
|
+
options: [XS, S, M, L, XL]
|
|
24
|
+
validations:
|
|
25
|
+
required: true
|
|
26
|
+
- type: textarea
|
|
27
|
+
id: description
|
|
28
|
+
attributes:
|
|
29
|
+
label: What happened?
|
|
30
|
+
placeholder: Describe the bug
|
|
31
|
+
validations:
|
|
32
|
+
required: true
|
|
33
|
+
- type: textarea
|
|
34
|
+
id: repro
|
|
35
|
+
attributes:
|
|
36
|
+
label: Steps to reproduce
|
|
37
|
+
placeholder: |
|
|
38
|
+
1. ...
|
|
39
|
+
2. See error
|
|
40
|
+
validations:
|
|
41
|
+
required: true
|
|
42
|
+
- type: textarea
|
|
43
|
+
id: expected
|
|
44
|
+
attributes:
|
|
45
|
+
label: Expected behaviour
|
|
46
|
+
validations:
|
|
47
|
+
required: true
|
|
48
|
+
- type: textarea
|
|
49
|
+
id: environment
|
|
50
|
+
attributes:
|
|
51
|
+
label: Environment
|
|
52
|
+
placeholder: "OS, runtime version, dependency versions"
|
|
53
|
+
- type: textarea
|
|
54
|
+
id: references
|
|
55
|
+
attributes:
|
|
56
|
+
label: References
|
|
57
|
+
description: Related issues, PRs, ADRs, docs, designs, logs, or external links.
|
|
58
|
+
- type: textarea
|
|
59
|
+
id: dependencies
|
|
60
|
+
attributes:
|
|
61
|
+
label: Dependencies
|
|
62
|
+
description: Blocked-by, parent, or follow-up relationships.
|
|
63
|
+
- type: textarea
|
|
64
|
+
id: acceptance
|
|
65
|
+
attributes:
|
|
66
|
+
label: Acceptance criteria
|
|
67
|
+
placeholder: |
|
|
68
|
+
- [ ] ...
|
|
69
|
+
validations:
|
|
70
|
+
required: true
|
|
71
|
+
- type: dropdown
|
|
72
|
+
id: agent_ready
|
|
73
|
+
attributes:
|
|
74
|
+
label: Agent ready
|
|
75
|
+
description: Can an AI agent implement this without human clarification?
|
|
76
|
+
options: ["Yes", "No"]
|
|
77
|
+
default: 1
|
|
78
|
+
- type: dropdown
|
|
79
|
+
id: confidence
|
|
80
|
+
attributes:
|
|
81
|
+
label: Confidence
|
|
82
|
+
description: How well-understood is the scope and approach?
|
|
83
|
+
options: [high, medium, low, unknown]
|
|
84
|
+
default: 3
|
|
85
|
+
- type: textarea
|
|
86
|
+
id: ready
|
|
87
|
+
attributes:
|
|
88
|
+
label: Definition of Ready
|
|
89
|
+
placeholder: What must be true before implementation starts?
|
|
90
|
+
validations:
|
|
91
|
+
required: true
|
|
92
|
+
- type: textarea
|
|
93
|
+
id: done
|
|
94
|
+
attributes:
|
|
95
|
+
label: Definition of Done
|
|
96
|
+
placeholder: What must be true before this can close?
|
|
97
|
+
validations:
|
|
98
|
+
required: true
|
|
@@ -0,0 +1,82 @@
|
|
|
1
|
+
name: Chore
|
|
2
|
+
description: Maintenance, refactor, dependency update, or CI change
|
|
3
|
+
labels: [chore]
|
|
4
|
+
body:
|
|
5
|
+
- type: dropdown
|
|
6
|
+
id: priority
|
|
7
|
+
attributes:
|
|
8
|
+
label: Priority
|
|
9
|
+
options: [high, medium, low]
|
|
10
|
+
validations:
|
|
11
|
+
required: true
|
|
12
|
+
- type: input
|
|
13
|
+
id: area
|
|
14
|
+
attributes:
|
|
15
|
+
label: Area
|
|
16
|
+
placeholder: frontend, backend, docs, devops, product
|
|
17
|
+
validations:
|
|
18
|
+
required: true
|
|
19
|
+
- type: dropdown
|
|
20
|
+
id: size
|
|
21
|
+
attributes:
|
|
22
|
+
label: Size
|
|
23
|
+
options: [XS, S, M, L, XL]
|
|
24
|
+
validations:
|
|
25
|
+
required: true
|
|
26
|
+
- type: textarea
|
|
27
|
+
id: description
|
|
28
|
+
attributes:
|
|
29
|
+
label: What needs doing?
|
|
30
|
+
validations:
|
|
31
|
+
required: true
|
|
32
|
+
- type: textarea
|
|
33
|
+
id: why
|
|
34
|
+
attributes:
|
|
35
|
+
label: Why now?
|
|
36
|
+
description: What breaks or degrades if this is skipped?
|
|
37
|
+
- type: textarea
|
|
38
|
+
id: references
|
|
39
|
+
attributes:
|
|
40
|
+
label: References
|
|
41
|
+
description: Related issues, PRs, ADRs, docs, designs, or external links.
|
|
42
|
+
- type: textarea
|
|
43
|
+
id: dependencies
|
|
44
|
+
attributes:
|
|
45
|
+
label: Dependencies
|
|
46
|
+
description: Blocked-by, parent, or follow-up relationships.
|
|
47
|
+
- type: textarea
|
|
48
|
+
id: acceptance
|
|
49
|
+
attributes:
|
|
50
|
+
label: Acceptance criteria
|
|
51
|
+
placeholder: |
|
|
52
|
+
- [ ] ...
|
|
53
|
+
validations:
|
|
54
|
+
required: true
|
|
55
|
+
- type: dropdown
|
|
56
|
+
id: agent_ready
|
|
57
|
+
attributes:
|
|
58
|
+
label: Agent ready
|
|
59
|
+
description: Can an AI agent implement this without human clarification?
|
|
60
|
+
options: ["Yes", "No"]
|
|
61
|
+
default: 1
|
|
62
|
+
- type: dropdown
|
|
63
|
+
id: confidence
|
|
64
|
+
attributes:
|
|
65
|
+
label: Confidence
|
|
66
|
+
description: How well-understood is the scope and approach?
|
|
67
|
+
options: [high, medium, low, unknown]
|
|
68
|
+
default: 3
|
|
69
|
+
- type: textarea
|
|
70
|
+
id: ready
|
|
71
|
+
attributes:
|
|
72
|
+
label: Definition of Ready
|
|
73
|
+
placeholder: What must be true before implementation starts?
|
|
74
|
+
validations:
|
|
75
|
+
required: true
|
|
76
|
+
- type: textarea
|
|
77
|
+
id: done
|
|
78
|
+
attributes:
|
|
79
|
+
label: Definition of Done
|
|
80
|
+
placeholder: What must be true before this can close?
|
|
81
|
+
validations:
|
|
82
|
+
required: true
|
|
@@ -0,0 +1,84 @@
|
|
|
1
|
+
name: Docs
|
|
2
|
+
description: Documentation addition or correction
|
|
3
|
+
labels: [documentation]
|
|
4
|
+
body:
|
|
5
|
+
- type: dropdown
|
|
6
|
+
id: priority
|
|
7
|
+
attributes:
|
|
8
|
+
label: Priority
|
|
9
|
+
options: [high, medium, low]
|
|
10
|
+
validations:
|
|
11
|
+
required: true
|
|
12
|
+
- type: input
|
|
13
|
+
id: area
|
|
14
|
+
attributes:
|
|
15
|
+
label: Area
|
|
16
|
+
placeholder: docs, product, devops, frontend, backend
|
|
17
|
+
validations:
|
|
18
|
+
required: true
|
|
19
|
+
- type: dropdown
|
|
20
|
+
id: size
|
|
21
|
+
attributes:
|
|
22
|
+
label: Size
|
|
23
|
+
options: [XS, S, M, L, XL]
|
|
24
|
+
validations:
|
|
25
|
+
required: true
|
|
26
|
+
- type: textarea
|
|
27
|
+
id: scope
|
|
28
|
+
attributes:
|
|
29
|
+
label: What needs documenting?
|
|
30
|
+
description: Which behavior, workflow, or decision needs clearer documentation?
|
|
31
|
+
validations:
|
|
32
|
+
required: true
|
|
33
|
+
- type: textarea
|
|
34
|
+
id: audience
|
|
35
|
+
attributes:
|
|
36
|
+
label: Audience
|
|
37
|
+
description: Who needs this documentation?
|
|
38
|
+
placeholder: "Users, maintainers, agents, contributors, operators..."
|
|
39
|
+
- type: textarea
|
|
40
|
+
id: references
|
|
41
|
+
attributes:
|
|
42
|
+
label: References
|
|
43
|
+
description: Related issues, PRs, ADRs, files, or external links
|
|
44
|
+
- type: textarea
|
|
45
|
+
id: dependencies
|
|
46
|
+
attributes:
|
|
47
|
+
label: Dependencies
|
|
48
|
+
description: Blocked-by, parent, or follow-up relationships.
|
|
49
|
+
- type: textarea
|
|
50
|
+
id: acceptance
|
|
51
|
+
attributes:
|
|
52
|
+
label: Acceptance criteria
|
|
53
|
+
placeholder: |
|
|
54
|
+
- [ ] ...
|
|
55
|
+
validations:
|
|
56
|
+
required: true
|
|
57
|
+
- type: dropdown
|
|
58
|
+
id: agent_ready
|
|
59
|
+
attributes:
|
|
60
|
+
label: Agent ready
|
|
61
|
+
description: Can an AI agent implement this without human clarification?
|
|
62
|
+
options: ["Yes", "No"]
|
|
63
|
+
default: 1
|
|
64
|
+
- type: dropdown
|
|
65
|
+
id: confidence
|
|
66
|
+
attributes:
|
|
67
|
+
label: Confidence
|
|
68
|
+
description: How well-understood is the scope and approach?
|
|
69
|
+
options: [high, medium, low, unknown]
|
|
70
|
+
default: 3
|
|
71
|
+
- type: textarea
|
|
72
|
+
id: ready
|
|
73
|
+
attributes:
|
|
74
|
+
label: Definition of Ready
|
|
75
|
+
placeholder: What must be true before implementation starts?
|
|
76
|
+
validations:
|
|
77
|
+
required: true
|
|
78
|
+
- type: textarea
|
|
79
|
+
id: done
|
|
80
|
+
attributes:
|
|
81
|
+
label: Definition of Done
|
|
82
|
+
placeholder: What must be true before this can close?
|
|
83
|
+
validations:
|
|
84
|
+
required: true
|
|
@@ -0,0 +1,87 @@
|
|
|
1
|
+
name: Feature
|
|
2
|
+
description: New feature or enhancement
|
|
3
|
+
labels: [feature]
|
|
4
|
+
body:
|
|
5
|
+
- type: dropdown
|
|
6
|
+
id: priority
|
|
7
|
+
attributes:
|
|
8
|
+
label: Priority
|
|
9
|
+
options: [high, medium, low]
|
|
10
|
+
validations:
|
|
11
|
+
required: true
|
|
12
|
+
- type: input
|
|
13
|
+
id: area
|
|
14
|
+
attributes:
|
|
15
|
+
label: Area
|
|
16
|
+
placeholder: frontend, backend, docs, devops, product
|
|
17
|
+
validations:
|
|
18
|
+
required: true
|
|
19
|
+
- type: dropdown
|
|
20
|
+
id: size
|
|
21
|
+
attributes:
|
|
22
|
+
label: Size
|
|
23
|
+
options: [XS, S, M, L, XL]
|
|
24
|
+
validations:
|
|
25
|
+
required: true
|
|
26
|
+
- type: input
|
|
27
|
+
id: title
|
|
28
|
+
attributes:
|
|
29
|
+
label: What should this do?
|
|
30
|
+
placeholder: "Add X / Support Y / Allow Z"
|
|
31
|
+
validations:
|
|
32
|
+
required: true
|
|
33
|
+
- type: textarea
|
|
34
|
+
id: description
|
|
35
|
+
attributes:
|
|
36
|
+
label: Description
|
|
37
|
+
description: What changes and why
|
|
38
|
+
validations:
|
|
39
|
+
required: true
|
|
40
|
+
- type: textarea
|
|
41
|
+
id: acceptance
|
|
42
|
+
attributes:
|
|
43
|
+
label: Acceptance criteria
|
|
44
|
+
description: Bullet list of conditions that define "done"
|
|
45
|
+
placeholder: |
|
|
46
|
+
- [ ] Criterion 1
|
|
47
|
+
- [ ] Criterion 2
|
|
48
|
+
validations:
|
|
49
|
+
required: true
|
|
50
|
+
- type: textarea
|
|
51
|
+
id: references
|
|
52
|
+
attributes:
|
|
53
|
+
label: References
|
|
54
|
+
description: Related issues, PRs, ADRs, docs, designs, or external links.
|
|
55
|
+
- type: textarea
|
|
56
|
+
id: dependencies
|
|
57
|
+
attributes:
|
|
58
|
+
label: Dependencies
|
|
59
|
+
description: Blocked-by, parent, or follow-up relationships.
|
|
60
|
+
- type: dropdown
|
|
61
|
+
id: agent_ready
|
|
62
|
+
attributes:
|
|
63
|
+
label: Agent ready
|
|
64
|
+
description: Can an AI agent implement this without human clarification?
|
|
65
|
+
options: ["Yes", "No"]
|
|
66
|
+
default: 1
|
|
67
|
+
- type: dropdown
|
|
68
|
+
id: confidence
|
|
69
|
+
attributes:
|
|
70
|
+
label: Confidence
|
|
71
|
+
description: How well-understood is the scope and approach?
|
|
72
|
+
options: [high, medium, low, unknown]
|
|
73
|
+
default: 3
|
|
74
|
+
- type: textarea
|
|
75
|
+
id: ready
|
|
76
|
+
attributes:
|
|
77
|
+
label: Definition of Ready
|
|
78
|
+
placeholder: What must be true before implementation starts?
|
|
79
|
+
validations:
|
|
80
|
+
required: true
|
|
81
|
+
- type: textarea
|
|
82
|
+
id: done
|
|
83
|
+
attributes:
|
|
84
|
+
label: Definition of Done
|
|
85
|
+
placeholder: What must be true before this can close?
|
|
86
|
+
validations:
|
|
87
|
+
required: true
|