@jaguilar87/gaia 5.0.0-rc.2
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.
- package/.claude-plugin/marketplace.json +33 -0
- package/.claude-plugin/plugin.json +26 -0
- package/ARCHITECTURE.md +335 -0
- package/CHANGELOG.md +1298 -0
- package/CODE_OF_CONDUCT.md +11 -0
- package/CONTRIBUTING.md +146 -0
- package/INSTALL.md +436 -0
- package/LICENSE +21 -0
- package/README.md +222 -0
- package/SECURITY.md +47 -0
- package/agents/README.md +78 -0
- package/agents/cloud-troubleshooter.md +73 -0
- package/agents/developer.md +65 -0
- package/agents/gaia-operator.md +64 -0
- package/agents/gaia-orchestrator.md +111 -0
- package/agents/gaia-planner.md +53 -0
- package/agents/gaia-system.md +71 -0
- package/agents/gitops-operator.md +61 -0
- package/agents/terraform-architect.md +63 -0
- package/bin/README.md +106 -0
- package/bin/cli/__init__.py +1 -0
- package/bin/cli/approvals.py +740 -0
- package/bin/cli/cleanup.py +562 -0
- package/bin/cli/context.py +283 -0
- package/bin/cli/doctor.py +651 -0
- package/bin/cli/history.py +305 -0
- package/bin/cli/memory.py +483 -0
- package/bin/cli/metrics.py +1068 -0
- package/bin/cli/plans.py +515 -0
- package/bin/cli/status.py +302 -0
- package/bin/cli/update.py +382 -0
- package/bin/gaia +112 -0
- package/bin/gaia-cleanup.js +531 -0
- package/bin/gaia-doctor.js +635 -0
- package/bin/gaia-evidence +126 -0
- package/bin/gaia-history.js +251 -0
- package/bin/gaia-metrics.js +1278 -0
- package/bin/gaia-review.js +269 -0
- package/bin/gaia-scan +44 -0
- package/bin/gaia-scan.py +589 -0
- package/bin/gaia-skills-diagnose.js +929 -0
- package/bin/gaia-status.js +278 -0
- package/bin/gaia-uninstall.js +111 -0
- package/bin/gaia-update.js +919 -0
- package/bin/pre-publish-validate.js +610 -0
- package/bin/python-detect.js +60 -0
- package/bin/validate-sandbox.sh +601 -0
- package/commands/README.md +64 -0
- package/commands/gaia.md +37 -0
- package/commands/scan-project.md +67 -0
- package/config/README.md +71 -0
- package/config/cloud/aws.json +134 -0
- package/config/cloud/gcp.json +139 -0
- package/config/context-contracts.json +158 -0
- package/config/crons-schema.md +81 -0
- package/config/git_standards.json +72 -0
- package/config/surface-routing.json +417 -0
- package/config/universal-rules.json +102 -0
- package/dist/gaia-ops/.claude-plugin/plugin.json +24 -0
- package/dist/gaia-ops/README.md +80 -0
- package/dist/gaia-ops/agents/cloud-troubleshooter.md +73 -0
- package/dist/gaia-ops/agents/developer.md +65 -0
- package/dist/gaia-ops/agents/gaia-operator.md +64 -0
- package/dist/gaia-ops/agents/gaia-orchestrator.md +111 -0
- package/dist/gaia-ops/agents/gaia-planner.md +53 -0
- package/dist/gaia-ops/agents/gaia-system.md +71 -0
- package/dist/gaia-ops/agents/gitops-operator.md +61 -0
- package/dist/gaia-ops/agents/terraform-architect.md +63 -0
- package/dist/gaia-ops/commands/gaia.md +37 -0
- package/dist/gaia-ops/config/README.md +71 -0
- package/dist/gaia-ops/config/cloud/aws.json +134 -0
- package/dist/gaia-ops/config/cloud/gcp.json +139 -0
- package/dist/gaia-ops/config/context-contracts.json +158 -0
- package/dist/gaia-ops/config/crons-schema.md +81 -0
- package/dist/gaia-ops/config/git_standards.json +72 -0
- package/dist/gaia-ops/config/surface-routing.json +417 -0
- package/dist/gaia-ops/config/universal-rules.json +102 -0
- package/dist/gaia-ops/hooks/adapters/__init__.py +52 -0
- package/dist/gaia-ops/hooks/adapters/base.py +219 -0
- package/dist/gaia-ops/hooks/adapters/channel.py +17 -0
- package/dist/gaia-ops/hooks/adapters/claude_code.py +1890 -0
- package/dist/gaia-ops/hooks/adapters/types.py +194 -0
- package/dist/gaia-ops/hooks/adapters/utils.py +25 -0
- package/dist/gaia-ops/hooks/hooks.json +192 -0
- package/dist/gaia-ops/hooks/modules/__init__.py +15 -0
- package/dist/gaia-ops/hooks/modules/agents/__init__.py +29 -0
- package/dist/gaia-ops/hooks/modules/agents/contract_validator.py +647 -0
- package/dist/gaia-ops/hooks/modules/agents/response_contract.py +496 -0
- package/dist/gaia-ops/hooks/modules/agents/skill_injection_verifier.py +120 -0
- package/dist/gaia-ops/hooks/modules/agents/state_tracker.py +267 -0
- package/dist/gaia-ops/hooks/modules/agents/task_info_builder.py +74 -0
- package/dist/gaia-ops/hooks/modules/agents/transcript_analyzer.py +458 -0
- package/dist/gaia-ops/hooks/modules/agents/transcript_reader.py +152 -0
- package/dist/gaia-ops/hooks/modules/audit/__init__.py +28 -0
- package/dist/gaia-ops/hooks/modules/audit/event_detector.py +168 -0
- package/dist/gaia-ops/hooks/modules/audit/logger.py +131 -0
- package/dist/gaia-ops/hooks/modules/audit/metrics.py +134 -0
- package/dist/gaia-ops/hooks/modules/audit/workflow_auditor.py +611 -0
- package/dist/gaia-ops/hooks/modules/audit/workflow_recorder.py +296 -0
- package/dist/gaia-ops/hooks/modules/context/__init__.py +11 -0
- package/dist/gaia-ops/hooks/modules/context/agentic_loop_detector.py +165 -0
- package/dist/gaia-ops/hooks/modules/context/anchor_tracker.py +317 -0
- package/dist/gaia-ops/hooks/modules/context/compact_context_builder.py +218 -0
- package/dist/gaia-ops/hooks/modules/context/context_freshness.py +145 -0
- package/dist/gaia-ops/hooks/modules/context/context_injector.py +558 -0
- package/dist/gaia-ops/hooks/modules/context/context_writer.py +530 -0
- package/dist/gaia-ops/hooks/modules/context/contracts_loader.py +161 -0
- package/dist/gaia-ops/hooks/modules/core/__init__.py +40 -0
- package/dist/gaia-ops/hooks/modules/core/hook_entry.py +78 -0
- package/dist/gaia-ops/hooks/modules/core/paths.py +160 -0
- package/dist/gaia-ops/hooks/modules/core/plugin_mode.py +149 -0
- package/dist/gaia-ops/hooks/modules/core/plugin_setup.py +577 -0
- package/dist/gaia-ops/hooks/modules/core/state.py +179 -0
- package/dist/gaia-ops/hooks/modules/core/stdin.py +24 -0
- package/dist/gaia-ops/hooks/modules/events/__init__.py +1 -0
- package/dist/gaia-ops/hooks/modules/events/event_writer.py +210 -0
- package/dist/gaia-ops/hooks/modules/memory/__init__.py +8 -0
- package/dist/gaia-ops/hooks/modules/memory/episode_writer.py +216 -0
- package/dist/gaia-ops/hooks/modules/orchestrator/__init__.py +1 -0
- package/dist/gaia-ops/hooks/modules/orchestrator/delegate_mode.py +122 -0
- package/dist/gaia-ops/hooks/modules/scanning/__init__.py +8 -0
- package/dist/gaia-ops/hooks/modules/scanning/scan_trigger.py +84 -0
- package/dist/gaia-ops/hooks/modules/security/__init__.py +120 -0
- package/dist/gaia-ops/hooks/modules/security/approval_cleanup.py +87 -0
- package/dist/gaia-ops/hooks/modules/security/approval_constants.py +23 -0
- package/dist/gaia-ops/hooks/modules/security/approval_grants.py +1638 -0
- package/dist/gaia-ops/hooks/modules/security/approval_messages.py +71 -0
- package/dist/gaia-ops/hooks/modules/security/approval_scopes.py +222 -0
- package/dist/gaia-ops/hooks/modules/security/blocked_commands.py +595 -0
- package/dist/gaia-ops/hooks/modules/security/blocked_message_formatter.py +87 -0
- package/dist/gaia-ops/hooks/modules/security/command_semantics.py +181 -0
- package/dist/gaia-ops/hooks/modules/security/composition_rules.py +547 -0
- package/dist/gaia-ops/hooks/modules/security/flag_classifiers.py +873 -0
- package/dist/gaia-ops/hooks/modules/security/gitops_validator.py +179 -0
- package/dist/gaia-ops/hooks/modules/security/mutative_verbs.py +1131 -0
- package/dist/gaia-ops/hooks/modules/security/network_hosts.py +481 -0
- package/dist/gaia-ops/hooks/modules/security/prompt_validator.py +40 -0
- package/dist/gaia-ops/hooks/modules/security/shell_unwrapper.py +165 -0
- package/dist/gaia-ops/hooks/modules/security/tiers.py +196 -0
- package/dist/gaia-ops/hooks/modules/session/__init__.py +10 -0
- package/dist/gaia-ops/hooks/modules/session/pending_scanner.py +174 -0
- package/dist/gaia-ops/hooks/modules/session/session_context_writer.py +100 -0
- package/dist/gaia-ops/hooks/modules/session/session_event_injector.py +160 -0
- package/dist/gaia-ops/hooks/modules/session/session_manager.py +31 -0
- package/dist/gaia-ops/hooks/modules/session/session_registry.py +333 -0
- package/dist/gaia-ops/hooks/modules/tools/__init__.py +29 -0
- package/dist/gaia-ops/hooks/modules/tools/bash_validator.py +1008 -0
- package/dist/gaia-ops/hooks/modules/tools/cloud_pipe_validator.py +231 -0
- package/dist/gaia-ops/hooks/modules/tools/hook_response.py +55 -0
- package/dist/gaia-ops/hooks/modules/tools/shell_parser.py +227 -0
- package/dist/gaia-ops/hooks/modules/tools/stage_decomposer.py +315 -0
- package/dist/gaia-ops/hooks/modules/tools/task_validator.py +294 -0
- package/dist/gaia-ops/hooks/modules/validation/__init__.py +23 -0
- package/dist/gaia-ops/hooks/modules/validation/commit_validator.py +380 -0
- package/dist/gaia-ops/hooks/post_compact.py +43 -0
- package/dist/gaia-ops/hooks/post_tool_use.py +54 -0
- package/dist/gaia-ops/hooks/pre_compact.py +60 -0
- package/dist/gaia-ops/hooks/pre_tool_use.py +413 -0
- package/dist/gaia-ops/hooks/session_end_hook.py +77 -0
- package/dist/gaia-ops/hooks/session_start.py +81 -0
- package/dist/gaia-ops/hooks/stop_hook.py +70 -0
- package/dist/gaia-ops/hooks/subagent_start.py +71 -0
- package/dist/gaia-ops/hooks/subagent_stop.py +295 -0
- package/dist/gaia-ops/hooks/task_completed.py +70 -0
- package/dist/gaia-ops/hooks/user_prompt_submit.py +246 -0
- package/dist/gaia-ops/settings.json +72 -0
- package/dist/gaia-ops/skills/README.md +158 -0
- package/dist/gaia-ops/skills/agent-creation/SKILL.md +87 -0
- package/dist/gaia-ops/skills/agent-creation/examples.md +170 -0
- package/dist/gaia-ops/skills/agent-creation/reference.md +191 -0
- package/dist/gaia-ops/skills/agent-protocol/SKILL.md +93 -0
- package/dist/gaia-ops/skills/agent-protocol/examples.md +223 -0
- package/dist/gaia-ops/skills/agent-response/SKILL.md +69 -0
- package/dist/gaia-ops/skills/agentic-loop/SKILL.md +80 -0
- package/dist/gaia-ops/skills/agentic-loop/reference.md +378 -0
- package/dist/gaia-ops/skills/blog-writing/SKILL.md +98 -0
- package/dist/gaia-ops/skills/blog-writing/reference.md +130 -0
- package/dist/gaia-ops/skills/brief-spec/SKILL.md +185 -0
- package/dist/gaia-ops/skills/command-execution/SKILL.md +64 -0
- package/dist/gaia-ops/skills/command-execution/reference.md +83 -0
- package/dist/gaia-ops/skills/context-updater/SKILL.md +87 -0
- package/dist/gaia-ops/skills/context-updater/examples.md +71 -0
- package/dist/gaia-ops/skills/developer-patterns/SKILL.md +50 -0
- package/dist/gaia-ops/skills/developer-patterns/reference.md +112 -0
- package/dist/gaia-ops/skills/execution/SKILL.md +99 -0
- package/dist/gaia-ops/skills/fast-queries/SKILL.md +43 -0
- package/dist/gaia-ops/skills/gaia-compact/SKILL.md +74 -0
- package/dist/gaia-ops/skills/gaia-patterns/SKILL.md +108 -0
- package/dist/gaia-ops/skills/gaia-patterns/reference.md +395 -0
- package/dist/gaia-ops/skills/gaia-planner/SKILL.md +37 -0
- package/dist/gaia-ops/skills/gaia-planner/reference.md +107 -0
- package/dist/gaia-ops/skills/gaia-release/SKILL.md +85 -0
- package/dist/gaia-ops/skills/gaia-release/reference.md +92 -0
- package/dist/gaia-ops/skills/gaia-self-check/SKILL.md +114 -0
- package/dist/gaia-ops/skills/gaia-self-check/reference.md +453 -0
- package/dist/gaia-ops/skills/gaia-verify/SKILL.md +77 -0
- package/dist/gaia-ops/skills/gaia-verify/reference.md +80 -0
- package/dist/gaia-ops/skills/git-conventions/SKILL.md +47 -0
- package/dist/gaia-ops/skills/gitops-patterns/SKILL.md +60 -0
- package/dist/gaia-ops/skills/gitops-patterns/reference.md +183 -0
- package/dist/gaia-ops/skills/gmail-policy/SKILL.md +200 -0
- package/dist/gaia-ops/skills/gmail-policy/reference.md +150 -0
- package/dist/gaia-ops/skills/gmail-triage/SKILL.md +100 -0
- package/dist/gaia-ops/skills/gws-setup/SKILL.md +99 -0
- package/dist/gaia-ops/skills/gws-setup/reference.md +73 -0
- package/dist/gaia-ops/skills/investigation/SKILL.md +100 -0
- package/dist/gaia-ops/skills/memory-curation/SKILL.md +83 -0
- package/dist/gaia-ops/skills/memory-search/SKILL.md +88 -0
- package/dist/gaia-ops/skills/orchestrator-approval/SKILL.md +160 -0
- package/dist/gaia-ops/skills/orchestrator-approval/reference.md +174 -0
- package/dist/gaia-ops/skills/pending-approvals/SKILL.md +72 -0
- package/dist/gaia-ops/skills/pending-approvals/reference.md +214 -0
- package/dist/gaia-ops/skills/readme-writing/SKILL.md +71 -0
- package/dist/gaia-ops/skills/readme-writing/reference.md +188 -0
- package/dist/gaia-ops/skills/reference.md +135 -0
- package/dist/gaia-ops/skills/request-approval/SKILL.md +140 -0
- package/dist/gaia-ops/skills/request-approval/examples.md +140 -0
- package/dist/gaia-ops/skills/request-approval/reference.md +57 -0
- package/dist/gaia-ops/skills/schedule-task/SKILL.md +64 -0
- package/dist/gaia-ops/skills/schedule-task/reference.md +233 -0
- package/dist/gaia-ops/skills/security-tiers/SKILL.md +141 -0
- package/dist/gaia-ops/skills/security-tiers/destructive-commands-reference.md +623 -0
- package/dist/gaia-ops/skills/security-tiers/reference.md +39 -0
- package/dist/gaia-ops/skills/session-reflection/SKILL.md +69 -0
- package/dist/gaia-ops/skills/skill-creation/SKILL.md +92 -0
- package/dist/gaia-ops/skills/skill-creation/reference.md +29 -0
- package/dist/gaia-ops/skills/terraform-patterns/SKILL.md +89 -0
- package/dist/gaia-ops/skills/terraform-patterns/reference.md +93 -0
- package/dist/gaia-ops/tools/__init__.py +9 -0
- package/dist/gaia-ops/tools/agentic-loop/decide-status.py +210 -0
- package/dist/gaia-ops/tools/agentic-loop/parse-metric.py +106 -0
- package/dist/gaia-ops/tools/agentic-loop/record-iteration.py +221 -0
- package/dist/gaia-ops/tools/context/README.md +132 -0
- package/dist/gaia-ops/tools/context/__init__.py +42 -0
- package/dist/gaia-ops/tools/context/_paths.py +20 -0
- package/dist/gaia-ops/tools/context/context_provider.py +721 -0
- package/dist/gaia-ops/tools/context/context_section_reader.py +342 -0
- package/dist/gaia-ops/tools/context/deep_merge.py +159 -0
- package/dist/gaia-ops/tools/context/pending_updates.py +760 -0
- package/dist/gaia-ops/tools/context/surface_router.py +278 -0
- package/dist/gaia-ops/tools/fast-queries/README.md +65 -0
- package/dist/gaia-ops/tools/fast-queries/__init__.py +30 -0
- package/dist/gaia-ops/tools/fast-queries/appservices/quicktriage_devops_developer.sh +75 -0
- package/dist/gaia-ops/tools/fast-queries/cloud/aws/quicktriage_aws_troubleshooter.sh +32 -0
- package/dist/gaia-ops/tools/fast-queries/cloud/gcp/quicktriage_gcp_troubleshooter.sh +88 -0
- package/dist/gaia-ops/tools/fast-queries/gitops/quicktriage_gitops_operator.sh +48 -0
- package/dist/gaia-ops/tools/fast-queries/run_triage.sh +59 -0
- package/dist/gaia-ops/tools/fast-queries/terraform/quicktriage_terraform_architect.sh +80 -0
- package/dist/gaia-ops/tools/gaia_simulator/__init__.py +33 -0
- package/dist/gaia-ops/tools/gaia_simulator/cli.py +354 -0
- package/dist/gaia-ops/tools/gaia_simulator/extractor.py +457 -0
- package/dist/gaia-ops/tools/gaia_simulator/reporter.py +258 -0
- package/dist/gaia-ops/tools/gaia_simulator/routing_simulator.py +334 -0
- package/dist/gaia-ops/tools/gaia_simulator/runner.py +539 -0
- package/dist/gaia-ops/tools/gaia_simulator/skills_mapper.py +264 -0
- package/dist/gaia-ops/tools/memory/README.md +0 -0
- package/dist/gaia-ops/tools/memory/__init__.py +20 -0
- package/dist/gaia-ops/tools/memory/backfill_fts5.py +107 -0
- package/dist/gaia-ops/tools/memory/conflict_detector.py +295 -0
- package/dist/gaia-ops/tools/memory/episodic.py +1210 -0
- package/dist/gaia-ops/tools/memory/git_invalidator.py +262 -0
- package/dist/gaia-ops/tools/memory/paths.py +102 -0
- package/dist/gaia-ops/tools/memory/scoring.py +193 -0
- package/dist/gaia-ops/tools/memory/search_store.py +375 -0
- package/dist/gaia-ops/tools/persist_transcript_analysis.py +85 -0
- package/dist/gaia-ops/tools/review/__init__.py +1 -0
- package/dist/gaia-ops/tools/review/review_engine.py +157 -0
- package/dist/gaia-ops/tools/scan/__init__.py +35 -0
- package/dist/gaia-ops/tools/scan/config.py +247 -0
- package/dist/gaia-ops/tools/scan/merge.py +212 -0
- package/dist/gaia-ops/tools/scan/orchestrator.py +549 -0
- package/dist/gaia-ops/tools/scan/registry.py +127 -0
- package/dist/gaia-ops/tools/scan/scanners/__init__.py +18 -0
- package/dist/gaia-ops/tools/scan/scanners/base.py +137 -0
- package/dist/gaia-ops/tools/scan/scanners/environment.py +349 -0
- package/dist/gaia-ops/tools/scan/scanners/git.py +570 -0
- package/dist/gaia-ops/tools/scan/scanners/infrastructure.py +875 -0
- package/dist/gaia-ops/tools/scan/scanners/orchestration.py +600 -0
- package/dist/gaia-ops/tools/scan/scanners/stack.py +1085 -0
- package/dist/gaia-ops/tools/scan/scanners/tools.py +260 -0
- package/dist/gaia-ops/tools/scan/setup.py +686 -0
- package/dist/gaia-ops/tools/scan/tests/__init__.py +1 -0
- package/dist/gaia-ops/tools/scan/tests/conftest.py +796 -0
- package/dist/gaia-ops/tools/scan/tests/test_environment.py +323 -0
- package/dist/gaia-ops/tools/scan/tests/test_git.py +419 -0
- package/dist/gaia-ops/tools/scan/tests/test_infrastructure.py +382 -0
- package/dist/gaia-ops/tools/scan/tests/test_integration.py +920 -0
- package/dist/gaia-ops/tools/scan/tests/test_merge.py +269 -0
- package/dist/gaia-ops/tools/scan/tests/test_orchestration.py +304 -0
- package/dist/gaia-ops/tools/scan/tests/test_stack.py +604 -0
- package/dist/gaia-ops/tools/scan/tests/test_tools.py +349 -0
- package/dist/gaia-ops/tools/scan/ui.py +624 -0
- package/dist/gaia-ops/tools/scan/verify.py +270 -0
- package/dist/gaia-ops/tools/scan/walk.py +118 -0
- package/dist/gaia-ops/tools/scan/workspace.py +85 -0
- package/dist/gaia-ops/tools/validation/README.md +244 -0
- package/dist/gaia-ops/tools/validation/__init__.py +17 -0
- package/dist/gaia-ops/tools/validation/approval_gate.py +321 -0
- package/dist/gaia-ops/tools/validation/validate_skills.py +189 -0
- package/dist/gaia-security/.claude-plugin/plugin.json +24 -0
- package/dist/gaia-security/README.md +90 -0
- package/dist/gaia-security/config/universal-rules.json +102 -0
- package/dist/gaia-security/hooks/adapters/__init__.py +52 -0
- package/dist/gaia-security/hooks/adapters/base.py +219 -0
- package/dist/gaia-security/hooks/adapters/channel.py +17 -0
- package/dist/gaia-security/hooks/adapters/claude_code.py +1890 -0
- package/dist/gaia-security/hooks/adapters/types.py +194 -0
- package/dist/gaia-security/hooks/adapters/utils.py +25 -0
- package/dist/gaia-security/hooks/hooks.json +113 -0
- package/dist/gaia-security/hooks/modules/__init__.py +15 -0
- package/dist/gaia-security/hooks/modules/agents/__init__.py +29 -0
- package/dist/gaia-security/hooks/modules/agents/contract_validator.py +647 -0
- package/dist/gaia-security/hooks/modules/agents/response_contract.py +496 -0
- package/dist/gaia-security/hooks/modules/agents/skill_injection_verifier.py +120 -0
- package/dist/gaia-security/hooks/modules/agents/state_tracker.py +267 -0
- package/dist/gaia-security/hooks/modules/agents/task_info_builder.py +74 -0
- package/dist/gaia-security/hooks/modules/agents/transcript_analyzer.py +458 -0
- package/dist/gaia-security/hooks/modules/agents/transcript_reader.py +152 -0
- package/dist/gaia-security/hooks/modules/audit/__init__.py +28 -0
- package/dist/gaia-security/hooks/modules/audit/event_detector.py +168 -0
- package/dist/gaia-security/hooks/modules/audit/logger.py +131 -0
- package/dist/gaia-security/hooks/modules/audit/metrics.py +134 -0
- package/dist/gaia-security/hooks/modules/audit/workflow_auditor.py +611 -0
- package/dist/gaia-security/hooks/modules/audit/workflow_recorder.py +296 -0
- package/dist/gaia-security/hooks/modules/context/__init__.py +11 -0
- package/dist/gaia-security/hooks/modules/context/agentic_loop_detector.py +165 -0
- package/dist/gaia-security/hooks/modules/context/anchor_tracker.py +317 -0
- package/dist/gaia-security/hooks/modules/context/compact_context_builder.py +218 -0
- package/dist/gaia-security/hooks/modules/context/context_freshness.py +145 -0
- package/dist/gaia-security/hooks/modules/context/context_injector.py +558 -0
- package/dist/gaia-security/hooks/modules/context/context_writer.py +530 -0
- package/dist/gaia-security/hooks/modules/context/contracts_loader.py +161 -0
- package/dist/gaia-security/hooks/modules/core/__init__.py +40 -0
- package/dist/gaia-security/hooks/modules/core/hook_entry.py +78 -0
- package/dist/gaia-security/hooks/modules/core/paths.py +160 -0
- package/dist/gaia-security/hooks/modules/core/plugin_mode.py +149 -0
- package/dist/gaia-security/hooks/modules/core/plugin_setup.py +577 -0
- package/dist/gaia-security/hooks/modules/core/state.py +179 -0
- package/dist/gaia-security/hooks/modules/core/stdin.py +24 -0
- package/dist/gaia-security/hooks/modules/events/__init__.py +1 -0
- package/dist/gaia-security/hooks/modules/events/event_writer.py +210 -0
- package/dist/gaia-security/hooks/modules/memory/__init__.py +8 -0
- package/dist/gaia-security/hooks/modules/memory/episode_writer.py +216 -0
- package/dist/gaia-security/hooks/modules/orchestrator/__init__.py +1 -0
- package/dist/gaia-security/hooks/modules/orchestrator/delegate_mode.py +122 -0
- package/dist/gaia-security/hooks/modules/scanning/__init__.py +8 -0
- package/dist/gaia-security/hooks/modules/scanning/scan_trigger.py +84 -0
- package/dist/gaia-security/hooks/modules/security/__init__.py +120 -0
- package/dist/gaia-security/hooks/modules/security/approval_cleanup.py +87 -0
- package/dist/gaia-security/hooks/modules/security/approval_constants.py +23 -0
- package/dist/gaia-security/hooks/modules/security/approval_grants.py +1638 -0
- package/dist/gaia-security/hooks/modules/security/approval_messages.py +71 -0
- package/dist/gaia-security/hooks/modules/security/approval_scopes.py +222 -0
- package/dist/gaia-security/hooks/modules/security/blocked_commands.py +595 -0
- package/dist/gaia-security/hooks/modules/security/blocked_message_formatter.py +87 -0
- package/dist/gaia-security/hooks/modules/security/command_semantics.py +181 -0
- package/dist/gaia-security/hooks/modules/security/composition_rules.py +547 -0
- package/dist/gaia-security/hooks/modules/security/flag_classifiers.py +873 -0
- package/dist/gaia-security/hooks/modules/security/gitops_validator.py +179 -0
- package/dist/gaia-security/hooks/modules/security/mutative_verbs.py +1131 -0
- package/dist/gaia-security/hooks/modules/security/network_hosts.py +481 -0
- package/dist/gaia-security/hooks/modules/security/prompt_validator.py +40 -0
- package/dist/gaia-security/hooks/modules/security/shell_unwrapper.py +165 -0
- package/dist/gaia-security/hooks/modules/security/tiers.py +196 -0
- package/dist/gaia-security/hooks/modules/session/__init__.py +10 -0
- package/dist/gaia-security/hooks/modules/session/pending_scanner.py +174 -0
- package/dist/gaia-security/hooks/modules/session/session_context_writer.py +100 -0
- package/dist/gaia-security/hooks/modules/session/session_event_injector.py +160 -0
- package/dist/gaia-security/hooks/modules/session/session_manager.py +31 -0
- package/dist/gaia-security/hooks/modules/session/session_registry.py +333 -0
- package/dist/gaia-security/hooks/modules/tools/__init__.py +29 -0
- package/dist/gaia-security/hooks/modules/tools/bash_validator.py +1008 -0
- package/dist/gaia-security/hooks/modules/tools/cloud_pipe_validator.py +231 -0
- package/dist/gaia-security/hooks/modules/tools/hook_response.py +55 -0
- package/dist/gaia-security/hooks/modules/tools/shell_parser.py +227 -0
- package/dist/gaia-security/hooks/modules/tools/stage_decomposer.py +315 -0
- package/dist/gaia-security/hooks/modules/tools/task_validator.py +294 -0
- package/dist/gaia-security/hooks/modules/validation/__init__.py +23 -0
- package/dist/gaia-security/hooks/modules/validation/commit_validator.py +380 -0
- package/dist/gaia-security/hooks/post_tool_use.py +54 -0
- package/dist/gaia-security/hooks/pre_tool_use.py +413 -0
- package/dist/gaia-security/hooks/session_end_hook.py +77 -0
- package/dist/gaia-security/hooks/session_start.py +81 -0
- package/dist/gaia-security/hooks/stop_hook.py +70 -0
- package/dist/gaia-security/hooks/user_prompt_submit.py +246 -0
- package/dist/gaia-security/settings.json +58 -0
- package/git-hooks/commit-msg +41 -0
- package/hooks/README.md +100 -0
- package/hooks/adapters/__init__.py +52 -0
- package/hooks/adapters/base.py +219 -0
- package/hooks/adapters/channel.py +17 -0
- package/hooks/adapters/claude_code.py +1890 -0
- package/hooks/adapters/types.py +194 -0
- package/hooks/adapters/utils.py +25 -0
- package/hooks/elicitation_result.py +179 -0
- package/hooks/hooks.json +84 -0
- package/hooks/modules/README.md +189 -0
- package/hooks/modules/__init__.py +15 -0
- package/hooks/modules/agents/__init__.py +29 -0
- package/hooks/modules/agents/contract_validator.py +647 -0
- package/hooks/modules/agents/response_contract.py +496 -0
- package/hooks/modules/agents/skill_injection_verifier.py +120 -0
- package/hooks/modules/agents/state_tracker.py +267 -0
- package/hooks/modules/agents/task_info_builder.py +74 -0
- package/hooks/modules/agents/transcript_analyzer.py +458 -0
- package/hooks/modules/agents/transcript_reader.py +152 -0
- package/hooks/modules/audit/__init__.py +28 -0
- package/hooks/modules/audit/event_detector.py +168 -0
- package/hooks/modules/audit/logger.py +131 -0
- package/hooks/modules/audit/metrics.py +134 -0
- package/hooks/modules/audit/workflow_auditor.py +611 -0
- package/hooks/modules/audit/workflow_recorder.py +296 -0
- package/hooks/modules/context/__init__.py +11 -0
- package/hooks/modules/context/agentic_loop_detector.py +165 -0
- package/hooks/modules/context/anchor_tracker.py +317 -0
- package/hooks/modules/context/compact_context_builder.py +218 -0
- package/hooks/modules/context/context_freshness.py +145 -0
- package/hooks/modules/context/context_injector.py +558 -0
- package/hooks/modules/context/context_writer.py +530 -0
- package/hooks/modules/context/contracts_loader.py +161 -0
- package/hooks/modules/core/__init__.py +40 -0
- package/hooks/modules/core/hook_entry.py +78 -0
- package/hooks/modules/core/paths.py +160 -0
- package/hooks/modules/core/plugin_mode.py +149 -0
- package/hooks/modules/core/plugin_setup.py +577 -0
- package/hooks/modules/core/state.py +179 -0
- package/hooks/modules/core/stdin.py +24 -0
- package/hooks/modules/events/__init__.py +1 -0
- package/hooks/modules/events/event_writer.py +210 -0
- package/hooks/modules/evidence/__init__.py +34 -0
- package/hooks/modules/evidence/assertions.py +137 -0
- package/hooks/modules/evidence/index_writer.py +57 -0
- package/hooks/modules/evidence/loader.py +126 -0
- package/hooks/modules/evidence/runner.py +241 -0
- package/hooks/modules/memory/__init__.py +8 -0
- package/hooks/modules/memory/episode_writer.py +216 -0
- package/hooks/modules/orchestrator/__init__.py +1 -0
- package/hooks/modules/orchestrator/delegate_mode.py +122 -0
- package/hooks/modules/scanning/__init__.py +8 -0
- package/hooks/modules/scanning/scan_trigger.py +84 -0
- package/hooks/modules/security/__init__.py +120 -0
- package/hooks/modules/security/approval_cleanup.py +87 -0
- package/hooks/modules/security/approval_constants.py +23 -0
- package/hooks/modules/security/approval_grants.py +1638 -0
- package/hooks/modules/security/approval_messages.py +71 -0
- package/hooks/modules/security/approval_scopes.py +222 -0
- package/hooks/modules/security/blocked_commands.py +595 -0
- package/hooks/modules/security/blocked_message_formatter.py +87 -0
- package/hooks/modules/security/command_semantics.py +181 -0
- package/hooks/modules/security/composition_rules.py +547 -0
- package/hooks/modules/security/flag_classifiers.py +873 -0
- package/hooks/modules/security/gitops_validator.py +179 -0
- package/hooks/modules/security/mutative_verbs.py +1131 -0
- package/hooks/modules/security/network_hosts.py +481 -0
- package/hooks/modules/security/prompt_validator.py +40 -0
- package/hooks/modules/security/shell_unwrapper.py +165 -0
- package/hooks/modules/security/tiers.py +196 -0
- package/hooks/modules/session/__init__.py +10 -0
- package/hooks/modules/session/pending_scanner.py +174 -0
- package/hooks/modules/session/session_context_writer.py +100 -0
- package/hooks/modules/session/session_event_injector.py +160 -0
- package/hooks/modules/session/session_manager.py +31 -0
- package/hooks/modules/session/session_registry.py +333 -0
- package/hooks/modules/tools/__init__.py +29 -0
- package/hooks/modules/tools/bash_validator.py +1008 -0
- package/hooks/modules/tools/cloud_pipe_validator.py +231 -0
- package/hooks/modules/tools/hook_response.py +55 -0
- package/hooks/modules/tools/shell_parser.py +227 -0
- package/hooks/modules/tools/stage_decomposer.py +315 -0
- package/hooks/modules/tools/task_validator.py +294 -0
- package/hooks/modules/validation/__init__.py +23 -0
- package/hooks/modules/validation/commit_validator.py +380 -0
- package/hooks/post_compact.py +43 -0
- package/hooks/post_tool_use.py +54 -0
- package/hooks/pre_compact.py +60 -0
- package/hooks/pre_tool_use.py +413 -0
- package/hooks/session_end_hook.py +77 -0
- package/hooks/session_start.py +81 -0
- package/hooks/stop_hook.py +70 -0
- package/hooks/subagent_start.py +71 -0
- package/hooks/subagent_stop.py +295 -0
- package/hooks/task_completed.py +70 -0
- package/hooks/user_prompt_submit.py +246 -0
- package/index.js +83 -0
- package/package.json +103 -0
- package/pyproject.toml +32 -0
- package/skills/README.md +158 -0
- package/skills/agent-creation/SKILL.md +87 -0
- package/skills/agent-creation/examples.md +170 -0
- package/skills/agent-creation/reference.md +191 -0
- package/skills/agent-protocol/SKILL.md +93 -0
- package/skills/agent-protocol/examples.md +223 -0
- package/skills/agent-response/SKILL.md +69 -0
- package/skills/agentic-loop/SKILL.md +80 -0
- package/skills/agentic-loop/reference.md +378 -0
- package/skills/blog-writing/SKILL.md +98 -0
- package/skills/blog-writing/reference.md +130 -0
- package/skills/brief-spec/SKILL.md +185 -0
- package/skills/command-execution/SKILL.md +64 -0
- package/skills/command-execution/reference.md +83 -0
- package/skills/context-updater/SKILL.md +87 -0
- package/skills/context-updater/examples.md +71 -0
- package/skills/developer-patterns/SKILL.md +50 -0
- package/skills/developer-patterns/reference.md +112 -0
- package/skills/execution/SKILL.md +99 -0
- package/skills/fast-queries/SKILL.md +43 -0
- package/skills/gaia-compact/SKILL.md +74 -0
- package/skills/gaia-patterns/SKILL.md +108 -0
- package/skills/gaia-patterns/reference.md +395 -0
- package/skills/gaia-planner/SKILL.md +37 -0
- package/skills/gaia-planner/reference.md +107 -0
- package/skills/gaia-release/SKILL.md +85 -0
- package/skills/gaia-release/reference.md +92 -0
- package/skills/gaia-self-check/SKILL.md +114 -0
- package/skills/gaia-self-check/reference.md +453 -0
- package/skills/gaia-verify/SKILL.md +77 -0
- package/skills/gaia-verify/reference.md +80 -0
- package/skills/git-conventions/SKILL.md +47 -0
- package/skills/gitops-patterns/SKILL.md +60 -0
- package/skills/gitops-patterns/reference.md +183 -0
- package/skills/gmail-policy/SKILL.md +200 -0
- package/skills/gmail-policy/reference.md +150 -0
- package/skills/gmail-triage/SKILL.md +100 -0
- package/skills/gws-setup/SKILL.md +99 -0
- package/skills/gws-setup/reference.md +73 -0
- package/skills/investigation/SKILL.md +100 -0
- package/skills/memory-curation/SKILL.md +83 -0
- package/skills/memory-search/SKILL.md +88 -0
- package/skills/orchestrator-approval/SKILL.md +160 -0
- package/skills/orchestrator-approval/reference.md +174 -0
- package/skills/pending-approvals/SKILL.md +72 -0
- package/skills/pending-approvals/reference.md +214 -0
- package/skills/readme-writing/SKILL.md +71 -0
- package/skills/readme-writing/reference.md +188 -0
- package/skills/reference.md +135 -0
- package/skills/request-approval/SKILL.md +140 -0
- package/skills/request-approval/examples.md +140 -0
- package/skills/request-approval/reference.md +57 -0
- package/skills/schedule-task/SKILL.md +64 -0
- package/skills/schedule-task/reference.md +233 -0
- package/skills/security-tiers/SKILL.md +141 -0
- package/skills/security-tiers/destructive-commands-reference.md +623 -0
- package/skills/security-tiers/reference.md +39 -0
- package/skills/session-reflection/SKILL.md +69 -0
- package/skills/skill-creation/SKILL.md +92 -0
- package/skills/skill-creation/reference.md +29 -0
- package/skills/terraform-patterns/SKILL.md +89 -0
- package/skills/terraform-patterns/reference.md +93 -0
- package/templates/README.md +69 -0
- package/templates/managed-settings.template.json +43 -0
- package/tools/__init__.py +9 -0
- package/tools/agentic-loop/decide-status.py +210 -0
- package/tools/agentic-loop/parse-metric.py +106 -0
- package/tools/agentic-loop/record-iteration.py +221 -0
- package/tools/context/README.md +132 -0
- package/tools/context/__init__.py +42 -0
- package/tools/context/_paths.py +20 -0
- package/tools/context/context_provider.py +721 -0
- package/tools/context/context_section_reader.py +342 -0
- package/tools/context/deep_merge.py +159 -0
- package/tools/context/pending_updates.py +760 -0
- package/tools/context/surface_router.py +278 -0
- package/tools/fast-queries/README.md +65 -0
- package/tools/fast-queries/__init__.py +30 -0
- package/tools/fast-queries/appservices/quicktriage_devops_developer.sh +75 -0
- package/tools/fast-queries/cloud/aws/quicktriage_aws_troubleshooter.sh +32 -0
- package/tools/fast-queries/cloud/gcp/quicktriage_gcp_troubleshooter.sh +88 -0
- package/tools/fast-queries/gitops/quicktriage_gitops_operator.sh +48 -0
- package/tools/fast-queries/run_triage.sh +59 -0
- package/tools/fast-queries/terraform/quicktriage_terraform_architect.sh +80 -0
- package/tools/gaia_simulator/__init__.py +33 -0
- package/tools/gaia_simulator/cli.py +354 -0
- package/tools/gaia_simulator/extractor.py +457 -0
- package/tools/gaia_simulator/reporter.py +258 -0
- package/tools/gaia_simulator/routing_simulator.py +334 -0
- package/tools/gaia_simulator/runner.py +539 -0
- package/tools/gaia_simulator/skills_mapper.py +264 -0
- package/tools/memory/README.md +0 -0
- package/tools/memory/__init__.py +20 -0
- package/tools/memory/backfill_fts5.py +107 -0
- package/tools/memory/conflict_detector.py +295 -0
- package/tools/memory/episodic.py +1210 -0
- package/tools/memory/git_invalidator.py +262 -0
- package/tools/memory/paths.py +102 -0
- package/tools/memory/scoring.py +193 -0
- package/tools/memory/search_store.py +375 -0
- package/tools/persist_transcript_analysis.py +85 -0
- package/tools/review/__init__.py +1 -0
- package/tools/review/review_engine.py +157 -0
- package/tools/scan/__init__.py +35 -0
- package/tools/scan/config.py +247 -0
- package/tools/scan/merge.py +212 -0
- package/tools/scan/orchestrator.py +549 -0
- package/tools/scan/registry.py +127 -0
- package/tools/scan/scanners/__init__.py +18 -0
- package/tools/scan/scanners/base.py +137 -0
- package/tools/scan/scanners/environment.py +349 -0
- package/tools/scan/scanners/git.py +570 -0
- package/tools/scan/scanners/infrastructure.py +875 -0
- package/tools/scan/scanners/orchestration.py +600 -0
- package/tools/scan/scanners/stack.py +1085 -0
- package/tools/scan/scanners/tools.py +260 -0
- package/tools/scan/setup.py +686 -0
- package/tools/scan/tests/__init__.py +1 -0
- package/tools/scan/tests/conftest.py +796 -0
- package/tools/scan/tests/test_environment.py +323 -0
- package/tools/scan/tests/test_git.py +419 -0
- package/tools/scan/tests/test_infrastructure.py +382 -0
- package/tools/scan/tests/test_integration.py +920 -0
- package/tools/scan/tests/test_merge.py +269 -0
- package/tools/scan/tests/test_orchestration.py +304 -0
- package/tools/scan/tests/test_stack.py +604 -0
- package/tools/scan/tests/test_tools.py +349 -0
- package/tools/scan/ui.py +624 -0
- package/tools/scan/verify.py +270 -0
- package/tools/scan/walk.py +118 -0
- package/tools/scan/workspace.py +85 -0
- package/tools/validation/README.md +244 -0
- package/tools/validation/__init__.py +17 -0
- package/tools/validation/approval_gate.py +321 -0
- package/tools/validation/validate_skills.py +189 -0
package/commands/gaia.md
ADDED
|
@@ -0,0 +1,37 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: gaia
|
|
3
|
+
description: Invoke the Gaia meta-agent for system architecture analysis, agent design, skill creation, and orchestration debugging
|
|
4
|
+
allowed-tools:
|
|
5
|
+
- Bash(*)
|
|
6
|
+
- Read
|
|
7
|
+
- Edit
|
|
8
|
+
- Write
|
|
9
|
+
- Glob
|
|
10
|
+
- Grep
|
|
11
|
+
- WebSearch
|
|
12
|
+
- WebFetch
|
|
13
|
+
- Task
|
|
14
|
+
- Agent
|
|
15
|
+
- Skill
|
|
16
|
+
---
|
|
17
|
+
|
|
18
|
+
Invoke the Gaia meta-agent (`gaia-system`) to work on the gaia-ops orchestration
|
|
19
|
+
system itself. This is the entry point for tasks that modify or analyze agents,
|
|
20
|
+
skills, hooks, or system architecture.
|
|
21
|
+
|
|
22
|
+
## When to use
|
|
23
|
+
|
|
24
|
+
- Analyze or improve the gaia-ops architecture
|
|
25
|
+
- Create or update agent definitions (`.md` files)
|
|
26
|
+
- Create or update skills (`SKILL.md` files)
|
|
27
|
+
- Write or debug Python hooks and tools
|
|
28
|
+
- Update `CLAUDE.md` or system configuration
|
|
29
|
+
- Research best practices for agent orchestration
|
|
30
|
+
|
|
31
|
+
## How it works
|
|
32
|
+
|
|
33
|
+
This command delegates to the `gaia-system` agent, which is the meta-agent
|
|
34
|
+
specialized in the orchestration system. It follows the standard agent protocol
|
|
35
|
+
and returns a `json:contract` block with findings and status.
|
|
36
|
+
|
|
37
|
+
$ARGUMENTS
|
|
@@ -0,0 +1,67 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: scan-project
|
|
3
|
+
description: Scan the current project to detect stack, infrastructure, tools, and generate/update project-context.json
|
|
4
|
+
allowed-tools:
|
|
5
|
+
- Bash(*)
|
|
6
|
+
- Read
|
|
7
|
+
---
|
|
8
|
+
|
|
9
|
+
Run the gaia modular project scanner to detect the project stack, infrastructure,
|
|
10
|
+
git setup, CLI tools, orchestration, and runtime environment. The scanner produces
|
|
11
|
+
(or updates) `.claude/project-context/project-context.json` with structured,
|
|
12
|
+
machine-readable context that agents consume.
|
|
13
|
+
|
|
14
|
+
## What this does
|
|
15
|
+
|
|
16
|
+
The scanner runs 6 independent modules in parallel:
|
|
17
|
+
- **stack** -- languages, frameworks, package managers
|
|
18
|
+
- **git** -- platform, remotes, branching strategy, monorepo detection
|
|
19
|
+
- **infrastructure** -- cloud providers, IaC, CI/CD, containers
|
|
20
|
+
- **orchestration** -- Kubernetes, GitOps (Flux/Argo), Helm charts
|
|
21
|
+
- **tools** -- installed CLI tools (kubectl, terraform, gcloud, etc.)
|
|
22
|
+
- **environment** -- OS info, language runtimes, .env file patterns
|
|
23
|
+
|
|
24
|
+
It preserves agent-enriched sections (data added by agents via CONTEXT_UPDATE)
|
|
25
|
+
and merges new scan data with existing context using section-ownership rules.
|
|
26
|
+
|
|
27
|
+
## How to run
|
|
28
|
+
|
|
29
|
+
Run the scanner CLI:
|
|
30
|
+
|
|
31
|
+
```bash
|
|
32
|
+
python3 bin/gaia-scan.py
|
|
33
|
+
```
|
|
34
|
+
|
|
35
|
+
Optional flags:
|
|
36
|
+
- `--verbose` -- show scanner-by-scanner progress
|
|
37
|
+
- `--scanners stack,git` -- run only specific scanners
|
|
38
|
+
- `--output /path/to/output.json` -- custom output path
|
|
39
|
+
- `--check-staleness` -- skip scan if context is already fresh (<24h old)
|
|
40
|
+
|
|
41
|
+
$ARGUMENTS
|
|
42
|
+
|
|
43
|
+
## Expected output
|
|
44
|
+
|
|
45
|
+
The CLI writes project-context.json and prints a JSON summary to stdout:
|
|
46
|
+
|
|
47
|
+
```
|
|
48
|
+
{
|
|
49
|
+
"status": "success",
|
|
50
|
+
"scanner_version": "0.1.0",
|
|
51
|
+
"sections_updated": ["project_identity", "stack", "git", ...],
|
|
52
|
+
"scanners_run": 6,
|
|
53
|
+
"warnings_count": 0,
|
|
54
|
+
"duration_ms": 2500.0
|
|
55
|
+
}
|
|
56
|
+
```
|
|
57
|
+
|
|
58
|
+
A human-readable summary is also printed to stderr showing scanner count,
|
|
59
|
+
section count, warnings, and elapsed time.
|
|
60
|
+
|
|
61
|
+
## After scanning
|
|
62
|
+
|
|
63
|
+
Read the generated context to verify:
|
|
64
|
+
|
|
65
|
+
```bash
|
|
66
|
+
python3 -c "import json; d=json.load(open('.claude/project-context/project-context.json')); print(json.dumps(list(d.get('sections',{}).keys()), indent=2))"
|
|
67
|
+
```
|
package/config/README.md
ADDED
|
@@ -0,0 +1,71 @@
|
|
|
1
|
+
# Config
|
|
2
|
+
|
|
3
|
+
Configuration lives here, separate from hooks, because these are data files — not code. Hooks are Python scripts that run at runtime; config files are JSON documents that those scripts read to make decisions. Keeping them apart means you can audit and change system behavior (which agents see which context sections, what git commit patterns are allowed, which surfaces route where) without touching executable code. It also makes the config files version-controllable and reviewable on their own terms.
|
|
4
|
+
|
|
5
|
+
The contracts are the most important piece in this directory. `context-contracts.json` defines, per agent, which sections of `project-context.json` the agent is allowed to read and which it is allowed to write. This is the access control layer for project knowledge — an agent that is not in the contracts file receives no context injection at all. The cloud extension files in `cloud/` extend these contracts for cloud-specific sections without modifying the base file, so adding a new cloud provider is a new file, not an edit to the core.
|
|
6
|
+
|
|
7
|
+
The other files — routing, git standards, universal rules — are each consumed by a specific module and do exactly what their names say. There is no magic here: the files are loaded, parsed, and applied by the module that reads them.
|
|
8
|
+
|
|
9
|
+
## Cuándo se activa
|
|
10
|
+
|
|
11
|
+
This component does not activate as a runtime process. Each file is read on-demand by the module that needs it. The table below shows the read point for each file.
|
|
12
|
+
|
|
13
|
+
**Cuándo se lee cada archivo:**
|
|
14
|
+
|
|
15
|
+
| File | Read by | When |
|
|
16
|
+
|------|---------|------|
|
|
17
|
+
| `surface-routing.json` | `hooks/user_prompt_submit.py` | Every prompt — determines routing recommendation injected into orchestrator context |
|
|
18
|
+
| `context-contracts.json` | `tools/context/context_provider.py` | Every agent dispatch — determines which project-context sections to inject |
|
|
19
|
+
| `git_standards.json` | `hooks/modules/validation/commit_validator.py` | Every `git commit` call intercepted by PreToolUse |
|
|
20
|
+
| `universal-rules.json` | `tools/context/context_provider.py` | Every agent dispatch — injected into all agents alongside project context |
|
|
21
|
+
| `cloud/gcp.json` | `tools/context/context_provider.py` | Agent dispatch when `cloud_provider = gcp` in project-context.json |
|
|
22
|
+
| `cloud/aws.json` | `tools/context/context_provider.py` | Agent dispatch when `cloud_provider = aws` in project-context.json |
|
|
23
|
+
|
|
24
|
+
**Base + cloud merge flow:**
|
|
25
|
+
|
|
26
|
+
```
|
|
27
|
+
Agent dispatch triggered
|
|
28
|
+
|
|
|
29
|
+
context_provider.py reads context-contracts.json <- cloud-agnostic base
|
|
30
|
+
|
|
|
31
|
+
Detects cloud_provider from project-context.json
|
|
32
|
+
|
|
|
33
|
+
Reads cloud/{provider}.json <- cloud extensions
|
|
34
|
+
|
|
|
35
|
+
Merges: extends read/write lists per agent (no duplicates)
|
|
36
|
+
|
|
|
37
|
+
Result: complete contract for this agent on this cloud
|
|
38
|
+
|
|
|
39
|
+
Agent receives filtered project-context sections
|
|
40
|
+
```
|
|
41
|
+
|
|
42
|
+
## Qué hay aquí
|
|
43
|
+
|
|
44
|
+
```
|
|
45
|
+
config/
|
|
46
|
+
├── context-contracts.json # Per-agent read/write access to project-context sections
|
|
47
|
+
├── surface-routing.json # Intent classification and agent routing signals
|
|
48
|
+
├── git_standards.json # Commit type allowlist, footer rules, Conventional Commits config
|
|
49
|
+
├── universal-rules.json # Behavior rules injected into all agents at dispatch time
|
|
50
|
+
├── cloud/
|
|
51
|
+
│ ├── gcp.json # GCP-specific context sections (extends base contracts)
|
|
52
|
+
│ └── aws.json # AWS-specific context sections (extends base contracts)
|
|
53
|
+
└── README.md
|
|
54
|
+
```
|
|
55
|
+
|
|
56
|
+
## Convenciones
|
|
57
|
+
|
|
58
|
+
**context-contracts.json schema:** Each entry is keyed by agent name. Each agent has `read` (list of project-context section names the agent receives) and `write` (list of sections the agent can update via CONTEXT_UPDATE). `core_sections` is a top-level list of sections injected into every agent regardless of per-agent config.
|
|
59
|
+
|
|
60
|
+
**Adding a new cloud:** Create `cloud/azure.json` following the same schema as `cloud/gcp.json`. Define agent-specific sections for that cloud. No code changes needed — `context_provider.py` detects the file automatically by matching `cloud_provider` from project-context.
|
|
61
|
+
|
|
62
|
+
**surface-routing.json format:** Each surface entry has `intent`, `primary_agent`, `adjacent_surfaces`, and `signals` (with `high` and `medium` confidence keyword lists). High-confidence signals are checked first; medium signals act as tie-breakers.
|
|
63
|
+
|
|
64
|
+
**universal-rules.json:** Changes here affect every agent in every session. Add only rules that are truly universal — constraints that apply regardless of domain. Domain-specific rules belong in the relevant skill (`security-tiers`, `command-execution`, etc.).
|
|
65
|
+
|
|
66
|
+
## Ver también
|
|
67
|
+
|
|
68
|
+
- [`hooks/user_prompt_submit.py`](../hooks/user_prompt_submit.py) — reads `surface-routing.json` on every prompt
|
|
69
|
+
- [`hooks/modules/validation/`](../hooks/modules/validation/) — reads `git_standards.json` on commit validation
|
|
70
|
+
- [`tools/context/`](../tools/context/) — reads contracts and universal-rules at agent dispatch time
|
|
71
|
+
- [`agents/README.md`](../agents/README.md) — agent names that must match context-contracts.json keys
|
|
@@ -0,0 +1,134 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": "2.0",
|
|
3
|
+
"provider": "aws",
|
|
4
|
+
"description": "AWS-specific context extensions. Merged on top of context-contracts.json at runtime by context_provider.py.",
|
|
5
|
+
"agents": {
|
|
6
|
+
"cloud-troubleshooter": {
|
|
7
|
+
"read": [
|
|
8
|
+
"vpc_mapping",
|
|
9
|
+
"load_balancers",
|
|
10
|
+
"api_gateway",
|
|
11
|
+
"irsa_bindings",
|
|
12
|
+
"aws_accounts"
|
|
13
|
+
],
|
|
14
|
+
"write": [
|
|
15
|
+
"vpc_mapping",
|
|
16
|
+
"load_balancers",
|
|
17
|
+
"irsa_bindings"
|
|
18
|
+
]
|
|
19
|
+
},
|
|
20
|
+
"terraform-architect": {
|
|
21
|
+
"read": [
|
|
22
|
+
"vpc_mapping",
|
|
23
|
+
"load_balancers",
|
|
24
|
+
"api_gateway",
|
|
25
|
+
"irsa_bindings",
|
|
26
|
+
"aws_accounts"
|
|
27
|
+
],
|
|
28
|
+
"write": [
|
|
29
|
+
"vpc_mapping",
|
|
30
|
+
"load_balancers",
|
|
31
|
+
"api_gateway",
|
|
32
|
+
"irsa_bindings"
|
|
33
|
+
]
|
|
34
|
+
},
|
|
35
|
+
"gitops-operator": {
|
|
36
|
+
"read": [
|
|
37
|
+
"irsa_bindings"
|
|
38
|
+
],
|
|
39
|
+
"write": []
|
|
40
|
+
},
|
|
41
|
+
"developer": {
|
|
42
|
+
"read": [
|
|
43
|
+
"aws_accounts",
|
|
44
|
+
"load_balancers"
|
|
45
|
+
],
|
|
46
|
+
"write": []
|
|
47
|
+
}
|
|
48
|
+
},
|
|
49
|
+
"section_schemas": {
|
|
50
|
+
"aws_accounts": {
|
|
51
|
+
"_description": "AWS account IDs by environment. AWS projects often use multiple accounts (prod, dev, shared services).",
|
|
52
|
+
"production": {
|
|
53
|
+
"account_id": "",
|
|
54
|
+
"account_alias": "",
|
|
55
|
+
"region": "us-east-1"
|
|
56
|
+
},
|
|
57
|
+
"development": {
|
|
58
|
+
"account_id": "",
|
|
59
|
+
"account_alias": "",
|
|
60
|
+
"region": "us-east-1"
|
|
61
|
+
},
|
|
62
|
+
"shared": {
|
|
63
|
+
"account_id": "",
|
|
64
|
+
"account_alias": "",
|
|
65
|
+
"purpose": "Shared services (ECR, shared EKS, tooling)"
|
|
66
|
+
}
|
|
67
|
+
},
|
|
68
|
+
"vpc_mapping": {
|
|
69
|
+
"_description": "AWS VPC topology per environment, including subnets and AZ mapping",
|
|
70
|
+
"vpcs": [
|
|
71
|
+
{
|
|
72
|
+
"vpc_id": "",
|
|
73
|
+
"name": "",
|
|
74
|
+
"environment": "production",
|
|
75
|
+
"region": "us-east-1",
|
|
76
|
+
"cidr": "10.0.0.0/16",
|
|
77
|
+
"subnets": {
|
|
78
|
+
"private": [],
|
|
79
|
+
"public": []
|
|
80
|
+
},
|
|
81
|
+
"availability_zones": [],
|
|
82
|
+
"clusters": [],
|
|
83
|
+
"status": "ACTIVE"
|
|
84
|
+
}
|
|
85
|
+
]
|
|
86
|
+
},
|
|
87
|
+
"load_balancers": {
|
|
88
|
+
"_description": "AWS NLB and ALB resources by service and cluster",
|
|
89
|
+
"_example": {
|
|
90
|
+
"my-service-nlb-prod": {
|
|
91
|
+
"name": "my-service-nlb-prod",
|
|
92
|
+
"type": "network",
|
|
93
|
+
"scheme": "internal",
|
|
94
|
+
"dns": "xxxx.elb.us-east-1.amazonaws.com",
|
|
95
|
+
"service": "my-service",
|
|
96
|
+
"namespace": "my-namespace",
|
|
97
|
+
"cluster": "my-eks-cluster",
|
|
98
|
+
"purpose": ""
|
|
99
|
+
}
|
|
100
|
+
}
|
|
101
|
+
},
|
|
102
|
+
"api_gateway": {
|
|
103
|
+
"_description": "AWS API Gateway V2 (HTTP/WebSocket) configurations and VPC Links",
|
|
104
|
+
"vpc_links": {
|
|
105
|
+
"_example_key": {
|
|
106
|
+
"id": "",
|
|
107
|
+
"status": "ACTIVE",
|
|
108
|
+
"target_nlb": "",
|
|
109
|
+
"target_nlb_dns": "",
|
|
110
|
+
"backend_service": "",
|
|
111
|
+
"namespace": "",
|
|
112
|
+
"cluster": "",
|
|
113
|
+
"host": "",
|
|
114
|
+
"purpose": ""
|
|
115
|
+
}
|
|
116
|
+
},
|
|
117
|
+
"apis": []
|
|
118
|
+
},
|
|
119
|
+
"irsa_bindings": {
|
|
120
|
+
"_description": "IAM Roles for Service Accounts (OIDC-based). AWS equivalent of GCP Workload Identity.",
|
|
121
|
+
"_example": {
|
|
122
|
+
"my-service-sa": {
|
|
123
|
+
"kubernetes_sa": "my-service-sa",
|
|
124
|
+
"namespace": "my-namespace",
|
|
125
|
+
"iam_role_arn": "arn:aws:iam::123456789012:role/my-service-role",
|
|
126
|
+
"iam_policies": [
|
|
127
|
+
"arn:aws:iam::aws:policy/AmazonS3ReadOnlyAccess"
|
|
128
|
+
],
|
|
129
|
+
"purpose": "Describe what this service account does"
|
|
130
|
+
}
|
|
131
|
+
}
|
|
132
|
+
}
|
|
133
|
+
}
|
|
134
|
+
}
|
|
@@ -0,0 +1,139 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": "2.0",
|
|
3
|
+
"provider": "gcp",
|
|
4
|
+
"description": "GCP-specific context extensions. Merged on top of context-contracts.json at runtime by context_provider.py.",
|
|
5
|
+
"agents": {
|
|
6
|
+
"cloud-troubleshooter": {
|
|
7
|
+
"read": [
|
|
8
|
+
"gcp_services",
|
|
9
|
+
"workload_identity",
|
|
10
|
+
"static_ips"
|
|
11
|
+
],
|
|
12
|
+
"write": [
|
|
13
|
+
"gcp_services",
|
|
14
|
+
"workload_identity",
|
|
15
|
+
"static_ips"
|
|
16
|
+
]
|
|
17
|
+
},
|
|
18
|
+
"terraform-architect": {
|
|
19
|
+
"read": [
|
|
20
|
+
"gcp_services",
|
|
21
|
+
"workload_identity",
|
|
22
|
+
"static_ips"
|
|
23
|
+
],
|
|
24
|
+
"write": [
|
|
25
|
+
"gcp_services",
|
|
26
|
+
"workload_identity",
|
|
27
|
+
"static_ips"
|
|
28
|
+
]
|
|
29
|
+
},
|
|
30
|
+
"gitops-operator": {
|
|
31
|
+
"read": [
|
|
32
|
+
"workload_identity",
|
|
33
|
+
"gcp_services"
|
|
34
|
+
],
|
|
35
|
+
"write": []
|
|
36
|
+
},
|
|
37
|
+
"developer": {
|
|
38
|
+
"read": [
|
|
39
|
+
"gcp_services"
|
|
40
|
+
],
|
|
41
|
+
"write": []
|
|
42
|
+
}
|
|
43
|
+
},
|
|
44
|
+
"section_schemas": {
|
|
45
|
+
"gcp_services": {
|
|
46
|
+
"_description": "GCP-managed services used by the project (Artifact Registry, Cloud SQL, Memorystore, etc.)",
|
|
47
|
+
"artifact_registry": {
|
|
48
|
+
"repositories": [
|
|
49
|
+
{
|
|
50
|
+
"name": "",
|
|
51
|
+
"location": "",
|
|
52
|
+
"format": "DOCKER",
|
|
53
|
+
"project": "",
|
|
54
|
+
"url": ""
|
|
55
|
+
}
|
|
56
|
+
]
|
|
57
|
+
},
|
|
58
|
+
"cloud_sql": {
|
|
59
|
+
"instances": [
|
|
60
|
+
{
|
|
61
|
+
"name": "",
|
|
62
|
+
"version": "POSTGRES_15",
|
|
63
|
+
"tier": "db-f1-micro",
|
|
64
|
+
"region": "",
|
|
65
|
+
"database_flags": {},
|
|
66
|
+
"status": ""
|
|
67
|
+
}
|
|
68
|
+
]
|
|
69
|
+
},
|
|
70
|
+
"memorystore": {
|
|
71
|
+
"instances": [
|
|
72
|
+
{
|
|
73
|
+
"name": "",
|
|
74
|
+
"tier": "BASIC",
|
|
75
|
+
"memory_size_gb": 1,
|
|
76
|
+
"region": "",
|
|
77
|
+
"status": ""
|
|
78
|
+
}
|
|
79
|
+
]
|
|
80
|
+
},
|
|
81
|
+
"cloud_storage": {
|
|
82
|
+
"buckets": [
|
|
83
|
+
{
|
|
84
|
+
"name": "",
|
|
85
|
+
"location": "",
|
|
86
|
+
"storage_class": "STANDARD",
|
|
87
|
+
"purpose": ""
|
|
88
|
+
}
|
|
89
|
+
]
|
|
90
|
+
},
|
|
91
|
+
"secret_manager": {
|
|
92
|
+
"enabled": true,
|
|
93
|
+
"secrets": []
|
|
94
|
+
},
|
|
95
|
+
"pubsub": {
|
|
96
|
+
"topics": [],
|
|
97
|
+
"subscriptions": []
|
|
98
|
+
},
|
|
99
|
+
"cloud_nat": {
|
|
100
|
+
"name": "",
|
|
101
|
+
"router": "",
|
|
102
|
+
"region": "",
|
|
103
|
+
"status": ""
|
|
104
|
+
}
|
|
105
|
+
},
|
|
106
|
+
"workload_identity": {
|
|
107
|
+
"_description": "GCP Workload Identity bindings: Kubernetes ServiceAccount -> GCP ServiceAccount with IAM roles",
|
|
108
|
+
"_example": {
|
|
109
|
+
"my-service-sa": {
|
|
110
|
+
"kubernetes_sa": "my-service-sa",
|
|
111
|
+
"namespace": "my-namespace",
|
|
112
|
+
"gcp_sa": "my-service-sa@project-id.iam.gserviceaccount.com",
|
|
113
|
+
"iam_roles": [
|
|
114
|
+
"roles/cloudsql.client",
|
|
115
|
+
"roles/secretmanager.secretAccessor",
|
|
116
|
+
"roles/artifactregistry.reader"
|
|
117
|
+
],
|
|
118
|
+
"purpose": "Describe what this service account does"
|
|
119
|
+
}
|
|
120
|
+
}
|
|
121
|
+
},
|
|
122
|
+
"static_ips": {
|
|
123
|
+
"_description": "GCP global and regional static IP addresses used for Ingress and services",
|
|
124
|
+
"_example": {
|
|
125
|
+
"my-service-ip": {
|
|
126
|
+
"name": "my-service-ip",
|
|
127
|
+
"address": "34.x.x.x",
|
|
128
|
+
"type": "global",
|
|
129
|
+
"purpose": "Ingress for my-service",
|
|
130
|
+
"dns_records": [
|
|
131
|
+
"my-service.example.com"
|
|
132
|
+
],
|
|
133
|
+
"ssl_certificates": "Active until YYYY-MM-DD",
|
|
134
|
+
"status": ""
|
|
135
|
+
}
|
|
136
|
+
}
|
|
137
|
+
}
|
|
138
|
+
}
|
|
139
|
+
}
|
|
@@ -0,0 +1,158 @@
|
|
|
1
|
+
{
|
|
2
|
+
"version": "4.0",
|
|
3
|
+
"description": "Context contracts v4: universal core sections + agent-specific ops sections + workspace_repos. Core sections are granted to every agent. Cloud-specific extensions live in cloud/{provider}.json.",
|
|
4
|
+
"core_sections": [
|
|
5
|
+
"project_identity",
|
|
6
|
+
"stack",
|
|
7
|
+
"git",
|
|
8
|
+
"environment",
|
|
9
|
+
"application_services",
|
|
10
|
+
"architecture_overview",
|
|
11
|
+
"operational_guidelines"
|
|
12
|
+
],
|
|
13
|
+
"section_schemas": {
|
|
14
|
+
"workspace_repos": {
|
|
15
|
+
"description": "Array of repositories in a multi-repo workspace",
|
|
16
|
+
"schema": {
|
|
17
|
+
"repos": [
|
|
18
|
+
{
|
|
19
|
+
"name": "string",
|
|
20
|
+
"path": "string (relative to workspace root)",
|
|
21
|
+
"remote_url": "string",
|
|
22
|
+
"platform": "string (github/gitlab/bitbucket)",
|
|
23
|
+
"role": "string (gitops/iac/platform/agent/library)",
|
|
24
|
+
"primary_language": "string"
|
|
25
|
+
}
|
|
26
|
+
]
|
|
27
|
+
}
|
|
28
|
+
}
|
|
29
|
+
},
|
|
30
|
+
"agents": {
|
|
31
|
+
"cloud-troubleshooter": {
|
|
32
|
+
"read": [
|
|
33
|
+
"project_identity",
|
|
34
|
+
"stack",
|
|
35
|
+
"git",
|
|
36
|
+
"environment",
|
|
37
|
+
"application_services",
|
|
38
|
+
"architecture_overview",
|
|
39
|
+
"operational_guidelines",
|
|
40
|
+
"infrastructure",
|
|
41
|
+
"orchestration",
|
|
42
|
+
"cluster_details",
|
|
43
|
+
"infrastructure_topology",
|
|
44
|
+
"terraform_infrastructure",
|
|
45
|
+
"gitops_configuration",
|
|
46
|
+
"monitoring_observability",
|
|
47
|
+
"workspace_repos"
|
|
48
|
+
],
|
|
49
|
+
"write": [
|
|
50
|
+
"cluster_details",
|
|
51
|
+
"infrastructure_topology",
|
|
52
|
+
"application_services",
|
|
53
|
+
"monitoring_observability",
|
|
54
|
+
"architecture_overview"
|
|
55
|
+
]
|
|
56
|
+
},
|
|
57
|
+
"gitops-operator": {
|
|
58
|
+
"read": [
|
|
59
|
+
"project_identity",
|
|
60
|
+
"stack",
|
|
61
|
+
"git",
|
|
62
|
+
"environment",
|
|
63
|
+
"application_services",
|
|
64
|
+
"architecture_overview",
|
|
65
|
+
"operational_guidelines",
|
|
66
|
+
"infrastructure",
|
|
67
|
+
"orchestration",
|
|
68
|
+
"gitops_configuration",
|
|
69
|
+
"cluster_details",
|
|
70
|
+
"workspace_repos"
|
|
71
|
+
],
|
|
72
|
+
"write": [
|
|
73
|
+
"gitops_configuration",
|
|
74
|
+
"cluster_details",
|
|
75
|
+
"application_services"
|
|
76
|
+
]
|
|
77
|
+
},
|
|
78
|
+
"terraform-architect": {
|
|
79
|
+
"read": [
|
|
80
|
+
"project_identity",
|
|
81
|
+
"stack",
|
|
82
|
+
"git",
|
|
83
|
+
"environment",
|
|
84
|
+
"application_services",
|
|
85
|
+
"architecture_overview",
|
|
86
|
+
"operational_guidelines",
|
|
87
|
+
"infrastructure",
|
|
88
|
+
"orchestration",
|
|
89
|
+
"terraform_infrastructure",
|
|
90
|
+
"infrastructure_topology",
|
|
91
|
+
"cluster_details",
|
|
92
|
+
"workspace_repos"
|
|
93
|
+
],
|
|
94
|
+
"write": [
|
|
95
|
+
"terraform_infrastructure",
|
|
96
|
+
"infrastructure_topology"
|
|
97
|
+
]
|
|
98
|
+
},
|
|
99
|
+
"developer": {
|
|
100
|
+
"read": [
|
|
101
|
+
"project_identity",
|
|
102
|
+
"stack",
|
|
103
|
+
"git",
|
|
104
|
+
"environment",
|
|
105
|
+
"application_services",
|
|
106
|
+
"architecture_overview",
|
|
107
|
+
"operational_guidelines",
|
|
108
|
+
"infrastructure",
|
|
109
|
+
"workspace_repos"
|
|
110
|
+
],
|
|
111
|
+
"write": [
|
|
112
|
+
"application_services",
|
|
113
|
+
"architecture_overview"
|
|
114
|
+
]
|
|
115
|
+
},
|
|
116
|
+
"gaia-planner": {
|
|
117
|
+
"read": [
|
|
118
|
+
"project_identity",
|
|
119
|
+
"stack",
|
|
120
|
+
"git",
|
|
121
|
+
"environment",
|
|
122
|
+
"application_services",
|
|
123
|
+
"architecture_overview",
|
|
124
|
+
"operational_guidelines",
|
|
125
|
+
"infrastructure",
|
|
126
|
+
"workspace_repos"
|
|
127
|
+
],
|
|
128
|
+
"write": []
|
|
129
|
+
},
|
|
130
|
+
"gaia-operator": {
|
|
131
|
+
"read": [
|
|
132
|
+
"project_identity",
|
|
133
|
+
"stack",
|
|
134
|
+
"git",
|
|
135
|
+
"environment",
|
|
136
|
+
"workspace_repos"
|
|
137
|
+
],
|
|
138
|
+
"write": [
|
|
139
|
+
"workspace_repos"
|
|
140
|
+
]
|
|
141
|
+
},
|
|
142
|
+
"gaia-system": {
|
|
143
|
+
"read": [
|
|
144
|
+
"project_identity",
|
|
145
|
+
"stack",
|
|
146
|
+
"git",
|
|
147
|
+
"environment",
|
|
148
|
+
"application_services",
|
|
149
|
+
"architecture_overview",
|
|
150
|
+
"operational_guidelines",
|
|
151
|
+
"infrastructure"
|
|
152
|
+
],
|
|
153
|
+
"write": [
|
|
154
|
+
"architecture_overview"
|
|
155
|
+
]
|
|
156
|
+
}
|
|
157
|
+
}
|
|
158
|
+
}
|
|
@@ -0,0 +1,81 @@
|
|
|
1
|
+
# Crons Persistence Schema
|
|
2
|
+
|
|
3
|
+
**Version:** 1
|
|
4
|
+
**File location:** `.claude/crons.json`
|
|
5
|
+
**Owner:** Gaia cron persistence system
|
|
6
|
+
|
|
7
|
+
---
|
|
8
|
+
|
|
9
|
+
## Schema
|
|
10
|
+
|
|
11
|
+
```json
|
|
12
|
+
{
|
|
13
|
+
"crons": [
|
|
14
|
+
{
|
|
15
|
+
"name": "check-email",
|
|
16
|
+
"interval_minutes": 180,
|
|
17
|
+
"prompt": "Revisa el correo y haz triage según gmail-triage skill",
|
|
18
|
+
"enabled": true,
|
|
19
|
+
"created": "2026-04-13T20:00:00Z",
|
|
20
|
+
"last_run": "2026-04-13T23:00:00Z"
|
|
21
|
+
}
|
|
22
|
+
],
|
|
23
|
+
"version": 1
|
|
24
|
+
}
|
|
25
|
+
```
|
|
26
|
+
|
|
27
|
+
## Field Definitions
|
|
28
|
+
|
|
29
|
+
| Field | Type | Required | Description |
|
|
30
|
+
|-------|------|----------|-------------|
|
|
31
|
+
| `name` | string | yes | Unique identifier for the cron. Used as the dedup key during restore. Must be URL-safe (alphanumeric, hyphens). |
|
|
32
|
+
| `interval_minutes` | integer | yes | How often the cron fires, in minutes. Mirrors CronCreate interval. |
|
|
33
|
+
| `prompt` | string | yes | The exact prompt sent to the orchestrator on each tick. |
|
|
34
|
+
| `enabled` | boolean | yes | If false, the cron is skipped during restore. Allows pausing without deletion. |
|
|
35
|
+
| `created` | string (ISO 8601 UTC) | yes | Timestamp when the cron was first created. Set once, never updated. |
|
|
36
|
+
| `last_run` | string (ISO 8601 UTC) or null | yes | Timestamp of the most recent execution. Null if the cron has never run. |
|
|
37
|
+
|
|
38
|
+
## Top-level Fields
|
|
39
|
+
|
|
40
|
+
| Field | Type | Description |
|
|
41
|
+
|-------|------|-------------|
|
|
42
|
+
| `crons` | array | The list of persisted cron entries. May be empty. |
|
|
43
|
+
| `version` | integer | Schema version. Currently 1. Increment when field semantics change. |
|
|
44
|
+
|
|
45
|
+
## Constraints
|
|
46
|
+
|
|
47
|
+
- `name` must be unique within the `crons` array. Duplicate names are invalid.
|
|
48
|
+
- `interval_minutes` must be a positive integer greater than 0.
|
|
49
|
+
- `last_run` is `null` when the cron has been created but has not yet fired.
|
|
50
|
+
|
|
51
|
+
## Example: Multiple Crons
|
|
52
|
+
|
|
53
|
+
```json
|
|
54
|
+
{
|
|
55
|
+
"crons": [
|
|
56
|
+
{
|
|
57
|
+
"name": "check-email",
|
|
58
|
+
"interval_minutes": 180,
|
|
59
|
+
"prompt": "Revisa el correo y haz triage según gmail-triage skill",
|
|
60
|
+
"enabled": true,
|
|
61
|
+
"created": "2026-04-13T20:00:00Z",
|
|
62
|
+
"last_run": "2026-04-13T23:00:00Z"
|
|
63
|
+
},
|
|
64
|
+
{
|
|
65
|
+
"name": "drift-monitor",
|
|
66
|
+
"interval_minutes": 60,
|
|
67
|
+
"prompt": "Check for infrastructure drift in the current project",
|
|
68
|
+
"enabled": false,
|
|
69
|
+
"created": "2026-04-10T10:00:00Z",
|
|
70
|
+
"last_run": null
|
|
71
|
+
}
|
|
72
|
+
],
|
|
73
|
+
"version": 1
|
|
74
|
+
}
|
|
75
|
+
```
|
|
76
|
+
|
|
77
|
+
## File Location
|
|
78
|
+
|
|
79
|
+
The file lives at `.claude/crons.json`, resolved relative to the active project root (same directory where `.claude/` is found). The path module `find_claude_dir()` from `hooks/modules/core/paths.py` provides the canonical `.claude/` path.
|
|
80
|
+
|
|
81
|
+
For projects that use `CLAUDE_PLUGIN_DATA`, the file lives under that data directory instead, consistent with how other persisted data (logs, sessions, grants) is stored.
|