| name | git-precommit |
| description | Orchestrate pre-commit workflow including Memory Bank sync, README/CHANGELOG/ROADMAP updates, and MCP tool count sync. Triggers: GIT, gc, push, commit, æäº€, æºå commit, èŠæäº€äº, git commit, pre-commit, æšé. |
Git æäº€åå·¥äœæµïŒç·šæåšïŒ
æè¿°
å調å€å Skills 宿 Git æäº€åçæææºåå·¥äœã
æ¬å°æ¡åæäœ¿çš pre-commit framework èªåå·è¡çšåŒç¢Œå質檢æ¥ïŒä»¥å AI orchestrator èçææªåæ¥ã
ð èªæŒååŸªç° (Self-Evolution Cycle)
æ¬å°æ¡çå質å®éæ¯äžåèªææŒåçé迎系統ïŒ
âââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââ
â èªæŒååŸªç° (Self-Evolution Cycle) â
âââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââ€
â â
â â Instructions (copilot-instructions.md) â
â â å®çŸ©èŠç¯ãåŒå° AI äœ¿çš Skills â
â ⌠â
â â¡ Skills (SKILL.md æªæ¡) â
â â 確ä¿å»ºæ§å®æŽãåµå»ºæ° Hook â
â ⌠â
â ⢠Hooks (.pre-commit-config.yaml + scripts/hooks/) â
â â èªåå·è¡æª¢æ¥ãèªåä¿®æ£ â
â ⌠â
â ⣠Validate (check_evolution_cycle.py) â
â â é©è â â¡â¢ çäžèŽæ§ â
â ⌠â
â †Feedback â æŽæ° Instructions & Skills â
â â èçé©è倱æãè£éœææªãæŽæ°å¥ä»¶çæ¬ â
â ââââââ åå° â ïŒåŸªç°å®æïŒ â
â â
âââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââ
埪ç°è§žçŒææ©
| äºä»¶ | è§žçŒåäœ |
|---|
| æ°å¢ Hook | Skill åµå»º hook â evolution-cycle é©èææªå instruction æ¯åŠåæ¥ |
| ä¿®æ¹ Instruction | evolution-cycle é©è skill/hook æ¯åŠä»äžèŽ |
pre-commit autoupdate | å¥ä»¶çæ¬æŽæ° â èªåæŒå |
| é©è倱æ | å ±åäžäžèŽèïŒåŒ·å¶ä¿®åŸ©åŸæèœ commit |
æ¶æ§ïŒéå±€é²è· + èªæŒå
âââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââ
â Git Commit é²è·æ¶æ§ â
ââââââââââââââââââââââââ¬âââââââââââââââââââââââââââââââââââââââ€
â Layer 1: èªåå â Layer 2: AI ç·šæåš â
â (pre-commit hooks) â (agent orchestrator) â
ââââââââââââââââââââââââŒâââââââââââââââââââââââââââââââââââââââ€
â â
ruff + ruff-formatâ â
Memory Bank 忥 â
â â
bandit security â â
CHANGELOG æŽæ° â
â â
vulture deadcode â â
ROADMAP æŽæ° â
â â
deptry deps â â
README æŽæ° â
â â
file-hygiene â â
æ¶æ§ææªæª¢æ¥ â
â â
commit-size-guardâ â
Commit èšæ¯å»ºè° â
â â
file-hygiene â â
â â
commit-size-guardâ â
â â
async-test-checkerâ â
â â
tool-count-sync â â
â â
skills-frontmatterâ â
â â
evolution-cycle â â
â â
future-annotationsâ â
â â
no-print-in-src â â
â â
ddd-layer-importsâ â
â â
no-type-ignore-bareâ â
â â
docstring-tools â â
â â
no-env-inner-layersâ â
â â
tenant-scoped-storageâ â
â â
source-counts-guardâ â
â â
todo-scanner â â
â â
instruction-driftâ â
â â
yaml/toml/json â â
â â
no large files â â
â â
no debug stmts â â
â â
no private keys â â
â â
BOM / symlinks â â
â â
case conflicts â â
â â
Windows names â â
â â
mixed line endingâ â
â â
no-commit-to-branchâ â
â â
name-tests-test â â
â ââ Pre-push ââââââââ â â
â â
mypy (pre-push) â â
â â
semgrep (pre-push)â â
â â
pytest (pre-push) â â
ââââââââââââââââââââââââŒâââââââââââââââââââââââââââââââââââââââ€
â ð§ èªåä¿®åŸ©ïŒ â ð§ èªåä¿®åŸ©ïŒ â
â trailing whitespace â tool-count-sync (auto-stage) â
â end-of-file newline â â
â ruff --fix â â
â ruff format â â
â future-annotations â â
ââââââââââââââââââââââââŽâââââââââââââââââââââââââââââââââââââââ
éçŒè
èšå® (äžæ¬¡æ§)
uv sync
uv run pre-commit install
uv run pre-commit install --hook-type pre-push
Hook èªåæŒå (Auto-Evolution)
å¥ä»¶çæ¬æŽæ°
uv run pre-commit autoupdate
uv run pre-commit run --all-files
埪ç°äžèŽæ§é©è
uv run python scripts/hooks/check_evolution_cycle.py
æ€è
³æ¬é©èïŒ
- ææ hook ID éœåš instruction å skill äžè¢«ææªå
- ææ hook åŒçšçè
³æ¬æªæ¡éœååš
- CONTRIBUTING.md ç hook è¡šæ Œè .pre-commit-config.yaml äžèŽ
- pyproject.toml ç addopts 匷å¶å€æ ž
- Skill ææªåŒçšäºæ£ç¢ºç hook åºç€èšæœ
æ°å¢ Hook ç宿޿µçš
ç¶éèŠæ°å¢äžå hook æïŒå¿
é 宿æŽå埪ç°ïŒ
- åµå»º hook è
³æ¬ â
scripts/hooks/<name>.py
- èš»åå° .pre-commit-config.yaml â å å
¥ hook å®çŸ©
- æŽæ° copilot-instructions.md â Pre-commit Hooks åå¡
- æŽæ°æ¬ SKILL.md â æ¶æ§å Layer 1 å衚
- æŽæ° CONTRIBUTING.md â hooks è¡šæ Œ
- å·è¡é©è â
uv run python scripts/hooks/check_evolution_cycle.py
- 確èªéé â evolution-cycle hook èªååšäžæ¬¡ commit ææª¢æ¥
â ïž åŠæåªåäºæ¥é© 1-2 èæ²æ 3-5ïŒevolution-cycle hook æåš commit æå ±é¯ã
ð¡ å»ºè°æ¯æå·è¡äžæ¬¡ autoupdateïŒèªåååŸææ°ç ruff èŠåãå®å
šæ§æª¢æ¥çã
è§žçŒæ¢ä»¶
- ãæºå commitããèŠæäº€äºããgit commitã
æ³èŠäŸæ
- æ²æ³ïŒCONSTITUTION.md 第äžç«
- åæ³ïŒ.github/bylaws/git-workflow.md
AI ç·šæåšå·è¡æµçš
ç¶ AI agent è¢«èŠæ±ãæºå commitãæïŒå·è¡ä»¥äžé¡å€æ¥é©ïŒ
âââââââââââââââââââââââââââââââââââââââââââââââââââ
â AI Pre-Commit Orchestrator â
âââââââââââââââââââââââââââââââââââââââââââââââââââ€
â Step 1: memory-sync [å¿
èŠ] Memory Bank 忥 â
â Step 2: pre-commit-run [å¿
èŠ] å·è¡ææ hooks â
â Step 3: readme-update [å¯éž] README æŽæ° â
â Step 4: changelog-update[å¯éž] CHANGELOG æŽæ° â
â Step 5: roadmap-update [å¯éž] ROADMAP æŽæ° â
â Step 6: arch-check [æ¢ä»¶] æ¶æ§ææªæª¢æ¥ â
â Step 7: commit-prepare [æçµ] æºåæäº€ â
âââââââââââââââââââââââââââââââââââââââââââââââââââ
Step 2 æå·è¡ uv run pre-commit run --all-filesïŒæ¶µè ruffãfile hygieneãtool docs sync çææèªååæª¢æ¥ãmypy å semgrep å·²ç§»è³ pre-push éæ®µä»¥é² OOMã
å¿
èŠæ¥é©ïŒMCP å·¥å
·æžé忥
ç± pre-commit hook tool-count-sync èªåèçãä¹å¯æåå·è¡ïŒ
uv run python scripts/count_mcp_tools.py --update-docs
æ€è
³æ¬æèªåæŽæ°ïŒ
README.md - å·¥å
·æžé
README.zh-TW.md - å·¥å
·æžé
.github/copilot-instructions.md - å·¥å
·æžé + 宿Žå衚
src/.../TOOLS_INDEX.md - 宿Žå·¥å
·çŽ¢åŒ
åæž
| åæž | 說æ | é èš |
|---|
--skip-readme | è·³é README æŽæ° | false |
--skip-changelog | è·³é CHANGELOG æŽæ° | false |
--skip-roadmap | è·³é ROADMAP æŽæ° | false |
--skip-hooks | è·³é pre-commit hooks | false |
--dry-run | åªé 芜äžä¿®æ¹ | false |
--quick | åªå·è¡å¿
èŠæ¥é© (memory-sync + hooks) | false |
䜿çšç¯äŸ
ãæºå commitã # 宿޿µçš
ãå¿«é commitã # çå --quick
ãcommit --skip-readmeã # è·³é README
è·³éç¹å® Hook
SKIP=mypy git commit -m "quick fix"
git commit --no-verify -m "emergency"
èŒžåºæ ŒåŒ
ð Git Pre-Commit å·¥äœæµ
[1/7] Memory Bank 忥 â
ââ progress.md: æŽæ° 2 é
ââ activeContext.md: å·²æŽæ°
[2/7] Pre-commit Hooks â
ââ ruff lint: passed (auto-fixed 3 issues)
ââ ruff format: passed
ââ mypy: passed
ââ file hygiene: passed
ââ tool docs sync: passed (2 files updated)
[3/7] README æŽæ° â
ââ æ°å¢åèœèªªæ
[4/7] CHANGELOG æŽæ° â
ââ æ·»å v0.2.0 æ¢ç®
[5/7] ROADMAP æŽæ° âïž (ç¡è®æŽ)
[6/7] æ¶æ§ææª âïž (ç¡çµæ§æ§è®æŽ)
[7/7] Commit æºå â
ââ 建è°èšæ¯ïŒfeat: æ°å¢çšæ¶èªèæš¡çµ
ð Staged files:
- src/auth/...
- docs/...
æºå奜äºïŒç¢ºèªæäº€ïŒ
Hook èšå®æªæ¡
| æªæ¡ | çšé |
|---|
.pre-commit-config.yaml | pre-commit hooks å®çŸ© |
pyproject.toml [tool.ruff] | ruff lint + format èŠå |
pyproject.toml [tool.mypy] | mypy type check èŠå |
pyproject.toml [tool.pytest] addopts | 匷å¶å€æ žæž¬è©Š |
pyproject.toml [tool.bandit] | bandit å®å
šææèŠå |
pyproject.toml [tool.deptry] | deptry äŸè³Žè¡çèŠå |
vulture_whitelist.py | vulture æ»ç¢Œææçœåå® |
scripts/hooks/check_file_hygiene.py | æªæ¡è¡çæª¢æ¥ |
scripts/hooks/check_tool_sync.py | MCP å·¥å
·ææªåæ¥ |
scripts/hooks/check_skills_frontmatter.py | .claude/skills YAML frontmatter é©è |
scripts/hooks/check_evolution_cycle.py | èªæŒå埪ç°äžèŽæ§é©è |
scripts/hooks/check_commit_size.py | Commit æªæ¡æžéå¶ (â€30) |
scripts/hooks/check_future_annotations.py | future annotations åŒ·å¶ |
scripts/hooks/check_no_print.py | çŠæ¢ src/ äœ¿çš print() |
scripts/hooks/check_ddd_layers.py | DDD å±€çŽäŸè³Žæª¢æ¥ |
scripts/hooks/check_type_ignore.py | çŠæ¢è£ž type: ignore |
scripts/hooks/check_docstring_tools.py | MCP tool docstring æª¢æ¥ |
scripts/hooks/check_env_config.py | çŠæ¢å
§å±€äœ¿çš os.environ |
scripts/hooks/check_tenant_scoped_storage.py | presentation å±€å²åè·¯åŸé ç¶ tenant_data_dir() |
scripts/hooks/check_source_counts.py | ç¢ºä¿æ¯äŸæº API åå³é顯瀺 |
scripts/hooks/check_todo_scanner.py | TODO/FIXME ææ |
scripts/hooks/check_instruction_drift.py | å·¥å
· docstring è®æŽåµæž¬ |
Unicode Mojibake Hook
unicode-mojibake uses scripts/hooks/check_unicode_mojibake.py to block newly staged corrupted emoji/UTF-8 artifacts while allowing valid emoji.