template-upstream
IMPORTANT: This skill must be run in the template repo context, not in a downstream project. Propose changes from the current project back to the upstream python-project-template repository by generating a structured proposal file in proposals/. Use when a pattern, rule, hook, skill, or config in this project is good enough to share with the template. Triggers on: "템플릿에 반영", "upstream 제안", "template에 올리고 싶어", "이 패턴 템플릿에 추가", "proposal 만들어줘".
Best use case
template-upstream is best used when you need a repeatable AI agent workflow instead of a one-off prompt.
IMPORTANT: This skill must be run in the template repo context, not in a downstream project. Propose changes from the current project back to the upstream python-project-template repository by generating a structured proposal file in proposals/. Use when a pattern, rule, hook, skill, or config in this project is good enough to share with the template. Triggers on: "템플릿에 반영", "upstream 제안", "template에 올리고 싶어", "이 패턴 템플릿에 추가", "proposal 만들어줘".
Teams using template-upstream should expect a more consistent output, faster repeated execution, less prompt rewriting.
When to use this skill
- You want a reusable workflow that can be run more than once with consistent structure.
When not to use this skill
- You only need a quick one-off answer and do not need a reusable workflow.
- You cannot install or maintain the underlying files, dependencies, or repository context.
Installation
Claude Code / Cursor / Codex
Manual Installation
- Download SKILL.md from GitHub
- Place it in
.claude/skills/template-upstream/SKILL.mdinside your project - Restart your AI agent — it will auto-discover the skill
How template-upstream Compares
| Feature / Agent | template-upstream | Standard Approach |
|---|---|---|
| Platform Support | Not specified | Limited / Varies |
| Context Awareness | High | Baseline |
| Installation Complexity | Unknown | N/A |
Frequently Asked Questions
What does this skill do?
IMPORTANT: This skill must be run in the template repo context, not in a downstream project. Propose changes from the current project back to the upstream python-project-template repository by generating a structured proposal file in proposals/. Use when a pattern, rule, hook, skill, or config in this project is good enough to share with the template. Triggers on: "템플릿에 반영", "upstream 제안", "template에 올리고 싶어", "이 패턴 템플릿에 추가", "proposal 만들어줘".
Where can I find the source code?
You can find the source code on GitHub using the link provided at the top of the page.
SKILL.md Source
# template-upstream > **Context:** Run this skill from the **template repo** (`python-project-template`), not from a downstream project. Proposals are template-level artifacts — one shared `proposals/` directory for all projects, not one per downstream project. Direction: Project → Template. Generate a structured proposal file in `proposals/` so that good patterns discovered in this project can be reviewed for inclusion in the upstream template. ## Proposal File Convention Path: `proposals/draft/YYYYMMDD/proposal-<slug>.md` - `draft/`: all new proposals start here - `YYYYMMDD`: today's date - `slug`: kebab-case summary of the change (e.g., `add-ruff-hook`, `update-commit-convention`) Example: `proposals/draft/20260222/proposal-add-ruff-hook.md` ## Proposal File Format ```markdown # Proposal: <title> **Date:** YYYY-MM-DD **Source project:** <project name from git remote origin or directory name> **Category:** <rule | hook | skill | config | command | other> **Status:** draft ## Summary One paragraph: what is being proposed and why it is useful. ## Motivation What problem this pattern solved in the source project. Why it belongs in the template. ### Evidence from localdocs Cite specific artifacts that demonstrate the pattern has real-world value. At least one citation required; proposal without evidence is weak. | Artifact | Location | What it shows | |----------|----------|---------------| | learn file | `localdocs/learn.<topic>.md` | Problem encountered, pattern adopted | | ADR | `localdocs/adr/adr-NNN-<slug>.md` | Architectural decision it supports | | worklog entry | `localdocs/worklog.done.md` | Task where the pattern made a difference | If no localdocs evidence exists, state: "No localdocs evidence — pattern is theoretical." The reviewer (template-proposal-review) will weight this accordingly. ## Proposed Change ### Target path(s) in template List of file paths to add or modify (relative to template repo root). ### Content \`\`\` Full file content or unified diff \`\`\` ## Caveats Any considerations when applying. Write "None." if not applicable. ## Review checklist - [ ] No conflict with existing template files - [ ] All project-specific values removed (paths, domains, secrets) - [ ] Downstream sync test needed after applying via template-downstream - [ ] localdocs evidence cited (or absence explicitly noted) ``` ## Steps ### 1. Clarify scope and load localdocs context If the user has not specified what to propose, ask: ``` What would you like to propose to the template? Please provide a file path or describe the pattern. ``` Before reading the source file, read the project's `localdocs/` to surface evidence: ```bash # Glob for all localdocs artifacts localdocs/worklog.done.md localdocs/learn.*.md localdocs/adr/*.md ``` Scan these files for mentions of the proposed pattern, file name, or related concepts. The goal is to find real-world evidence that the pattern was applied and produced value — mirroring how the `.claude/` review team (review-20260222.md) validated patterns by cross-referencing learn files, ADRs, and worklog entries before recommending promotion. If `localdocs/` does not exist or is empty, note that no evidence is available. ### 2. Read source file and security review Read the target file. Before including any content in the proposal, remove or replace the following: | Check | Example | Replace with | |-------|---------|--------------| | API keys / tokens | `sk-...`, `ghp_...` | `<YOUR_API_KEY>` | | DDNS / real domains | `myhouse.duckdns.org` | `example.com` | | Internal IP addresses | `192.168.1.10` | `<HOST_IP>` | | Inlined `.env` values | `password=secret123` | `<YOUR_PASSWORD>` | | Absolute paths (home dir) | `/Users/john/projects/` | `<PROJECT_ROOT>/` | After removal, verify the content would be safe to paste into a public GitHub issue. ### 3. Resolve template root and create date directory Resolve `TEMPLATE_ROOT` using the same priority order as `template-downstream`: 1. **User-provided path** — ask the user: "Do you have a local clone of the template repo? If yes, provide the path." If provided and `<path>/.claude/` exists, use its parent as `TEMPLATE_ROOT`. 2. **Clone** — otherwise: ```bash TMPDIR=$(mktemp -d) git clone --depth 1 https://github.com/tae0y/python-project-template.git "$TMPDIR/template" TEMPLATE_ROOT="$TMPDIR/template" ``` Then create the proposals directory: ```bash mkdir -p "$TEMPLATE_ROOT/proposals/draft/YYYYMMDD" ``` Skip if already exists. ### 4. Write proposal file Create `$TEMPLATE_ROOT/proposals/draft/YYYYMMDD/proposal-<slug>.md` using the format above. - Replace all project-specific values with `<your-value>` placeholders - Infer `Category` from file location: `.claude/rules/` → rule, `.claude/hooks/` → hook, `.claude/skills/` → skill, etc. ### 5. Report ``` Created: <TEMPLATE_ROOT>/proposals/draft/20260222/proposal-<slug>.md Review and apply via the template-proposal-review skill. ```
Related Skills
template-proposal-review
Review proposal files in localdocs/localdocs/proposals/ and decide whether to apply them to the upstream python-project-template repository. Use when evaluating proposals generated by template-upstream, deciding which ones to accept or reject, and applying accepted ones to the template repo. Triggers on: "proposal 검토", "제안 검토", "template에 반영할지", "proposals 리뷰", "upstream 반영 결정".
template-downstream
Update .claude/, .mcp.json, and .pre-commit-config.yaml from the upstream python-project-template repository into the current project. Only files that exist upstream are updated — project-only files are never deleted. Use when pulling latest tooling, rules, hooks, or skills from the canonical template into this project. Triggers on: "템플릿 최신화", "template sync", "upstream 반영", "template 업데이트".
template-broadcast
Apply template-downstream to all registered downstream projects in bulk, one project at a time. Use when you want to push the latest .claude/, .mcp.json, or .pre-commit-config.yaml to every project at once. Triggers on: "일괄 배포", "전체 프로젝트에 내려보내기", "모든 프로젝트 업데이트", "broadcast template", "bulk sync".
worklog
Update worklog files by moving tasks between todo/doing/done states. Use when recording task progress, starting new work, or marking tasks complete. Requires explicit arguments: worklog [done|doing|todo] [description].
tdd
Test-Driven Development workflow. Use for ALL code changes - features, bug fixes, refactoring. TDD is non-negotiable.
sparks-create
Apply the 13 thinking tools from "Sparks of Genius" (생각의 탄생) to reframe any problem through creative, cross-disciplinary lenses. Use when conventional analysis falls short, when you need a fresh creative angle, or when the problem spans multiple domains.
skill-creator
Create new skills, modify and improve existing skills, and measure skill performance. Use when users want to create a skill from scratch, edit, or optimize an existing skill, run evals to test a skill, benchmark skill performance with variance analysis, or optimize a skill's description for better triggering accuracy.
rethink-unblock
Break out of a stuck approach by reframing a technical problem through structured thinking frameworks. Use when blocked, going in circles, or when a fresh perspective is needed on architecture, design, or debugging.
refactoring
Refactoring assessment and patterns. Use after tests pass (GREEN phase) to assess improvement opportunities.
python-mcp-expert
Expert assistant for developing Model Context Protocol (MCP) servers in Python. Use when creating, debugging, or optimizing MCP servers with FastMCP, tools, resources, and prompts.
python-conventions
Python coding conventions and guidelines including PEP 8, type hints, docstrings, and testing standards. Automatically applied when working with Python files.
prd
Generate high-quality Product Requirements Documents (PRDs) for software systems and AI-powered features. Includes executive summaries, user stories, technical specifications, and risk analysis.