moai-adk 0.15.0__py3-none-any.whl → 0.25.4__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.
Potentially problematic release.
This version of moai-adk might be problematic. Click here for more details.
- moai_adk/__init__.py +1 -2
- moai_adk/__main__.py +85 -2
- moai_adk/cli/__init__.py +0 -1
- moai_adk/cli/commands/__init__.py +0 -1
- moai_adk/cli/commands/analyze.py +127 -0
- moai_adk/cli/commands/backup.py +5 -3
- moai_adk/cli/commands/doctor.py +35 -11
- moai_adk/cli/commands/improve_user_experience.py +348 -0
- moai_adk/cli/commands/init.py +150 -23
- moai_adk/cli/commands/language.py +269 -0
- moai_adk/cli/commands/migrate.py +158 -0
- moai_adk/cli/commands/status.py +13 -12
- moai_adk/cli/commands/update.py +364 -60
- moai_adk/cli/commands/validate_links.py +118 -0
- moai_adk/cli/main.py +3 -2
- moai_adk/cli/prompts/init_prompts.py +79 -82
- moai_adk/core/__init__.py +0 -1
- moai_adk/core/analysis/__init__.py +9 -0
- moai_adk/core/analysis/session_analyzer.py +439 -0
- moai_adk/core/claude_integration.py +421 -0
- moai_adk/core/command_helpers.py +270 -0
- moai_adk/core/config/__init__.py +6 -0
- moai_adk/core/config/auto_spec_config.py +346 -0
- moai_adk/core/config/migration.py +133 -12
- moai_adk/core/context_manager.py +279 -0
- moai_adk/core/diagnostics/slash_commands.py +0 -1
- moai_adk/core/error_recovery_system.py +1289 -0
- moai_adk/core/git/__init__.py +0 -1
- moai_adk/core/git/branch.py +0 -1
- moai_adk/core/git/branch_manager.py +4 -4
- moai_adk/core/git/checkpoint.py +1 -5
- moai_adk/core/git/commit.py +0 -1
- moai_adk/core/git/event_detector.py +3 -5
- moai_adk/core/git/manager.py +0 -1
- moai_adk/core/hooks/post_tool_auto_spec_completion.py +925 -0
- moai_adk/core/integration/__init__.py +22 -0
- moai_adk/core/integration/engine.py +169 -0
- moai_adk/core/integration/integration_tester.py +225 -0
- moai_adk/core/integration/models.py +88 -0
- moai_adk/core/integration/utils.py +211 -0
- moai_adk/core/issue_creator.py +28 -18
- moai_adk/core/language_config.py +202 -0
- moai_adk/core/language_validator.py +556 -0
- moai_adk/core/mcp/setup.py +113 -0
- moai_adk/core/migration/__init__.py +18 -0
- moai_adk/core/migration/backup_manager.py +208 -0
- moai_adk/core/migration/file_migrator.py +218 -0
- moai_adk/core/migration/version_detector.py +143 -0
- moai_adk/core/migration/version_migrator.py +228 -0
- moai_adk/core/performance/__init__.py +6 -0
- moai_adk/core/performance/cache_system.py +318 -0
- moai_adk/core/performance/parallel_processor.py +116 -0
- moai_adk/core/project/__init__.py +0 -1
- moai_adk/core/project/backup_utils.py +2 -7
- moai_adk/core/project/checker.py +3 -3
- moai_adk/core/project/detector.py +20 -40
- moai_adk/core/project/initializer.py +42 -17
- moai_adk/core/project/phase_executor.py +415 -58
- moai_adk/core/project/validator.py +6 -25
- moai_adk/core/quality/__init__.py +1 -1
- moai_adk/core/quality/trust_checker.py +64 -110
- moai_adk/core/quality/validators/__init__.py +1 -1
- moai_adk/core/quality/validators/base_validator.py +1 -1
- moai_adk/core/rollback_manager.py +993 -0
- moai_adk/core/session_manager.py +667 -0
- moai_adk/core/spec/confidence_scoring.py +749 -0
- moai_adk/core/spec/ears_template_engine.py +1182 -0
- moai_adk/core/spec/quality_validator.py +721 -0
- moai_adk/core/spec_status_manager.py +488 -0
- moai_adk/core/template/__init__.py +0 -1
- moai_adk/core/template/backup.py +41 -1
- moai_adk/core/template/config.py +11 -12
- moai_adk/core/template/languages.py +0 -1
- moai_adk/core/template/merger.py +79 -22
- moai_adk/core/template/processor.py +614 -40
- moai_adk/core/template_engine.py +36 -27
- moai_adk/foundation/git/commit_templates.py +565 -0
- moai_adk/foundation/trust/trust_principles.py +725 -0
- moai_adk/foundation/trust/validation_checklist.py +1678 -0
- moai_adk/statusline/__init__.py +38 -0
- moai_adk/statusline/alfred_detector.py +107 -0
- moai_adk/statusline/config.py +364 -0
- moai_adk/statusline/enhanced_output_style_detector.py +364 -0
- moai_adk/statusline/git_collector.py +190 -0
- moai_adk/statusline/main.py +228 -0
- moai_adk/statusline/metrics_tracker.py +78 -0
- moai_adk/statusline/renderer.py +327 -0
- moai_adk/statusline/update_checker.py +135 -0
- moai_adk/statusline/version_reader.py +647 -0
- moai_adk/templates/.git-hooks/pre-commit +66 -0
- moai_adk/templates/.git-hooks/pre-push +116 -4
- moai_adk/templates/.github/workflows/moai-gitflow.yml +1 -7
- moai_adk/templates/.github/workflows/spec-issue-sync.yml +0 -1
- moai_adk/templates/.gitignore +44 -0
- moai_adk/templates/.mcp.json +22 -0
- moai_adk/templates/CLAUDE.md +450 -1071
- moai_adk/utils/__init__.py +0 -1
- moai_adk/utils/banner.py +0 -1
- moai_adk/utils/common.py +308 -0
- moai_adk/utils/link_validator.py +249 -0
- moai_adk/utils/logger.py +4 -9
- moai_adk/utils/safe_file_reader.py +210 -0
- moai_adk/utils/user_experience.py +531 -0
- moai_adk-0.25.4.dist-info/METADATA +2279 -0
- moai_adk-0.25.4.dist-info/RECORD +112 -0
- moai_adk/core/tags/__init__.py +0 -86
- moai_adk/core/tags/ci_validator.py +0 -463
- moai_adk/core/tags/cli.py +0 -283
- moai_adk/core/tags/generator.py +0 -109
- moai_adk/core/tags/inserter.py +0 -99
- moai_adk/core/tags/mapper.py +0 -126
- moai_adk/core/tags/parser.py +0 -76
- moai_adk/core/tags/pre_commit_validator.py +0 -393
- moai_adk/core/tags/reporter.py +0 -956
- moai_adk/core/tags/tags.py +0 -149
- moai_adk/core/tags/validator.py +0 -897
- moai_adk/templates/.claude/agents/alfred/backend-expert.md +0 -319
- moai_adk/templates/.claude/agents/alfred/cc-manager.md +0 -316
- moai_adk/templates/.claude/agents/alfred/debug-helper.md +0 -208
- moai_adk/templates/.claude/agents/alfred/devops-expert.md +0 -464
- moai_adk/templates/.claude/agents/alfred/doc-syncer.md +0 -214
- moai_adk/templates/.claude/agents/alfred/frontend-expert.md +0 -357
- moai_adk/templates/.claude/agents/alfred/git-manager.md +0 -406
- moai_adk/templates/.claude/agents/alfred/implementation-planner.md +0 -423
- moai_adk/templates/.claude/agents/alfred/project-manager.md +0 -312
- moai_adk/templates/.claude/agents/alfred/quality-gate.md +0 -343
- moai_adk/templates/.claude/agents/alfred/skill-factory.md +0 -865
- moai_adk/templates/.claude/agents/alfred/spec-builder.md +0 -392
- moai_adk/templates/.claude/agents/alfred/tag-agent.md +0 -361
- moai_adk/templates/.claude/agents/alfred/tdd-implementer.md +0 -428
- moai_adk/templates/.claude/agents/alfred/trust-checker.md +0 -375
- moai_adk/templates/.claude/agents/alfred/ui-ux-expert.md +0 -571
- moai_adk/templates/.claude/commands/alfred/0-project.md +0 -1525
- moai_adk/templates/.claude/commands/alfred/1-plan.md +0 -802
- moai_adk/templates/.claude/commands/alfred/2-run.md +0 -709
- moai_adk/templates/.claude/commands/alfred/3-sync.md +0 -1009
- moai_adk/templates/.claude/commands/alfred/9-feedback.md +0 -149
- moai_adk/templates/.claude/hooks/alfred/core/project.py +0 -748
- moai_adk/templates/.claude/hooks/alfred/core/timeout.py +0 -136
- moai_adk/templates/.claude/hooks/alfred/core/ttl_cache.py +0 -108
- moai_adk/templates/.claude/hooks/alfred/core/version_cache.py +0 -198
- moai_adk/templates/.claude/hooks/alfred/handlers/__init__.py +0 -29
- moai_adk/templates/.claude/hooks/alfred/post_tool__log_changes.py +0 -94
- moai_adk/templates/.claude/hooks/alfred/pre_tool__auto_checkpoint.py +0 -100
- moai_adk/templates/.claude/hooks/alfred/session_end__cleanup.py +0 -94
- moai_adk/templates/.claude/hooks/alfred/session_start__show_project_info.py +0 -94
- moai_adk/templates/.claude/hooks/alfred/shared/core/__init__.py +0 -170
- moai_adk/templates/.claude/hooks/alfred/shared/core/checkpoint.py +0 -271
- moai_adk/templates/.claude/hooks/alfred/shared/core/context.py +0 -67
- moai_adk/templates/.claude/hooks/alfred/shared/core/project.py +0 -749
- moai_adk/templates/.claude/hooks/alfred/shared/core/tags.py +0 -230
- moai_adk/templates/.claude/hooks/alfred/shared/core/version_cache.py +0 -198
- moai_adk/templates/.claude/hooks/alfred/shared/handlers/__init__.py +0 -21
- moai_adk/templates/.claude/hooks/alfred/shared/handlers/notification.py +0 -154
- moai_adk/templates/.claude/hooks/alfred/shared/handlers/session.py +0 -174
- moai_adk/templates/.claude/hooks/alfred/shared/handlers/tool.py +0 -87
- moai_adk/templates/.claude/hooks/alfred/shared/handlers/user.py +0 -61
- moai_adk/templates/.claude/hooks/alfred/user_prompt__jit_load_docs.py +0 -112
- moai_adk/templates/.claude/hooks/alfred/utils/__init__.py +0 -1
- moai_adk/templates/.claude/hooks/alfred/utils/timeout.py +0 -161
- moai_adk/templates/.claude/settings.json +0 -144
- moai_adk/templates/.claude/skills/moai-alfred-agent-guide/SKILL.md +0 -70
- moai_adk/templates/.claude/skills/moai-alfred-agent-guide/examples.md +0 -62
- moai_adk/templates/.claude/skills/moai-alfred-agent-guide/reference.md +0 -242
- moai_adk/templates/.claude/skills/moai-alfred-config-schema/SKILL.md +0 -56
- moai_adk/templates/.claude/skills/moai-alfred-config-schema/examples.md +0 -28
- moai_adk/templates/.claude/skills/moai-alfred-config-schema/reference.md +0 -444
- moai_adk/templates/.claude/skills/moai-alfred-context-budget/SKILL.md +0 -62
- moai_adk/templates/.claude/skills/moai-alfred-context-budget/examples.md +0 -28
- moai_adk/templates/.claude/skills/moai-alfred-context-budget/reference.md +0 -405
- moai_adk/templates/.claude/skills/moai-alfred-dev-guide/SKILL.md +0 -51
- moai_adk/templates/.claude/skills/moai-alfred-dev-guide/examples.md +0 -355
- moai_adk/templates/.claude/skills/moai-alfred-dev-guide/reference.md +0 -239
- moai_adk/templates/.claude/skills/moai-alfred-ears-authoring/SKILL.md +0 -113
- moai_adk/templates/.claude/skills/moai-alfred-ears-authoring/examples.md +0 -29
- moai_adk/templates/.claude/skills/moai-alfred-ears-authoring/reference.md +0 -28
- moai_adk/templates/.claude/skills/moai-alfred-expertise-detection/SKILL.md +0 -323
- moai_adk/templates/.claude/skills/moai-alfred-expertise-detection/examples.md +0 -286
- moai_adk/templates/.claude/skills/moai-alfred-expertise-detection/reference.md +0 -126
- moai_adk/templates/.claude/skills/moai-alfred-git-workflow/SKILL.md +0 -122
- moai_adk/templates/.claude/skills/moai-alfred-git-workflow/examples.md +0 -29
- moai_adk/templates/.claude/skills/moai-alfred-git-workflow/reference.md +0 -29
- moai_adk/templates/.claude/skills/moai-alfred-gitflow-policy/SKILL.md +0 -74
- moai_adk/templates/.claude/skills/moai-alfred-gitflow-policy/examples.md +0 -4
- moai_adk/templates/.claude/skills/moai-alfred-gitflow-policy/reference.md +0 -269
- moai_adk/templates/.claude/skills/moai-alfred-interactive-questions/SKILL.md +0 -237
- moai_adk/templates/.claude/skills/moai-alfred-interactive-questions/examples.md +0 -615
- moai_adk/templates/.claude/skills/moai-alfred-interactive-questions/reference.md +0 -653
- moai_adk/templates/.claude/skills/moai-alfred-issue-labels/SKILL.md +0 -19
- moai_adk/templates/.claude/skills/moai-alfred-issue-labels/examples.md +0 -4
- moai_adk/templates/.claude/skills/moai-alfred-issue-labels/reference.md +0 -150
- moai_adk/templates/.claude/skills/moai-alfred-language-detection/SKILL.md +0 -113
- moai_adk/templates/.claude/skills/moai-alfred-language-detection/examples.md +0 -29
- moai_adk/templates/.claude/skills/moai-alfred-language-detection/reference.md +0 -28
- moai_adk/templates/.claude/skills/moai-alfred-persona-roles/SKILL.md +0 -198
- moai_adk/templates/.claude/skills/moai-alfred-persona-roles/examples.md +0 -431
- moai_adk/templates/.claude/skills/moai-alfred-persona-roles/reference.md +0 -141
- moai_adk/templates/.claude/skills/moai-alfred-practices/SKILL.md +0 -89
- moai_adk/templates/.claude/skills/moai-alfred-practices/examples.md +0 -122
- moai_adk/templates/.claude/skills/moai-alfred-practices/reference.md +0 -369
- moai_adk/templates/.claude/skills/moai-alfred-proactive-suggestions/SKILL.md +0 -508
- moai_adk/templates/.claude/skills/moai-alfred-proactive-suggestions/examples.md +0 -481
- moai_adk/templates/.claude/skills/moai-alfred-proactive-suggestions/reference.md +0 -100
- moai_adk/templates/.claude/skills/moai-alfred-reporting/SKILL.md +0 -273
- moai_adk/templates/.claude/skills/moai-alfred-rules/SKILL.md +0 -77
- moai_adk/templates/.claude/skills/moai-alfred-rules/examples.md +0 -265
- moai_adk/templates/.claude/skills/moai-alfred-rules/reference.md +0 -539
- moai_adk/templates/.claude/skills/moai-alfred-session-state/SKILL.md +0 -19
- moai_adk/templates/.claude/skills/moai-alfred-session-state/examples.md +0 -4
- moai_adk/templates/.claude/skills/moai-alfred-session-state/reference.md +0 -84
- moai_adk/templates/.claude/skills/moai-alfred-spec-authoring/README.md +0 -137
- moai_adk/templates/.claude/skills/moai-alfred-spec-authoring/SKILL.md +0 -219
- moai_adk/templates/.claude/skills/moai-alfred-spec-authoring/examples/validate-spec.sh +0 -161
- moai_adk/templates/.claude/skills/moai-alfred-spec-authoring/examples.md +0 -541
- moai_adk/templates/.claude/skills/moai-alfred-spec-authoring/reference.md +0 -622
- moai_adk/templates/.claude/skills/moai-alfred-spec-metadata-extended/SKILL.md +0 -115
- moai_adk/templates/.claude/skills/moai-alfred-spec-metadata-extended/examples.md +0 -4
- moai_adk/templates/.claude/skills/moai-alfred-spec-metadata-extended/reference.md +0 -348
- moai_adk/templates/.claude/skills/moai-alfred-spec-metadata-validation/SKILL.md +0 -113
- moai_adk/templates/.claude/skills/moai-alfred-spec-metadata-validation/examples.md +0 -29
- moai_adk/templates/.claude/skills/moai-alfred-spec-metadata-validation/reference.md +0 -28
- moai_adk/templates/.claude/skills/moai-alfred-tag-scanning/SKILL.md +0 -113
- moai_adk/templates/.claude/skills/moai-alfred-tag-scanning/examples.md +0 -29
- moai_adk/templates/.claude/skills/moai-alfred-tag-scanning/reference.md +0 -28
- moai_adk/templates/.claude/skills/moai-alfred-todowrite-pattern/SKILL.md +0 -19
- moai_adk/templates/.claude/skills/moai-alfred-todowrite-pattern/examples.md +0 -4
- moai_adk/templates/.claude/skills/moai-alfred-todowrite-pattern/reference.md +0 -211
- moai_adk/templates/.claude/skills/moai-alfred-trust-validation/SKILL.md +0 -113
- moai_adk/templates/.claude/skills/moai-alfred-trust-validation/examples.md +0 -29
- moai_adk/templates/.claude/skills/moai-alfred-trust-validation/reference.md +0 -28
- moai_adk/templates/.claude/skills/moai-alfred-workflow/SKILL.md +0 -288
- moai_adk/templates/.claude/skills/moai-cc-agents/SKILL.md +0 -269
- moai_adk/templates/.claude/skills/moai-cc-agents/templates/agent-template.md +0 -32
- moai_adk/templates/.claude/skills/moai-cc-claude-md/SKILL.md +0 -298
- moai_adk/templates/.claude/skills/moai-cc-claude-md/templates/CLAUDE-template.md +0 -26
- moai_adk/templates/.claude/skills/moai-cc-commands/SKILL.md +0 -307
- moai_adk/templates/.claude/skills/moai-cc-commands/templates/command-template.md +0 -21
- moai_adk/templates/.claude/skills/moai-cc-hooks/SKILL.md +0 -252
- moai_adk/templates/.claude/skills/moai-cc-hooks/scripts/pre-bash-check.sh +0 -19
- moai_adk/templates/.claude/skills/moai-cc-hooks/scripts/preserve-permissions.sh +0 -19
- moai_adk/templates/.claude/skills/moai-cc-hooks/scripts/validate-bash-command.py +0 -24
- moai_adk/templates/.claude/skills/moai-cc-mcp-plugins/SKILL.md +0 -199
- moai_adk/templates/.claude/skills/moai-cc-mcp-plugins/templates/settings-mcp-template.json +0 -39
- moai_adk/templates/.claude/skills/moai-cc-memory/SKILL.md +0 -316
- moai_adk/templates/.claude/skills/moai-cc-memory/templates/session-summary-template.md +0 -18
- moai_adk/templates/.claude/skills/moai-cc-settings/SKILL.md +0 -263
- moai_adk/templates/.claude/skills/moai-cc-settings/templates/settings-complete-template.json +0 -30
- moai_adk/templates/.claude/skills/moai-cc-skill-descriptions/SKILL.md +0 -19
- moai_adk/templates/.claude/skills/moai-cc-skill-descriptions/examples.md +0 -4
- moai_adk/templates/.claude/skills/moai-cc-skill-descriptions/reference.md +0 -218
- moai_adk/templates/.claude/skills/moai-cc-skill-factory/CHECKLIST.md +0 -482
- moai_adk/templates/.claude/skills/moai-cc-skill-factory/EXAMPLES.md +0 -278
- moai_adk/templates/.claude/skills/moai-cc-skill-factory/INTERACTIVE-DISCOVERY.md +0 -524
- moai_adk/templates/.claude/skills/moai-cc-skill-factory/METADATA.md +0 -477
- moai_adk/templates/.claude/skills/moai-cc-skill-factory/PARALLEL-ANALYSIS-REPORT.md +0 -429
- moai_adk/templates/.claude/skills/moai-cc-skill-factory/PYTHON-VERSION-MATRIX.md +0 -391
- moai_adk/templates/.claude/skills/moai-cc-skill-factory/SKILL-FACTORY-WORKFLOW.md +0 -431
- moai_adk/templates/.claude/skills/moai-cc-skill-factory/SKILL-UPDATE-ADVISOR.md +0 -577
- moai_adk/templates/.claude/skills/moai-cc-skill-factory/SKILL.md +0 -271
- moai_adk/templates/.claude/skills/moai-cc-skill-factory/STEP-BY-STEP-GUIDE.md +0 -466
- moai_adk/templates/.claude/skills/moai-cc-skill-factory/STRUCTURE.md +0 -583
- moai_adk/templates/.claude/skills/moai-cc-skill-factory/WEB-RESEARCH.md +0 -526
- moai_adk/templates/.claude/skills/moai-cc-skill-factory/reference.md +0 -465
- moai_adk/templates/.claude/skills/moai-cc-skill-factory/scripts/generate-structure.sh +0 -328
- moai_adk/templates/.claude/skills/moai-cc-skill-factory/scripts/validate-skill.sh +0 -312
- moai_adk/templates/.claude/skills/moai-cc-skill-factory/templates/SKILL_TEMPLATE.md +0 -245
- moai_adk/templates/.claude/skills/moai-cc-skill-factory/templates/examples-template.md +0 -285
- moai_adk/templates/.claude/skills/moai-cc-skill-factory/templates/reference-template.md +0 -278
- moai_adk/templates/.claude/skills/moai-cc-skill-factory/templates/scripts-template.sh +0 -303
- moai_adk/templates/.claude/skills/moai-cc-skills/SKILL.md +0 -291
- moai_adk/templates/.claude/skills/moai-cc-skills/templates/SKILL-template.md +0 -15
- moai_adk/templates/.claude/skills/moai-design-systems/SKILL.md +0 -802
- moai_adk/templates/.claude/skills/moai-design-systems/examples.md +0 -1238
- moai_adk/templates/.claude/skills/moai-design-systems/reference.md +0 -673
- moai_adk/templates/.claude/skills/moai-domain-backend/SKILL.md +0 -290
- moai_adk/templates/.claude/skills/moai-domain-backend/examples.md +0 -1633
- moai_adk/templates/.claude/skills/moai-domain-backend/reference.md +0 -660
- moai_adk/templates/.claude/skills/moai-domain-cli-tool/SKILL.md +0 -123
- moai_adk/templates/.claude/skills/moai-domain-cli-tool/examples.md +0 -29
- moai_adk/templates/.claude/skills/moai-domain-cli-tool/reference.md +0 -30
- moai_adk/templates/.claude/skills/moai-domain-data-science/SKILL.md +0 -123
- moai_adk/templates/.claude/skills/moai-domain-data-science/examples.md +0 -29
- moai_adk/templates/.claude/skills/moai-domain-data-science/reference.md +0 -30
- moai_adk/templates/.claude/skills/moai-domain-database/SKILL.md +0 -123
- moai_adk/templates/.claude/skills/moai-domain-database/examples.md +0 -29
- moai_adk/templates/.claude/skills/moai-domain-database/reference.md +0 -30
- moai_adk/templates/.claude/skills/moai-domain-devops/SKILL.md +0 -124
- moai_adk/templates/.claude/skills/moai-domain-devops/examples.md +0 -29
- moai_adk/templates/.claude/skills/moai-domain-devops/reference.md +0 -31
- moai_adk/templates/.claude/skills/moai-domain-frontend/SKILL.md +0 -128
- moai_adk/templates/.claude/skills/moai-domain-frontend/examples.md +0 -29
- moai_adk/templates/.claude/skills/moai-domain-frontend/reference.md +0 -31
- moai_adk/templates/.claude/skills/moai-domain-ml/SKILL.md +0 -123
- moai_adk/templates/.claude/skills/moai-domain-ml/examples.md +0 -29
- moai_adk/templates/.claude/skills/moai-domain-ml/reference.md +0 -30
- moai_adk/templates/.claude/skills/moai-domain-mobile-app/SKILL.md +0 -123
- moai_adk/templates/.claude/skills/moai-domain-mobile-app/examples.md +0 -29
- moai_adk/templates/.claude/skills/moai-domain-mobile-app/reference.md +0 -30
- moai_adk/templates/.claude/skills/moai-domain-security/SKILL.md +0 -123
- moai_adk/templates/.claude/skills/moai-domain-security/examples.md +0 -29
- moai_adk/templates/.claude/skills/moai-domain-security/reference.md +0 -30
- moai_adk/templates/.claude/skills/moai-domain-web-api/SKILL.md +0 -123
- moai_adk/templates/.claude/skills/moai-domain-web-api/examples.md +0 -29
- moai_adk/templates/.claude/skills/moai-domain-web-api/reference.md +0 -30
- moai_adk/templates/.claude/skills/moai-essentials-debug/SKILL.md +0 -303
- moai_adk/templates/.claude/skills/moai-essentials-debug/examples.md +0 -1064
- moai_adk/templates/.claude/skills/moai-essentials-debug/reference.md +0 -1047
- moai_adk/templates/.claude/skills/moai-essentials-perf/SKILL.md +0 -113
- moai_adk/templates/.claude/skills/moai-essentials-perf/examples.md +0 -29
- moai_adk/templates/.claude/skills/moai-essentials-perf/reference.md +0 -28
- moai_adk/templates/.claude/skills/moai-essentials-refactor/SKILL.md +0 -113
- moai_adk/templates/.claude/skills/moai-essentials-refactor/examples.md +0 -29
- moai_adk/templates/.claude/skills/moai-essentials-refactor/reference.md +0 -28
- moai_adk/templates/.claude/skills/moai-essentials-review/SKILL.md +0 -113
- moai_adk/templates/.claude/skills/moai-essentials-review/examples.md +0 -29
- moai_adk/templates/.claude/skills/moai-essentials-review/reference.md +0 -28
- moai_adk/templates/.claude/skills/moai-foundation-ears/SKILL.md +0 -116
- moai_adk/templates/.claude/skills/moai-foundation-ears/examples.md +0 -29
- moai_adk/templates/.claude/skills/moai-foundation-ears/reference.md +0 -28
- moai_adk/templates/.claude/skills/moai-foundation-git/SKILL.md +0 -122
- moai_adk/templates/.claude/skills/moai-foundation-git/examples.md +0 -29
- moai_adk/templates/.claude/skills/moai-foundation-git/reference.md +0 -29
- moai_adk/templates/.claude/skills/moai-foundation-langs/SKILL.md +0 -113
- moai_adk/templates/.claude/skills/moai-foundation-langs/examples.md +0 -29
- moai_adk/templates/.claude/skills/moai-foundation-langs/reference.md +0 -28
- moai_adk/templates/.claude/skills/moai-foundation-specs/SKILL.md +0 -113
- moai_adk/templates/.claude/skills/moai-foundation-specs/examples.md +0 -29
- moai_adk/templates/.claude/skills/moai-foundation-specs/reference.md +0 -28
- moai_adk/templates/.claude/skills/moai-foundation-tags/SKILL.md +0 -113
- moai_adk/templates/.claude/skills/moai-foundation-tags/examples.md +0 -29
- moai_adk/templates/.claude/skills/moai-foundation-tags/reference.md +0 -28
- moai_adk/templates/.claude/skills/moai-foundation-trust/SKILL.md +0 -307
- moai_adk/templates/.claude/skills/moai-foundation-trust/examples.md +0 -0
- moai_adk/templates/.claude/skills/moai-foundation-trust/reference.md +0 -1099
- moai_adk/templates/.claude/skills/moai-lang-c/SKILL.md +0 -124
- moai_adk/templates/.claude/skills/moai-lang-c/examples.md +0 -29
- moai_adk/templates/.claude/skills/moai-lang-c/reference.md +0 -31
- moai_adk/templates/.claude/skills/moai-lang-cpp/SKILL.md +0 -124
- moai_adk/templates/.claude/skills/moai-lang-cpp/examples.md +0 -29
- moai_adk/templates/.claude/skills/moai-lang-cpp/reference.md +0 -31
- moai_adk/templates/.claude/skills/moai-lang-csharp/SKILL.md +0 -123
- moai_adk/templates/.claude/skills/moai-lang-csharp/examples.md +0 -29
- moai_adk/templates/.claude/skills/moai-lang-csharp/reference.md +0 -30
- moai_adk/templates/.claude/skills/moai-lang-dart/SKILL.md +0 -123
- moai_adk/templates/.claude/skills/moai-lang-dart/examples.md +0 -29
- moai_adk/templates/.claude/skills/moai-lang-dart/reference.md +0 -30
- moai_adk/templates/.claude/skills/moai-lang-go/SKILL.md +0 -127
- moai_adk/templates/.claude/skills/moai-lang-go/examples.md +0 -29
- moai_adk/templates/.claude/skills/moai-lang-go/reference.md +0 -31
- moai_adk/templates/.claude/skills/moai-lang-java/SKILL.md +0 -126
- moai_adk/templates/.claude/skills/moai-lang-java/examples.md +0 -29
- moai_adk/templates/.claude/skills/moai-lang-java/reference.md +0 -31
- moai_adk/templates/.claude/skills/moai-lang-javascript/SKILL.md +0 -125
- moai_adk/templates/.claude/skills/moai-lang-javascript/examples.md +0 -29
- moai_adk/templates/.claude/skills/moai-lang-javascript/reference.md +0 -32
- moai_adk/templates/.claude/skills/moai-lang-kotlin/SKILL.md +0 -124
- moai_adk/templates/.claude/skills/moai-lang-kotlin/examples.md +0 -29
- moai_adk/templates/.claude/skills/moai-lang-kotlin/reference.md +0 -31
- moai_adk/templates/.claude/skills/moai-lang-php/SKILL.md +0 -126
- moai_adk/templates/.claude/skills/moai-lang-php/examples.md +0 -29
- moai_adk/templates/.claude/skills/moai-lang-php/reference.md +0 -30
- moai_adk/templates/.claude/skills/moai-lang-python/SKILL.md +0 -433
- moai_adk/templates/.claude/skills/moai-lang-python/examples.md +0 -624
- moai_adk/templates/.claude/skills/moai-lang-python/reference.md +0 -316
- moai_adk/templates/.claude/skills/moai-lang-r/SKILL.md +0 -123
- moai_adk/templates/.claude/skills/moai-lang-r/examples.md +0 -29
- moai_adk/templates/.claude/skills/moai-lang-r/reference.md +0 -30
- moai_adk/templates/.claude/skills/moai-lang-ruby/SKILL.md +0 -124
- moai_adk/templates/.claude/skills/moai-lang-ruby/examples.md +0 -29
- moai_adk/templates/.claude/skills/moai-lang-ruby/reference.md +0 -31
- moai_adk/templates/.claude/skills/moai-lang-rust/SKILL.md +0 -127
- moai_adk/templates/.claude/skills/moai-lang-rust/examples.md +0 -29
- moai_adk/templates/.claude/skills/moai-lang-rust/reference.md +0 -31
- moai_adk/templates/.claude/skills/moai-lang-scala/SKILL.md +0 -125
- moai_adk/templates/.claude/skills/moai-lang-scala/examples.md +0 -29
- moai_adk/templates/.claude/skills/moai-lang-scala/reference.md +0 -30
- moai_adk/templates/.claude/skills/moai-lang-shell/SKILL.md +0 -123
- moai_adk/templates/.claude/skills/moai-lang-shell/examples.md +0 -29
- moai_adk/templates/.claude/skills/moai-lang-shell/reference.md +0 -30
- moai_adk/templates/.claude/skills/moai-lang-sql/SKILL.md +0 -124
- moai_adk/templates/.claude/skills/moai-lang-sql/examples.md +0 -29
- moai_adk/templates/.claude/skills/moai-lang-sql/reference.md +0 -31
- moai_adk/templates/.claude/skills/moai-lang-swift/SKILL.md +0 -123
- moai_adk/templates/.claude/skills/moai-lang-swift/examples.md +0 -29
- moai_adk/templates/.claude/skills/moai-lang-swift/reference.md +0 -30
- moai_adk/templates/.claude/skills/moai-lang-typescript/SKILL.md +0 -133
- moai_adk/templates/.claude/skills/moai-lang-typescript/examples.md +0 -29
- moai_adk/templates/.claude/skills/moai-lang-typescript/reference.md +0 -34
- moai_adk/templates/.claude/skills/moai-project-documentation.md +0 -622
- moai_adk/templates/.github/workflows/c-tag-validation.yml +0 -11
- moai_adk/templates/.github/workflows/cpp-tag-validation.yml +0 -11
- moai_adk/templates/.github/workflows/csharp-tag-validation.yml +0 -11
- moai_adk/templates/.github/workflows/dart-tag-validation.yml +0 -11
- moai_adk/templates/.github/workflows/go-tag-validation.yml +0 -130
- moai_adk/templates/.github/workflows/java-tag-validation.yml +0 -11
- moai_adk/templates/.github/workflows/javascript-tag-validation.yml +0 -135
- moai_adk/templates/.github/workflows/kotlin-tag-validation.yml +0 -11
- moai_adk/templates/.github/workflows/php-tag-validation.yml +0 -11
- moai_adk/templates/.github/workflows/python-tag-validation.yml +0 -118
- moai_adk/templates/.github/workflows/release.yml +0 -118
- moai_adk/templates/.github/workflows/ruby-tag-validation.yml +0 -11
- moai_adk/templates/.github/workflows/rust-tag-validation.yml +0 -11
- moai_adk/templates/.github/workflows/shell-tag-validation.yml +0 -11
- moai_adk/templates/.github/workflows/swift-tag-validation.yml +0 -11
- moai_adk/templates/.github/workflows/tag-report.yml +0 -269
- moai_adk/templates/.github/workflows/tag-validation.yml +0 -186
- moai_adk/templates/.github/workflows/typescript-tag-validation.yml +0 -154
- moai_adk/templates/.moai/config.json +0 -115
- moai_adk/templates/workflows/go-tag-validation.yml +0 -30
- moai_adk/templates/workflows/javascript-tag-validation.yml +0 -41
- moai_adk/templates/workflows/python-tag-validation.yml +0 -42
- moai_adk/templates/workflows/typescript-tag-validation.yml +0 -31
- moai_adk-0.15.0.dist-info/METADATA +0 -3079
- moai_adk-0.15.0.dist-info/RECORD +0 -365
- {moai_adk-0.15.0.dist-info → moai_adk-0.25.4.dist-info}/WHEEL +0 -0
- {moai_adk-0.15.0.dist-info → moai_adk-0.25.4.dist-info}/entry_points.txt +0 -0
- {moai_adk-0.15.0.dist-info → moai_adk-0.25.4.dist-info}/licenses/LICENSE +0 -0
|
@@ -1,252 +0,0 @@
|
|
|
1
|
-
---
|
|
2
|
-
name: moai-cc-hooks
|
|
3
|
-
description: "Configuring Claude Code Hooks System. Design, implement, and manage PreToolUse/PostToolUse/SessionStart/Notification/Stop hooks. Use when enforcing safety checks, auto-formatting, running linters, or triggering automated workflows based on development events."
|
|
4
|
-
allowed-tools: "Read, Write, Edit, Glob, Bash"
|
|
5
|
-
---
|
|
6
|
-
|
|
7
|
-
## Skill Metadata
|
|
8
|
-
|
|
9
|
-
| Field | Value |
|
|
10
|
-
| ----- | ----- |
|
|
11
|
-
| Version | 1.0.0 |
|
|
12
|
-
| Tier | Ops |
|
|
13
|
-
| Auto-load | When configuring hook system |
|
|
14
|
-
|
|
15
|
-
## What It Does
|
|
16
|
-
|
|
17
|
-
Hook system 설정 및 관리를 위한 전체 가이드를 제공합니다. PreToolUse, PostToolUse, SessionStart 등 다양한 hook type의 설계와 구현 방법을 다룹니다.
|
|
18
|
-
|
|
19
|
-
## When to Use
|
|
20
|
-
|
|
21
|
-
- Safety check나 validation hook을 추가할 때
|
|
22
|
-
- Auto-formatting이나 linting을 자동화할 때
|
|
23
|
-
- Session lifecycle event에 응답하는 로직을 작성할 때
|
|
24
|
-
- 개발 이벤트 기반 workflow를 트리거할 때
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
# Configuring Claude Code Hooks System
|
|
28
|
-
|
|
29
|
-
Hooks are lightweight (<100ms) automated scripts triggered by Claude Code lifecycle events. They enforce guardrails, run quality checks, and seed context without blocking user workflow.
|
|
30
|
-
|
|
31
|
-
## Hook Types & Events
|
|
32
|
-
|
|
33
|
-
| Hook Type | Trigger Event | Execution Time | Use Cases |
|
|
34
|
-
|-----------|---------------|-----------------|-----------|
|
|
35
|
-
| **PreToolUse** | Before tool execution (Read, Edit, Bash, etc.) | <100ms | Command validation, permission checks, safety gates |
|
|
36
|
-
| **PostToolUse** | After tool execution succeeds | <100ms | Auto-formatting, linting, permission restoration |
|
|
37
|
-
| **SessionStart** | Session initialization | <500ms | Project summary, context seeding, status card |
|
|
38
|
-
| **Notification** | User notification event | N/A | macOS notifications, alerts, wait status |
|
|
39
|
-
| **Stop** | Session termination | N/A | Cleanup, final checks, task summary |
|
|
40
|
-
|
|
41
|
-
## Hook Configuration in settings.json
|
|
42
|
-
|
|
43
|
-
### High-Freedom Approach: Events-Driven Hooks
|
|
44
|
-
|
|
45
|
-
```json
|
|
46
|
-
{
|
|
47
|
-
"hooks": {
|
|
48
|
-
"PreToolUse": [
|
|
49
|
-
{
|
|
50
|
-
"matcher": "Bash",
|
|
51
|
-
"hooks": [
|
|
52
|
-
{
|
|
53
|
-
"type": "command",
|
|
54
|
-
"command": "node ~/.claude/hooks/pre-bash-validator.js"
|
|
55
|
-
}
|
|
56
|
-
]
|
|
57
|
-
},
|
|
58
|
-
{
|
|
59
|
-
"matcher": "Edit|Write",
|
|
60
|
-
"hooks": [
|
|
61
|
-
{
|
|
62
|
-
"type": "command",
|
|
63
|
-
"command": "bash ~/.claude/hooks/pre-edit-guard.sh"
|
|
64
|
-
}
|
|
65
|
-
]
|
|
66
|
-
}
|
|
67
|
-
],
|
|
68
|
-
"PostToolUse": [
|
|
69
|
-
{
|
|
70
|
-
"matcher": "Edit",
|
|
71
|
-
"hooks": [
|
|
72
|
-
{
|
|
73
|
-
"type": "command",
|
|
74
|
-
"command": "bash ~/.claude/hooks/post-edit-lint.sh"
|
|
75
|
-
}
|
|
76
|
-
]
|
|
77
|
-
}
|
|
78
|
-
],
|
|
79
|
-
"SessionStart": [
|
|
80
|
-
{
|
|
81
|
-
"matcher": "*",
|
|
82
|
-
"hooks": [
|
|
83
|
-
{
|
|
84
|
-
"type": "command",
|
|
85
|
-
"command": "node ~/.claude/hooks/session-status-card.js"
|
|
86
|
-
}
|
|
87
|
-
]
|
|
88
|
-
}
|
|
89
|
-
]
|
|
90
|
-
}
|
|
91
|
-
}
|
|
92
|
-
```
|
|
93
|
-
|
|
94
|
-
## Medium-Freedom: Hook Patterns
|
|
95
|
-
|
|
96
|
-
### Pattern 1: Pre-Command Validation
|
|
97
|
-
```bash
|
|
98
|
-
#!/bin/bash
|
|
99
|
-
# pre-bash-validator.sh: Block dangerous patterns
|
|
100
|
-
|
|
101
|
-
FORBIDDEN_PATTERNS=(
|
|
102
|
-
"rm -rf /"
|
|
103
|
-
"sudo rm"
|
|
104
|
-
"chmod 777 /"
|
|
105
|
-
"eval \$(curl"
|
|
106
|
-
)
|
|
107
|
-
|
|
108
|
-
COMMAND="$1"
|
|
109
|
-
for pattern in "${FORBIDDEN_PATTERNS[@]}"; do
|
|
110
|
-
if [[ "$COMMAND" =~ $pattern ]]; then
|
|
111
|
-
echo "🔴 Blocked: $pattern detected" >&2
|
|
112
|
-
exit 2 # Block execution
|
|
113
|
-
fi
|
|
114
|
-
done
|
|
115
|
-
|
|
116
|
-
exit 0 # Allow execution
|
|
117
|
-
```
|
|
118
|
-
|
|
119
|
-
### Pattern 2: Post-Edit Auto-Formatting
|
|
120
|
-
```bash
|
|
121
|
-
#!/bin/bash
|
|
122
|
-
# post-edit-format.sh: Auto-format after edits
|
|
123
|
-
|
|
124
|
-
FILE="$1"
|
|
125
|
-
EXT="${FILE##*.}"
|
|
126
|
-
|
|
127
|
-
case "$EXT" in
|
|
128
|
-
js|ts)
|
|
129
|
-
npx prettier --write "$FILE" 2>/dev/null
|
|
130
|
-
;;
|
|
131
|
-
py)
|
|
132
|
-
python3 -m black "$FILE" 2>/dev/null
|
|
133
|
-
;;
|
|
134
|
-
go)
|
|
135
|
-
gofmt -w "$FILE" 2>/dev/null
|
|
136
|
-
;;
|
|
137
|
-
esac
|
|
138
|
-
|
|
139
|
-
exit 0
|
|
140
|
-
```
|
|
141
|
-
|
|
142
|
-
### Pattern 3: SessionStart Status Card
|
|
143
|
-
```bash
|
|
144
|
-
#!/bin/bash
|
|
145
|
-
# session-status-card.sh: Show project status
|
|
146
|
-
|
|
147
|
-
echo "🚀 Claude Code Session Started"
|
|
148
|
-
echo "━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━"
|
|
149
|
-
|
|
150
|
-
if [ -f ".moai/config.json" ]; then
|
|
151
|
-
PROJECT=$(jq -r '.name' .moai/config.json 2>/dev/null || echo "Unknown")
|
|
152
|
-
echo "📦 Project: $PROJECT"
|
|
153
|
-
echo "🏗️ Framework: $(jq -r '.tech_stack' .moai/config.json 2>/dev/null || echo "Auto-detect")"
|
|
154
|
-
fi
|
|
155
|
-
|
|
156
|
-
echo "📋 Recent SPECS:"
|
|
157
|
-
ls .moai/specs/ 2>/dev/null | head -3 | sed 's/^/ ✓ /'
|
|
158
|
-
|
|
159
|
-
echo "━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━"
|
|
160
|
-
```
|
|
161
|
-
|
|
162
|
-
## Low-Freedom: Security-Focused Hook Scripts
|
|
163
|
-
|
|
164
|
-
### Permission Preservation Hook
|
|
165
|
-
```bash
|
|
166
|
-
#!/bin/bash
|
|
167
|
-
set -euo pipefail
|
|
168
|
-
# preserve-permissions.sh: Save/restore file permissions
|
|
169
|
-
|
|
170
|
-
HOOK_TYPE="${1:-pre}" # 'pre' or 'post'
|
|
171
|
-
FILE="${2:-.}"
|
|
172
|
-
|
|
173
|
-
PERMS_FILE="/tmp/perms_${FILE//\//_}.txt"
|
|
174
|
-
|
|
175
|
-
if [[ "$HOOK_TYPE" == "pre" ]]; then
|
|
176
|
-
stat -c "%a %u:%g" "$FILE" > "$PERMS_FILE" 2>/dev/null || true
|
|
177
|
-
exit 0
|
|
178
|
-
elif [[ "$HOOK_TYPE" == "post" ]]; then
|
|
179
|
-
if [[ -f "$PERMS_FILE" ]]; then
|
|
180
|
-
SAVED_PERMS=$(cat "$PERMS_FILE")
|
|
181
|
-
chmod ${SAVED_PERMS%% *} "$FILE" 2>/dev/null || true
|
|
182
|
-
rm "$PERMS_FILE"
|
|
183
|
-
fi
|
|
184
|
-
exit 0
|
|
185
|
-
fi
|
|
186
|
-
```
|
|
187
|
-
|
|
188
|
-
### Dangerous Command Blocker
|
|
189
|
-
```python
|
|
190
|
-
#!/usr/bin/env python3
|
|
191
|
-
import json
|
|
192
|
-
import sys
|
|
193
|
-
import re
|
|
194
|
-
|
|
195
|
-
BLOCKED_PATTERNS = [
|
|
196
|
-
(r"rm\s+-rf\s+/", "Blocking rm -rf /"),
|
|
197
|
-
(r"sudo\s+rm", "Blocking sudo rm without confirmation"),
|
|
198
|
-
(r">\s*/etc/\w+", "Blocking writes to system files"),
|
|
199
|
-
(r"curl.*\|\s*bash", "Blocking curl | bash (code injection risk)"),
|
|
200
|
-
]
|
|
201
|
-
|
|
202
|
-
try:
|
|
203
|
-
data = json.load(sys.stdin)
|
|
204
|
-
command = data.get("tool_input", {}).get("command", "")
|
|
205
|
-
|
|
206
|
-
for pattern, msg in BLOCKED_PATTERNS:
|
|
207
|
-
if re.search(pattern, command):
|
|
208
|
-
print(f"🔴 BLOCKED: {msg}", file=sys.stderr)
|
|
209
|
-
sys.exit(2) # Block
|
|
210
|
-
|
|
211
|
-
sys.exit(0) # Allow
|
|
212
|
-
except Exception as e:
|
|
213
|
-
print(f"Hook error: {e}", file=sys.stderr)
|
|
214
|
-
sys.exit(0) # Allow on error (fail open)
|
|
215
|
-
```
|
|
216
|
-
|
|
217
|
-
## Hook Exit Codes
|
|
218
|
-
|
|
219
|
-
| Code | Meaning | Behavior |
|
|
220
|
-
|------|---------|----------|
|
|
221
|
-
| `0` | Success | Tool proceeds normally |
|
|
222
|
-
| `1` | Warning + Stderr | Warning logged, tool proceeds |
|
|
223
|
-
| `2` | Blocked + Error | Tool execution blocked |
|
|
224
|
-
|
|
225
|
-
## Best Practices
|
|
226
|
-
|
|
227
|
-
✅ **DO**:
|
|
228
|
-
- Keep hook scripts < 100ms execution time
|
|
229
|
-
- Use specific matchers (not wildcard `*` unless necessary)
|
|
230
|
-
- Log errors clearly to stderr
|
|
231
|
-
- Test hooks before deploying to team
|
|
232
|
-
|
|
233
|
-
❌ **DON'T**:
|
|
234
|
-
- Make network calls in PreToolUse hooks
|
|
235
|
-
- Block common operations (use warnings instead)
|
|
236
|
-
- Write to user files from hooks
|
|
237
|
-
- Create complex logic (delegate to sub-agents)
|
|
238
|
-
|
|
239
|
-
## Hook Validation Checklist
|
|
240
|
-
|
|
241
|
-
- [ ] All scripts have proper shebang (`#!/bin/bash` or `#!/usr/bin/env python3`)
|
|
242
|
-
- [ ] Scripts are executable: `chmod +x hook.sh`
|
|
243
|
-
- [ ] Exit codes are correct (0, 1, or 2)
|
|
244
|
-
- [ ] Paths are absolute (not relative)
|
|
245
|
-
- [ ] Tested for < 100ms latency
|
|
246
|
-
- [ ] Error messages are user-friendly
|
|
247
|
-
- [ ] No hardcoded secrets or credentials
|
|
248
|
-
|
|
249
|
-
---
|
|
250
|
-
|
|
251
|
-
**Reference**: Context7 Claude Code Hooks documentation
|
|
252
|
-
**Version**: 1.0.0
|
|
@@ -1,19 +0,0 @@
|
|
|
1
|
-
#!/bin/bash
|
|
2
|
-
# Pre-Bash Command Validator (from Context7 official docs)
|
|
3
|
-
set -euo pipefail
|
|
4
|
-
|
|
5
|
-
FORBIDDEN=(
|
|
6
|
-
"rm -rf /"
|
|
7
|
-
"sudo rm"
|
|
8
|
-
"chmod 777"
|
|
9
|
-
"eval.*curl"
|
|
10
|
-
)
|
|
11
|
-
|
|
12
|
-
COMMAND="${1:-}"
|
|
13
|
-
for pattern in "${FORBIDDEN[@]}"; do
|
|
14
|
-
if [[ "$COMMAND" =~ $pattern ]]; then
|
|
15
|
-
echo "🔴 BLOCKED: $pattern" >&2
|
|
16
|
-
exit 2
|
|
17
|
-
fi
|
|
18
|
-
done
|
|
19
|
-
exit 0
|
|
@@ -1,19 +0,0 @@
|
|
|
1
|
-
#!/bin/bash
|
|
2
|
-
# Preserve file permissions (from Context7 official docs)
|
|
3
|
-
set -euo pipefail
|
|
4
|
-
|
|
5
|
-
HOOK_TYPE="${1:-pre}"
|
|
6
|
-
FILE="${2:-.}"
|
|
7
|
-
PERMS_FILE="/tmp/perms_${FILE//\//_}.txt"
|
|
8
|
-
|
|
9
|
-
if [[ "$HOOK_TYPE" == "pre" ]]; then
|
|
10
|
-
stat -c "%a %u:%g" "$FILE" > "$PERMS_FILE" 2>/dev/null || true
|
|
11
|
-
exit 0
|
|
12
|
-
elif [[ "$HOOK_TYPE" == "post" ]]; then
|
|
13
|
-
if [[ -f "$PERMS_FILE" ]]; then
|
|
14
|
-
SAVED=$(cat "$PERMS_FILE")
|
|
15
|
-
chmod ${SAVED%% *} "$FILE" 2>/dev/null || true
|
|
16
|
-
rm "$PERMS_FILE"
|
|
17
|
-
fi
|
|
18
|
-
exit 0
|
|
19
|
-
fi
|
|
@@ -1,24 +0,0 @@
|
|
|
1
|
-
#!/usr/bin/env python3
|
|
2
|
-
# @CODE:HOOK-BASH-001 | SPEC: TBD | TEST: tests/hooks/test_bash_validation.py
|
|
3
|
-
# Bash command validator (from Context7 official docs)
|
|
4
|
-
import json
|
|
5
|
-
import re
|
|
6
|
-
import sys
|
|
7
|
-
|
|
8
|
-
BLOCKED = [
|
|
9
|
-
(r"rm\s+-rf\s+/", "Blocking rm -rf /"),
|
|
10
|
-
(r"sudo\s+rm", "Blocking sudo rm"),
|
|
11
|
-
(r">\s*/etc/\w+", "Blocking writes to /etc"),
|
|
12
|
-
(r"curl.*\|\s*bash", "Blocking curl | bash"),
|
|
13
|
-
]
|
|
14
|
-
|
|
15
|
-
try:
|
|
16
|
-
data = json.load(sys.stdin)
|
|
17
|
-
cmd = data.get("tool_input", {}).get("command", "")
|
|
18
|
-
for pattern, msg in BLOCKED:
|
|
19
|
-
if re.search(pattern, cmd):
|
|
20
|
-
print(f"🔴 {msg}", file=sys.stderr)
|
|
21
|
-
sys.exit(2)
|
|
22
|
-
sys.exit(0)
|
|
23
|
-
except Exception:
|
|
24
|
-
sys.exit(0)
|
|
@@ -1,199 +0,0 @@
|
|
|
1
|
-
---
|
|
2
|
-
name: moai-cc-mcp-plugins
|
|
3
|
-
description: "Configuring MCP Servers & Plugins for Claude Code. Set up Model Context Protocol servers (GitHub, Filesystem, Brave Search, SQLite). Configure OAuth, manage permissions, validate MCP structure. Use when integrating external tools, APIs, or expanding Claude Code capabilities."
|
|
4
|
-
allowed-tools: "Read, Write, Edit, Bash, Glob"
|
|
5
|
-
---
|
|
6
|
-
|
|
7
|
-
## Skill Metadata
|
|
8
|
-
|
|
9
|
-
| Field | Value |
|
|
10
|
-
| ----- | ----- |
|
|
11
|
-
| Version | 1.0.0 |
|
|
12
|
-
| Tier | Ops |
|
|
13
|
-
| Auto-load | When setting up MCP servers |
|
|
14
|
-
|
|
15
|
-
## What It Does
|
|
16
|
-
|
|
17
|
-
MCP (Model Context Protocol) server 및 plugin 설정을 위한 전체 가이드를 제공합니다. GitHub, Filesystem, SQLite 등 다양한 MCP server의 OAuth 설정, 권한 관리, 구조 검증 방법을 다룹니다.
|
|
18
|
-
|
|
19
|
-
## When to Use
|
|
20
|
-
|
|
21
|
-
- 새로운 MCP server를 설정할 때
|
|
22
|
-
- OAuth 인증을 구성할 때
|
|
23
|
-
- External tool이나 API를 통합할 때
|
|
24
|
-
- MCP plugin의 permissions이나 구조를 검증할 때
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
# Configuring MCP Servers & Plugins
|
|
28
|
-
|
|
29
|
-
MCP servers extend Claude Code with external tool integrations. Each server provides tools that Claude can invoke directly.
|
|
30
|
-
|
|
31
|
-
## MCP Server Setup in settings.json
|
|
32
|
-
|
|
33
|
-
```json
|
|
34
|
-
{
|
|
35
|
-
"mcpServers": {
|
|
36
|
-
"github": {
|
|
37
|
-
"command": "npx",
|
|
38
|
-
"args": ["-y", "@anthropic-ai/mcp-server-github"],
|
|
39
|
-
"oauth": {
|
|
40
|
-
"clientId": "your-client-id",
|
|
41
|
-
"clientSecret": "your-client-secret",
|
|
42
|
-
"scopes": ["repo", "issues", "pull_requests"]
|
|
43
|
-
}
|
|
44
|
-
},
|
|
45
|
-
"filesystem": {
|
|
46
|
-
"command": "npx",
|
|
47
|
-
"args": ["-y", "@modelcontextprotocol/server-filesystem", "/path/to/allowed/files"]
|
|
48
|
-
},
|
|
49
|
-
"sqlite": {
|
|
50
|
-
"command": "npx",
|
|
51
|
-
"args": ["-y", "@modelcontextprotocol/server-sqlite", "/path/to/database.db"]
|
|
52
|
-
},
|
|
53
|
-
"brave-search": {
|
|
54
|
-
"command": "npx",
|
|
55
|
-
"args": ["-y", "@modelcontextprotocol/server-brave-search"],
|
|
56
|
-
"env": {
|
|
57
|
-
"BRAVE_SEARCH_API_KEY": "${BRAVE_SEARCH_API_KEY}"
|
|
58
|
-
}
|
|
59
|
-
}
|
|
60
|
-
}
|
|
61
|
-
}
|
|
62
|
-
```
|
|
63
|
-
|
|
64
|
-
## Common MCP Servers
|
|
65
|
-
|
|
66
|
-
| Server | Purpose | Installation | Config |
|
|
67
|
-
|--------|---------|--------------|--------|
|
|
68
|
-
| **GitHub** | PR/issue management, code search | `@anthropic-ai/mcp-server-github` | OAuth required |
|
|
69
|
-
| **Filesystem** | Safe file access with path restrictions | `@modelcontextprotocol/server-filesystem` | Path whitelist required |
|
|
70
|
-
| **SQLite** | Database queries & migrations | `@modelcontextprotocol/server-sqlite` | DB file path |
|
|
71
|
-
| **Brave Search** | Web search integration | `@modelcontextprotocol/server-brave-search` | API key required |
|
|
72
|
-
|
|
73
|
-
## OAuth Configuration Pattern
|
|
74
|
-
|
|
75
|
-
```json
|
|
76
|
-
{
|
|
77
|
-
"oauth": {
|
|
78
|
-
"clientId": "your-client-id",
|
|
79
|
-
"clientSecret": "your-client-secret",
|
|
80
|
-
"scopes": ["repo", "issues"]
|
|
81
|
-
}
|
|
82
|
-
}
|
|
83
|
-
```
|
|
84
|
-
|
|
85
|
-
**Scope Minimization** (principle of least privilege):
|
|
86
|
-
- GitHub: `repo` (code access), `issues` (PR/issue access)
|
|
87
|
-
- NOT `admin`, NOT `delete_repo`
|
|
88
|
-
|
|
89
|
-
## Filesystem MCP: Path Whitelisting
|
|
90
|
-
|
|
91
|
-
```json
|
|
92
|
-
{
|
|
93
|
-
"filesystem": {
|
|
94
|
-
"command": "npx",
|
|
95
|
-
"args": [
|
|
96
|
-
"-y",
|
|
97
|
-
"@modelcontextprotocol/server-filesystem",
|
|
98
|
-
"${CLAUDE_PROJECT_DIR}/.moai",
|
|
99
|
-
"${CLAUDE_PROJECT_DIR}/src",
|
|
100
|
-
"${CLAUDE_PROJECT_DIR}/tests"
|
|
101
|
-
]
|
|
102
|
-
}
|
|
103
|
-
}
|
|
104
|
-
```
|
|
105
|
-
|
|
106
|
-
**Security Principle**: Explicitly list allowed directories, no wildcards.
|
|
107
|
-
|
|
108
|
-
## Plugin Marketplace Integration
|
|
109
|
-
|
|
110
|
-
```json
|
|
111
|
-
{
|
|
112
|
-
"extraKnownMarketplaces": [
|
|
113
|
-
{
|
|
114
|
-
"name": "company-plugins",
|
|
115
|
-
"url": "https://github.com/your-org/claude-plugins"
|
|
116
|
-
},
|
|
117
|
-
{
|
|
118
|
-
"name": "community-plugins",
|
|
119
|
-
"url": "https://glama.ai/mcp/servers"
|
|
120
|
-
}
|
|
121
|
-
]
|
|
122
|
-
}
|
|
123
|
-
```
|
|
124
|
-
|
|
125
|
-
## MCP Health Check
|
|
126
|
-
|
|
127
|
-
```bash
|
|
128
|
-
# Inside Claude Code terminal
|
|
129
|
-
/mcp # List active MCP servers
|
|
130
|
-
/plugin validate # Validate plugin structure
|
|
131
|
-
/plugin install # Install from marketplace
|
|
132
|
-
/plugin enable github # Enable specific server
|
|
133
|
-
/plugin disable github # Disable specific server
|
|
134
|
-
```
|
|
135
|
-
|
|
136
|
-
## Environment Variables for MCP
|
|
137
|
-
|
|
138
|
-
```bash
|
|
139
|
-
# Set in ~/.bash_profile or .claude/config.json
|
|
140
|
-
export GITHUB_TOKEN="gh_xxxx..."
|
|
141
|
-
export BRAVE_SEARCH_API_KEY="xxxx..."
|
|
142
|
-
export ANTHROPIC_API_KEY="sk-ant-..."
|
|
143
|
-
|
|
144
|
-
# Launch Claude Code with env
|
|
145
|
-
GITHUB_TOKEN=gh_xxxx claude
|
|
146
|
-
```
|
|
147
|
-
|
|
148
|
-
## MCP Troubleshooting
|
|
149
|
-
|
|
150
|
-
| Issue | Cause | Fix |
|
|
151
|
-
|-------|-------|-----|
|
|
152
|
-
| Server not connecting | Invalid JSON in mcpServers | Validate with `jq .mcpServers settings.json` |
|
|
153
|
-
| OAuth error | Token expired or invalid scopes | Check `claude /usage`, regenerate token |
|
|
154
|
-
| Permission denied | Path not whitelisted | Add to Filesystem MCP args |
|
|
155
|
-
| Slow response | Network latency or server overload | Check server logs, reduce scope |
|
|
156
|
-
|
|
157
|
-
## Best Practices
|
|
158
|
-
|
|
159
|
-
✅ **DO**:
|
|
160
|
-
- Use environment variables for secrets
|
|
161
|
-
- Whitelist Filesystem paths explicitly
|
|
162
|
-
- Start with minimal scopes, expand only if needed
|
|
163
|
-
- Test MCP connection: `/mcp` command
|
|
164
|
-
|
|
165
|
-
❌ **DON'T**:
|
|
166
|
-
- Hardcode credentials in settings.json
|
|
167
|
-
- Use wildcard paths (`/` in Filesystem MCP)
|
|
168
|
-
- Install untrusted plugins
|
|
169
|
-
- Give admin scopes unnecessarily
|
|
170
|
-
|
|
171
|
-
## Plugin Custom Directory Structure
|
|
172
|
-
|
|
173
|
-
```
|
|
174
|
-
my-plugin/
|
|
175
|
-
├── .claude-plugin/
|
|
176
|
-
│ └── plugin.json
|
|
177
|
-
├── commands/
|
|
178
|
-
│ ├── deploy.md
|
|
179
|
-
│ └── rollback.md
|
|
180
|
-
├── agents/
|
|
181
|
-
│ └── reviewer.md
|
|
182
|
-
└── hooks/
|
|
183
|
-
└── pre-deploy-check.sh
|
|
184
|
-
```
|
|
185
|
-
|
|
186
|
-
## Validation Checklist
|
|
187
|
-
|
|
188
|
-
- [ ] All server paths are absolute
|
|
189
|
-
- [ ] OAuth secrets stored in env vars
|
|
190
|
-
- [ ] Filesystem paths are whitelisted
|
|
191
|
-
- [ ] No hardcoded tokens or credentials
|
|
192
|
-
- [ ] MCP server installed: `which npx`
|
|
193
|
-
- [ ] Health check passes: `/mcp`
|
|
194
|
-
- [ ] Scopes follow least-privilege principle
|
|
195
|
-
|
|
196
|
-
---
|
|
197
|
-
|
|
198
|
-
**Reference**: Claude Code MCP documentation
|
|
199
|
-
**Version**: 1.0.0
|
|
@@ -1,39 +0,0 @@
|
|
|
1
|
-
{
|
|
2
|
-
"mcpServers": {
|
|
3
|
-
"github": {
|
|
4
|
-
"command": "npx",
|
|
5
|
-
"args": ["-y", "@anthropic-ai/mcp-server-github"],
|
|
6
|
-
"oauth": {
|
|
7
|
-
"clientId": "${GITHUB_CLIENT_ID}",
|
|
8
|
-
"clientSecret": "${GITHUB_CLIENT_SECRET}",
|
|
9
|
-
"scopes": ["repo", "issues"]
|
|
10
|
-
}
|
|
11
|
-
},
|
|
12
|
-
"filesystem": {
|
|
13
|
-
"command": "npx",
|
|
14
|
-
"args": [
|
|
15
|
-
"-y",
|
|
16
|
-
"@modelcontextprotocol/server-filesystem",
|
|
17
|
-
"${CLAUDE_PROJECT_DIR}/.moai",
|
|
18
|
-
"${CLAUDE_PROJECT_DIR}/src"
|
|
19
|
-
]
|
|
20
|
-
},
|
|
21
|
-
"sqlite": {
|
|
22
|
-
"command": "npx",
|
|
23
|
-
"args": ["-y", "@modelcontextprotocol/server-sqlite", "/path/to/db.sqlite"]
|
|
24
|
-
},
|
|
25
|
-
"brave-search": {
|
|
26
|
-
"command": "npx",
|
|
27
|
-
"args": ["-y", "@modelcontextprotocol/server-brave-search"],
|
|
28
|
-
"env": {
|
|
29
|
-
"BRAVE_SEARCH_API_KEY": "${BRAVE_SEARCH_API_KEY}"
|
|
30
|
-
}
|
|
31
|
-
}
|
|
32
|
-
},
|
|
33
|
-
"extraKnownMarketplaces": [
|
|
34
|
-
{
|
|
35
|
-
"name": "company-plugins",
|
|
36
|
-
"url": "https://github.com/your-org/claude-plugins"
|
|
37
|
-
}
|
|
38
|
-
]
|
|
39
|
-
}
|