@jaguilar87/gaia 5.0.0-rc1
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 +1212 -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 +237 -0
- package/agents/gaia-planner.md +53 -0
- package/agents/gaia-system.md +70 -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 +628 -0
- package/bin/cli/history.py +305 -0
- package/bin/cli/memory.py +464 -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 +816 -0
- package/bin/pre-publish-validate.js +610 -0
- package/bin/python-detect.js +60 -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 +421 -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 +237 -0
- package/dist/gaia-ops/agents/gaia-planner.md +53 -0
- package/dist/gaia-ops/agents/gaia-system.md +70 -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 +421 -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 +163 -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 +232 -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_start.py +81 -0
- package/dist/gaia-ops/hooks/stop_hook.py +82 -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 +154 -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 +182 -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 +82 -0
- package/dist/gaia-ops/skills/gaia-release/reference.md +102 -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/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 +360 -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 +84 -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 +232 -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_start.py +81 -0
- package/dist/gaia-security/hooks/stop_hook.py +82 -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 +232 -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_start.py +81 -0
- package/hooks/stop_hook.py +82 -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 +99 -0
- package/pyproject.toml +32 -0
- package/skills/README.md +154 -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 +182 -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 +82 -0
- package/skills/gaia-release/reference.md +102 -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/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 +360 -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/package.json
ADDED
|
@@ -0,0 +1,99 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "@jaguilar87/gaia",
|
|
3
|
+
"version": "5.0.0-rc1",
|
|
4
|
+
"description": "Multi-agent orchestration system for Claude Code - DevOps automation toolkit",
|
|
5
|
+
"main": "index.js",
|
|
6
|
+
"type": "module",
|
|
7
|
+
"bin": {
|
|
8
|
+
"gaia": "bin/gaia",
|
|
9
|
+
"gaia-doctor": "bin/gaia-doctor.js",
|
|
10
|
+
"gaia-skills-diagnose": "bin/gaia-skills-diagnose.js",
|
|
11
|
+
"gaia-cleanup": "bin/gaia-cleanup.js",
|
|
12
|
+
"gaia-uninstall": "bin/gaia-uninstall.js",
|
|
13
|
+
"gaia-metrics": "bin/gaia-metrics.js",
|
|
14
|
+
"gaia-review": "bin/gaia-review.js",
|
|
15
|
+
"gaia-status": "bin/gaia-status.js",
|
|
16
|
+
"gaia-history": "bin/gaia-history.js",
|
|
17
|
+
"gaia-update": "bin/gaia-update.js",
|
|
18
|
+
"gaia-scan": "bin/gaia-scan",
|
|
19
|
+
"gaia-evidence": "bin/gaia-evidence"
|
|
20
|
+
},
|
|
21
|
+
"keywords": [
|
|
22
|
+
"claude-code",
|
|
23
|
+
"devops",
|
|
24
|
+
"gitops",
|
|
25
|
+
"terraform",
|
|
26
|
+
"kubernetes",
|
|
27
|
+
"ai-agents",
|
|
28
|
+
"gaia",
|
|
29
|
+
"orchestration",
|
|
30
|
+
"automation"
|
|
31
|
+
],
|
|
32
|
+
"author": "Jorge Aguilar <jorge.aguilar87@gmail.com>",
|
|
33
|
+
"license": "MIT",
|
|
34
|
+
"private": false,
|
|
35
|
+
"repository": {
|
|
36
|
+
"type": "git",
|
|
37
|
+
"url": "git+https://github.com/metraton/gaia.git"
|
|
38
|
+
},
|
|
39
|
+
"homepage": "https://github.com/metraton/gaia#readme",
|
|
40
|
+
"bugs": {
|
|
41
|
+
"url": "https://github.com/metraton/gaia/issues",
|
|
42
|
+
"email": "jorge.aguilar87@gmail.com"
|
|
43
|
+
},
|
|
44
|
+
"files": [
|
|
45
|
+
".claude-plugin/",
|
|
46
|
+
"bin/",
|
|
47
|
+
"agents/",
|
|
48
|
+
"tools/",
|
|
49
|
+
"hooks/",
|
|
50
|
+
"commands/",
|
|
51
|
+
"templates/",
|
|
52
|
+
"config/",
|
|
53
|
+
"skills/",
|
|
54
|
+
"dist/",
|
|
55
|
+
"git-hooks/",
|
|
56
|
+
"README.md",
|
|
57
|
+
"INSTALL.md",
|
|
58
|
+
"CHANGELOG.md",
|
|
59
|
+
"ARCHITECTURE.md",
|
|
60
|
+
"CONTRIBUTING.md",
|
|
61
|
+
"SECURITY.md",
|
|
62
|
+
"CODE_OF_CONDUCT.md",
|
|
63
|
+
"pyproject.toml",
|
|
64
|
+
"index.js"
|
|
65
|
+
],
|
|
66
|
+
"scripts": {
|
|
67
|
+
"test": "python3 -m pytest tests/ -v --ignore=tests/layer2_llm_evaluation --ignore=tests/layer3_e2e",
|
|
68
|
+
"test:layer1": "python3 -m pytest tests/ -v --ignore=tests/layer2_llm_evaluation --ignore=tests/layer3_e2e",
|
|
69
|
+
"test:layer2": "python3 -m pytest tests/layer2_llm_evaluation/ -v -m llm",
|
|
70
|
+
"test:layer3": "python3 -m pytest tests/layer3_e2e/ -v -m e2e",
|
|
71
|
+
"test:all": "python3 -m pytest tests/ -v -m ''",
|
|
72
|
+
"test:promptfoo": "npx promptfoo eval --config tests/promptfoo.yaml",
|
|
73
|
+
"lint": "eslint .",
|
|
74
|
+
"clean:dist": "rm -rf dist/",
|
|
75
|
+
"build:plugins": "npm run clean:dist && python3 scripts/build-plugin.py gaia-security && python3 scripts/build-plugin.py gaia-ops",
|
|
76
|
+
"clean": "find . -type d -name '__pycache__' -exec rm -rf {} + 2>/dev/null || true",
|
|
77
|
+
"pre-publish": "node bin/pre-publish-validate.js",
|
|
78
|
+
"pre-publish:dry": "node bin/pre-publish-validate.js --dry-run",
|
|
79
|
+
"pre-publish:validate": "node bin/pre-publish-validate.js --validate-only",
|
|
80
|
+
"prepack": "npm run clean",
|
|
81
|
+
"prepublishOnly": "npm run build:plugins && node bin/pre-publish-validate.js",
|
|
82
|
+
"postinstall": "node bin/gaia-update.js",
|
|
83
|
+
"preuninstall": "node bin/gaia-cleanup.js"
|
|
84
|
+
},
|
|
85
|
+
"_postinstall_note": "postinstall: settings.json replaced (hooks only), permissions merged into settings.local.json (union, user config preserved)",
|
|
86
|
+
"dependencies": {
|
|
87
|
+
"chalk": "^5.3.0",
|
|
88
|
+
"ora": "^7.0.1",
|
|
89
|
+
"prompts": "^2.4.2",
|
|
90
|
+
"yargs": "^17.7.2"
|
|
91
|
+
},
|
|
92
|
+
"devDependencies": {
|
|
93
|
+
"eslint": "^8.50.0"
|
|
94
|
+
},
|
|
95
|
+
"engines": {
|
|
96
|
+
"node": ">=18.0.0",
|
|
97
|
+
"python": ">=3.9"
|
|
98
|
+
}
|
|
99
|
+
}
|
package/pyproject.toml
ADDED
|
@@ -0,0 +1,32 @@
|
|
|
1
|
+
[project]
|
|
2
|
+
name = "gaia"
|
|
3
|
+
version = "5.0.0-rc1"
|
|
4
|
+
description = "Multi-agent orchestration system for Claude Code - DevOps automation toolkit"
|
|
5
|
+
requires-python = ">=3.9"
|
|
6
|
+
license = {text = "MIT"}
|
|
7
|
+
authors = [
|
|
8
|
+
{name = "Jorge Aguilar", email = "jorge.aguilar87@gmail.com"},
|
|
9
|
+
]
|
|
10
|
+
readme = "README.md"
|
|
11
|
+
|
|
12
|
+
[project.optional-dependencies]
|
|
13
|
+
dev = [
|
|
14
|
+
"pytest>=7.0",
|
|
15
|
+
"ruff>=0.4.0",
|
|
16
|
+
]
|
|
17
|
+
|
|
18
|
+
[tool.ruff]
|
|
19
|
+
target-version = "py39"
|
|
20
|
+
line-length = 120
|
|
21
|
+
|
|
22
|
+
[tool.ruff.lint]
|
|
23
|
+
select = ["E", "F", "W", "I"]
|
|
24
|
+
|
|
25
|
+
[tool.ruff.format]
|
|
26
|
+
quote-style = "double"
|
|
27
|
+
|
|
28
|
+
[tool.pytest.ini_options]
|
|
29
|
+
testpaths = ["tests", "tools/scan/tests"]
|
|
30
|
+
markers = [
|
|
31
|
+
"parity: JS-Python CLI parity comparison tests",
|
|
32
|
+
]
|
package/skills/README.md
ADDED
|
@@ -0,0 +1,154 @@
|
|
|
1
|
+
# Skills
|
|
2
|
+
|
|
3
|
+
Skills are the procedural knowledge layer of Gaia. Where agents carry identity — their scope, their tone, their domain — skills carry process: how to classify a command, how to format a response contract, how to approach an investigation. An agent without skills knows who it is but not how to operate. Skills bridge that gap by injecting step-by-step protocols that the agent follows during its session.
|
|
4
|
+
|
|
5
|
+
Each skill lives in its own directory under `skills/<name>/` and contains at minimum a `SKILL.md` file. That file is what gets injected. Supporting material (`reference.md`, `examples.md`) lives in the same directory but is read on-demand — the agent pulls it from disk when needed rather than receiving it at startup. This keeps startup context lean while making full documentation accessible.
|
|
6
|
+
|
|
7
|
+
Skills are not shared via inheritance or imports — they are text injected verbatim into the agent's context window. The size limit for injected skills is roughly 100 lines. If a skill grows beyond that, the detailed content moves to `reference.md` and the main `SKILL.md` becomes a compact index pointing there.
|
|
8
|
+
|
|
9
|
+
The assignment matrix below shows which skills each agent receives. The first two — `agent-protocol` and `security-tiers` — appear on every agent. They are the non-negotiables: every agent must understand the response contract and the tier system.
|
|
10
|
+
|
|
11
|
+
## Cuándo se activa
|
|
12
|
+
|
|
13
|
+
Skills reach an agent through two distinct routes, and understanding both matters when troubleshooting why a skill is or is not present in a session.
|
|
14
|
+
|
|
15
|
+
**Route 1 — Startup injection via frontmatter:**
|
|
16
|
+
|
|
17
|
+
```
|
|
18
|
+
Orchestrator dispatches agent
|
|
19
|
+
|
|
|
20
|
+
pre_tool_use.py intercepts the Task/Agent tool call
|
|
21
|
+
|
|
|
22
|
+
Reads agents/<name>.md frontmatter -> skills: list
|
|
23
|
+
|
|
|
24
|
+
For each skill in the list:
|
|
25
|
+
reads skills/<skill>/SKILL.md from disk
|
|
26
|
+
appends content to agent's system context
|
|
27
|
+
|
|
|
28
|
+
Agent starts with all listed skills already in context
|
|
29
|
+
```
|
|
30
|
+
|
|
31
|
+
**Route 2 — On-demand via Skill tool:**
|
|
32
|
+
|
|
33
|
+
```
|
|
34
|
+
Agent is running and encounters a situation
|
|
35
|
+
requiring a workflow skill (e.g. approval, execution, git-conventions)
|
|
36
|
+
|
|
|
37
|
+
Agent calls Skill tool: Skill("request-approval")
|
|
38
|
+
|
|
|
39
|
+
Claude Code reads skills/request-approval/SKILL.md from disk
|
|
40
|
+
|
|
|
41
|
+
Content is injected into the agent's active context window
|
|
42
|
+
|
|
|
43
|
+
Agent follows the newly loaded protocol
|
|
44
|
+
```
|
|
45
|
+
|
|
46
|
+
Orchestrator-level skills (`agent-response`, `orchestrator-approval`) are always Route 2 — they are never in a frontmatter list, only loaded when the orchestrator needs to interpret a specific situation.
|
|
47
|
+
|
|
48
|
+
## Qué hay aquí
|
|
49
|
+
|
|
50
|
+
```
|
|
51
|
+
skills/
|
|
52
|
+
├── agent-protocol/ # Response contract format, state machine, error handling
|
|
53
|
+
├── agent-response/ # Orchestrator: interpret agent json:contract responses
|
|
54
|
+
├── agentic-loop/ # Iterative metric-driven improvement loop (on-demand injection)
|
|
55
|
+
├── blog-writing/ # Blog article writing and publishing for metraton.github.io
|
|
56
|
+
├── brief-spec/ # Brief and spec creation for features before planning
|
|
57
|
+
├── command-execution/ # Defensive Bash execution, no-pipes discipline
|
|
58
|
+
│ └── reference.md
|
|
59
|
+
├── context-updater/ # CONTEXT_UPDATE format and writable sections contract
|
|
60
|
+
│ └── examples.md
|
|
61
|
+
├── developer-patterns/ # Application code patterns (Node.js, Python)
|
|
62
|
+
├── execution/ # Post-approval execution discipline
|
|
63
|
+
├── fast-queries/ # Quick diagnostic scripts for cloud/system state
|
|
64
|
+
├── gaia-compact/ # Orchestrator: structured /compact prompt with preservation contract
|
|
65
|
+
├── gaia-patterns/ # Gaia component patterns: hooks, agents, routing, CLI
|
|
66
|
+
│ └── reference.md
|
|
67
|
+
├── gaia-planner/ # Feature planning, briefs, task decomposition
|
|
68
|
+
├── gaia-release/ # Gaia release pipeline: live, dry-run, beta, stable
|
|
69
|
+
├── gaia-self-check/ # Validate internal consistency of the .claude/ installation
|
|
70
|
+
├── gaia-verify/ # Verify a Gaia installation across delivery surfaces
|
|
71
|
+
├── git-conventions/ # Conventional Commits (on-demand workflow skill)
|
|
72
|
+
├── gitops-patterns/ # GitOps/Flux/Kubernetes patterns
|
|
73
|
+
│ └── reference.md
|
|
74
|
+
├── gmail-policy/ # Gmail domain policy (label-only, no delete)
|
|
75
|
+
├── gmail-triage/ # Interactive Gmail inbox triage
|
|
76
|
+
├── gws-setup/ # Google Workspace CLI (gws) installation and configuration
|
|
77
|
+
├── investigation/ # Diagnosis methodology and pattern analysis
|
|
78
|
+
├── memory-curation/ # Curate MEMORY.md index and topic files
|
|
79
|
+
├── memory-search/ # Query episodic memory via `gaia memory` CLI
|
|
80
|
+
├── orchestrator-approval/ # T3 approval presentation for orchestrator
|
|
81
|
+
├── pending-approvals/ # Present and manage pending approval requests
|
|
82
|
+
├── readme-writing/ # How to write READMEs for Gaia component folders
|
|
83
|
+
├── request-approval/ # T3 approval-request workflow (attempt first, emit APPROVAL_REQUEST)
|
|
84
|
+
│ ├── reference.md
|
|
85
|
+
│ └── examples.md
|
|
86
|
+
├── schedule-task/ # Dispatch parameter extraction and prompt templates
|
|
87
|
+
├── security-tiers/ # T0-T3 classification + hook enforcement model
|
|
88
|
+
│ └── reference.md
|
|
89
|
+
├── skill-creation/ # How to design and write new skills
|
|
90
|
+
├── terraform-patterns/ # Terraform/Terragrunt patterns
|
|
91
|
+
│ └── reference.md
|
|
92
|
+
└── reference.md # Cross-skill reference index
|
|
93
|
+
```
|
|
94
|
+
|
|
95
|
+
## Convenciones
|
|
96
|
+
|
|
97
|
+
**Skill assignment matrix:**
|
|
98
|
+
|
|
99
|
+
| Agent | Core Skills | Domain Skills |
|
|
100
|
+
|-------|-------------|---------------|
|
|
101
|
+
| cloud-troubleshooter | agent-protocol, security-tiers, investigation, command-execution | context-updater, fast-queries |
|
|
102
|
+
| terraform-architect | agent-protocol, security-tiers, investigation, command-execution, terraform-patterns | context-updater, fast-queries |
|
|
103
|
+
| gitops-operator | agent-protocol, security-tiers, investigation, command-execution, gitops-patterns | context-updater, fast-queries |
|
|
104
|
+
| developer | agent-protocol, security-tiers, investigation, command-execution, developer-patterns | context-updater, fast-queries |
|
|
105
|
+
| gaia-system | agent-protocol, security-tiers, command-execution, gaia-patterns, gaia-release, skill-creation | gaia-verify |
|
|
106
|
+
| gaia-planner | agent-protocol, security-tiers | gaia-planner |
|
|
107
|
+
| gaia-operator | agent-protocol, security-tiers, command-execution, context-updater, memory-curation, memory-search, gmail-triage, gws-setup | blog-writing |
|
|
108
|
+
|
|
109
|
+
Orchestrator skills (loaded on-demand via Skill tool, not assigned in frontmatter):
|
|
110
|
+
- `agent-response` — contract status interpretation and presentation
|
|
111
|
+
- `orchestrator-approval` — T3 approval presentation and grant activation
|
|
112
|
+
- `gaia-compact` — structured `/compact` invocation with a six-category preservation prompt
|
|
113
|
+
|
|
114
|
+
Workflow skills (on-demand injection, not in any agent frontmatter):
|
|
115
|
+
- `agentic-loop` — iterative metric-driven improvement; injected by orchestrator text prompt, `user-invocable: false`
|
|
116
|
+
- `brief-spec` — brief and spec creation; loaded on demand by orchestrator
|
|
117
|
+
- `execution` — post-approval execution discipline
|
|
118
|
+
- `git-conventions` — Conventional Commits format
|
|
119
|
+
- `pending-approvals` — present and resolve pending approval requests
|
|
120
|
+
- `request-approval` — T3 approval-request workflow
|
|
121
|
+
- `schedule-task` — dispatch parameter templates
|
|
122
|
+
|
|
123
|
+
**Skill types:**
|
|
124
|
+
|
|
125
|
+
| Type | Injection | Examples |
|
|
126
|
+
|------|-----------|---------|
|
|
127
|
+
| Core | Always via `skills:` frontmatter | agent-protocol, security-tiers |
|
|
128
|
+
| Common | Most agents via `skills:` frontmatter | command-execution, context-updater |
|
|
129
|
+
| Domain | Per-agent via `skills:` frontmatter | terraform-patterns, gaia-patterns |
|
|
130
|
+
| Workflow | On-demand (agent reads from disk) | request-approval, execution, git-conventions |
|
|
131
|
+
| Orchestrator | On-demand via Skill tool | agent-response, orchestrator-approval |
|
|
132
|
+
|
|
133
|
+
**SKILL.md format:**
|
|
134
|
+
|
|
135
|
+
```yaml
|
|
136
|
+
---
|
|
137
|
+
name: skill-name
|
|
138
|
+
description: When Claude should load and follow this skill
|
|
139
|
+
metadata:
|
|
140
|
+
user-invocable: false
|
|
141
|
+
type: core
|
|
142
|
+
---
|
|
143
|
+
|
|
144
|
+
# Skill Content
|
|
145
|
+
```
|
|
146
|
+
|
|
147
|
+
**Line budget:** Keep injected `SKILL.md` under 100 lines. Move details to `reference.md` (read on-demand). Supporting examples go in `examples.md`.
|
|
148
|
+
|
|
149
|
+
## Ver también
|
|
150
|
+
|
|
151
|
+
- [`agents/README.md`](../agents/README.md) — agent frontmatter and skills: field
|
|
152
|
+
- [`hooks/pre_tool_use.py`](../hooks/pre_tool_use.py) — where skill injection happens at runtime
|
|
153
|
+
- [`skills/skill-creation/SKILL.md`](./skill-creation/SKILL.md) — how to design a new skill
|
|
154
|
+
- [`skills/gaia-patterns/reference.md`](./gaia-patterns/reference.md) — full component inventory
|
|
@@ -0,0 +1,93 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: agent-protocol
|
|
3
|
+
description: Use when producing any agent response
|
|
4
|
+
metadata:
|
|
5
|
+
user-invocable: false
|
|
6
|
+
type: protocol
|
|
7
|
+
---
|
|
8
|
+
|
|
9
|
+
# Agent Protocol
|
|
10
|
+
|
|
11
|
+
This protocol governs REPORTING FORMAT, not tool access. All agents may use their declared tools during any phase.
|
|
12
|
+
|
|
13
|
+
## Response Contract
|
|
14
|
+
|
|
15
|
+
Every response MUST end with a single fenced `json:contract` block.
|
|
16
|
+
|
|
17
|
+
```json:contract
|
|
18
|
+
{
|
|
19
|
+
"agent_status": {
|
|
20
|
+
"plan_status": "<STATUS>",
|
|
21
|
+
"agent_id": "<a + 5+ hex chars>",
|
|
22
|
+
"pending_steps": [],
|
|
23
|
+
"next_action": "done"
|
|
24
|
+
},
|
|
25
|
+
"evidence_report": {
|
|
26
|
+
"patterns_checked": [],
|
|
27
|
+
"files_checked": [],
|
|
28
|
+
"commands_run": [],
|
|
29
|
+
"key_outputs": [],
|
|
30
|
+
"verbatim_outputs": [],
|
|
31
|
+
"cross_layer_impacts": [],
|
|
32
|
+
"open_gaps": [],
|
|
33
|
+
"verification": null
|
|
34
|
+
},
|
|
35
|
+
"consolidation_report": null,
|
|
36
|
+
"approval_request": null
|
|
37
|
+
}
|
|
38
|
+
```
|
|
39
|
+
|
|
40
|
+
**agent_status** -- `plan_status` (one of 5 states below), `agent_id` (generate once, reuse), `pending_steps` (`[]` when done), `next_action` (`"done"` or what's next).
|
|
41
|
+
|
|
42
|
+
**evidence_report** -- Use `[]` when not applicable, 1-3 items each. `key_outputs`: what changed. `verbatim_outputs`: literal output, truncate ~100 lines. `cross_layer_impacts`: adjacent surfaces. `open_gaps`: what remains unverified. `verification`: **required when COMPLETE** (see Verification Gate), `null` otherwise.
|
|
43
|
+
|
|
44
|
+
**consolidation_report** -- Required when `consolidation_required` or `multi_surface` is true. Otherwise `null`. Fields: `ownership_assessment`, `confirmed_findings`, `suspected_findings`, `conflicts`, `next_best_agent`. See `examples.md`.
|
|
45
|
+
|
|
46
|
+
**approval_request** -- Required when APPROVAL_REQUEST. Fields: `operation`, `exact_content`, `scope`, `risk_level`, `rollback`, `verification`. On `[T3_BLOCKED]` with `approval_id`: set APPROVAL_REQUEST, include `approval_id`, wait. See `examples.md`.
|
|
47
|
+
|
|
48
|
+
## Universal Execution Loop
|
|
49
|
+
|
|
50
|
+
Each increment: **INVESTIGATE** (read, search) -> **PLAN** (propose; APPROVAL_REQUEST if T3) -> **EXECUTE** (write, run) -> **VERIFY** (confirm results) -> **COMPLETE** or loop back on failure. Decompose large tasks into 2-5 increments; each is one action paired with one verification. Every increment ends verified. Fix before moving on -- compounding failures is exponential.
|
|
51
|
+
|
|
52
|
+
## Verification Gate
|
|
53
|
+
|
|
54
|
+
An agent cannot set `plan_status: "COMPLETE"` without a `verification` object in `evidence_report`. When verification fails, loop back to EXECUTE -- do not complete.
|
|
55
|
+
|
|
56
|
+
```json
|
|
57
|
+
"verification": {
|
|
58
|
+
"method": "test | dry-run | metric | self-review",
|
|
59
|
+
"checks": ["what was checked"],
|
|
60
|
+
"result": "pass | fail",
|
|
61
|
+
"details": "concrete evidence"
|
|
62
|
+
}
|
|
63
|
+
```
|
|
64
|
+
|
|
65
|
+
Choose the method that fits your domain. Infrastructure: `dry-run` (terraform plan). Code: `test` (pytest, lint). Gaia skills: `self-review` (line count, frontmatter). Email: `metric` (count match). Git/file ops: `test` or `self-review`. When no automated check exists, `self-review` is the minimum: state what you checked and what you observed. For full examples see `examples.md`.
|
|
66
|
+
|
|
67
|
+
## State Machine
|
|
68
|
+
|
|
69
|
+
| Status | Meaning |
|
|
70
|
+
|--------|---------|
|
|
71
|
+
| `IN_PROGRESS` | Investigating, planning, or executing work |
|
|
72
|
+
| `APPROVAL_REQUEST` | Emitted when a hook blocks a specific mutative command -- agent requests user approval for the exact command via `approval_request` |
|
|
73
|
+
| `COMPLETE` | Verified -- `verification.result` is `"pass"` |
|
|
74
|
+
| `BLOCKED` | Cannot proceed -- escalated |
|
|
75
|
+
| `NEEDS_INPUT` | Missing information from user |
|
|
76
|
+
|
|
77
|
+
### Transitions
|
|
78
|
+
|
|
79
|
+
```
|
|
80
|
+
IN_PROGRESS -> COMPLETE (requires verification evidence)
|
|
81
|
+
IN_PROGRESS -> APPROVAL_REQUEST -> IN_PROGRESS -> COMPLETE
|
|
82
|
+
IN_PROGRESS -> BLOCKED | NEEDS_INPUT (any point)
|
|
83
|
+
IN_PROGRESS -> IN_PROGRESS (retry or verify-fail loop, max 2)
|
|
84
|
+
```
|
|
85
|
+
|
|
86
|
+
## Error Handling
|
|
87
|
+
|
|
88
|
+
| Type | Action | Status |
|
|
89
|
+
|------|--------|--------|
|
|
90
|
+
| Recoverable | Fix and retry (max 2) | `IN_PROGRESS` |
|
|
91
|
+
| Blocker | Log details, list solutions | `BLOCKED` |
|
|
92
|
+
| Ambiguous | List options | `NEEDS_INPUT` |
|
|
93
|
+
| Contract repair | Reissue `json:contract`, skip re-investigation (max 2) | `IN_PROGRESS` |
|
|
@@ -0,0 +1,223 @@
|
|
|
1
|
+
# Agent Protocol -- Status-Specific Examples
|
|
2
|
+
|
|
3
|
+
Read on-demand when constructing a `json:contract` block.
|
|
4
|
+
See `SKILL.md` for the schema definition and field rules.
|
|
5
|
+
|
|
6
|
+
## COMPLETE (verified result)
|
|
7
|
+
|
|
8
|
+
```json:contract
|
|
9
|
+
{
|
|
10
|
+
"agent_status": {
|
|
11
|
+
"plan_status": "COMPLETE",
|
|
12
|
+
"agent_id": "ab7e4d2",
|
|
13
|
+
"pending_steps": [],
|
|
14
|
+
"next_action": "done"
|
|
15
|
+
},
|
|
16
|
+
"evidence_report": {
|
|
17
|
+
"patterns_checked": ["existing HelmRelease naming convention in flux/apps/"],
|
|
18
|
+
"files_checked": ["flux/apps/qxo-api/helmrelease.yaml"],
|
|
19
|
+
"commands_run": ["kubectl get hr -n qxo -> all reconciled"],
|
|
20
|
+
"key_outputs": ["All 12 HelmReleases healthy, no drift detected"],
|
|
21
|
+
"verbatim_outputs": [],
|
|
22
|
+
"cross_layer_impacts": [],
|
|
23
|
+
"open_gaps": [],
|
|
24
|
+
"verification": {
|
|
25
|
+
"method": "test",
|
|
26
|
+
"checks": ["kubectl get hr -n qxo shows all reconciled", "no suspended or failed HelmReleases"],
|
|
27
|
+
"result": "pass",
|
|
28
|
+
"details": "12/12 HelmReleases Ready=True. Last reconciled within 5m."
|
|
29
|
+
}
|
|
30
|
+
},
|
|
31
|
+
"consolidation_report": null,
|
|
32
|
+
"approval_request": null
|
|
33
|
+
}
|
|
34
|
+
```
|
|
35
|
+
|
|
36
|
+
## BLOCKED (cannot proceed)
|
|
37
|
+
|
|
38
|
+
```json:contract
|
|
39
|
+
{
|
|
40
|
+
"agent_status": {
|
|
41
|
+
"plan_status": "BLOCKED",
|
|
42
|
+
"agent_id": "ac3a1f9",
|
|
43
|
+
"pending_steps": ["validate IAM binding", "apply terraform change"],
|
|
44
|
+
"next_action": "User must grant roles/container.admin to SA"
|
|
45
|
+
},
|
|
46
|
+
"evidence_report": {
|
|
47
|
+
"patterns_checked": ["SA binding pattern in terraform/iam/"],
|
|
48
|
+
"files_checked": ["terraform/iam/main.tf", "terraform/iam/variables.tf"],
|
|
49
|
+
"commands_run": ["gcloud iam service-accounts get-iam-policy sa@proj.iam -> missing binding"],
|
|
50
|
+
"key_outputs": ["SA lacks roles/container.admin required for node pool ops"],
|
|
51
|
+
"verbatim_outputs": ["gcloud iam service-accounts get-iam-policy sa@proj.iam:\n```\nbindings: []\n```"],
|
|
52
|
+
"cross_layer_impacts": ["GKE node pool scaling depends on this SA"],
|
|
53
|
+
"open_gaps": ["Whether SA should get role directly or via workload identity"],
|
|
54
|
+
"verification": null
|
|
55
|
+
},
|
|
56
|
+
"consolidation_report": null,
|
|
57
|
+
"approval_request": null
|
|
58
|
+
}
|
|
59
|
+
```
|
|
60
|
+
|
|
61
|
+
## NEEDS_INPUT (missing information)
|
|
62
|
+
|
|
63
|
+
```json:contract
|
|
64
|
+
{
|
|
65
|
+
"agent_status": {
|
|
66
|
+
"plan_status": "NEEDS_INPUT",
|
|
67
|
+
"agent_id": "ad9f2b1",
|
|
68
|
+
"pending_steps": ["create namespace manifest", "configure HelmRelease"],
|
|
69
|
+
"next_action": "User must choose: Option A (shared namespace) or Option B (dedicated namespace)"
|
|
70
|
+
},
|
|
71
|
+
"evidence_report": {
|
|
72
|
+
"patterns_checked": ["namespace conventions in flux/clusters/"],
|
|
73
|
+
"files_checked": ["flux/clusters/dev/namespaces/"],
|
|
74
|
+
"commands_run": [],
|
|
75
|
+
"key_outputs": ["Both patterns exist in codebase -- no single convention"],
|
|
76
|
+
"verbatim_outputs": [],
|
|
77
|
+
"cross_layer_impacts": ["Network policies differ per pattern"],
|
|
78
|
+
"open_gaps": ["User preference for namespace isolation"],
|
|
79
|
+
"verification": null
|
|
80
|
+
},
|
|
81
|
+
"consolidation_report": null,
|
|
82
|
+
"approval_request": null
|
|
83
|
+
}
|
|
84
|
+
```
|
|
85
|
+
|
|
86
|
+
## APPROVAL_REQUEST (hook blocked T3 command or plan ready for user feedback)
|
|
87
|
+
|
|
88
|
+
```json:contract
|
|
89
|
+
{
|
|
90
|
+
"agent_status": {
|
|
91
|
+
"plan_status": "APPROVAL_REQUEST",
|
|
92
|
+
"agent_id": "ae5c8a3",
|
|
93
|
+
"pending_steps": ["execute terraform apply", "verify state"],
|
|
94
|
+
"next_action": "Awaiting user feedback on terraform apply plan"
|
|
95
|
+
},
|
|
96
|
+
"evidence_report": {
|
|
97
|
+
"patterns_checked": ["existing bucket naming in terraform/gcs/"],
|
|
98
|
+
"files_checked": ["terraform/gcs/main.tf", "terraform/gcs/variables.tf"],
|
|
99
|
+
"commands_run": ["terraform plan -out=tfplan -> 1 to add, 0 to change, 0 to destroy"],
|
|
100
|
+
"key_outputs": ["Plan adds 1 GCS bucket with standard config"],
|
|
101
|
+
"verbatim_outputs": ["terraform plan:\n```\n+ google_storage_bucket.events\n name: qxo-events-dev\n location: us-east4\n```"],
|
|
102
|
+
"cross_layer_impacts": ["Flux ExternalSecret must reference new bucket"],
|
|
103
|
+
"open_gaps": [],
|
|
104
|
+
"verification": null
|
|
105
|
+
},
|
|
106
|
+
"consolidation_report": null,
|
|
107
|
+
"approval_request": {
|
|
108
|
+
"operation": "Create GCS bucket qxo-events-dev",
|
|
109
|
+
"exact_content": "terraform apply -auto-approve",
|
|
110
|
+
"scope": "terraform/gcs/main.tf, GCS bucket in us-east4",
|
|
111
|
+
"risk_level": "MEDIUM",
|
|
112
|
+
"rollback": "terraform destroy -target=google_storage_bucket.events",
|
|
113
|
+
"verification": "gcloud storage buckets describe gs://qxo-events-dev"
|
|
114
|
+
}
|
|
115
|
+
}
|
|
116
|
+
```
|
|
117
|
+
|
|
118
|
+
## APPROVAL_REQUEST with approval_id (hook blocked T3 command)
|
|
119
|
+
|
|
120
|
+
```json:contract
|
|
121
|
+
{
|
|
122
|
+
"agent_status": {
|
|
123
|
+
"plan_status": "APPROVAL_REQUEST",
|
|
124
|
+
"agent_id": "af1d9b7",
|
|
125
|
+
"pending_steps": ["execute git push", "verify Flux reconciliation"],
|
|
126
|
+
"next_action": "Hook blocked git push -- awaiting user approval"
|
|
127
|
+
},
|
|
128
|
+
"evidence_report": {
|
|
129
|
+
"patterns_checked": ["git branch naming in flux/clusters/"],
|
|
130
|
+
"files_checked": ["flux/apps/qxo-api/helmrelease.yaml"],
|
|
131
|
+
"commands_run": ["git diff HEAD -> 1 file changed", "git push origin main -> BLOCKED by hook"],
|
|
132
|
+
"key_outputs": ["Push blocked by security hook, approval_id issued"],
|
|
133
|
+
"verbatim_outputs": ["[T3_BLOCKED] MUTATIVE operation requires user approval. approval_id: a1b2c3..."],
|
|
134
|
+
"cross_layer_impacts": ["Flux will reconcile HelmRelease on push"],
|
|
135
|
+
"open_gaps": [],
|
|
136
|
+
"verification": null
|
|
137
|
+
},
|
|
138
|
+
"consolidation_report": null,
|
|
139
|
+
"approval_request": {
|
|
140
|
+
"operation": "Push HelmRelease changes to main",
|
|
141
|
+
"exact_content": "git push origin main",
|
|
142
|
+
"scope": "flux/apps/qxo-api/helmrelease.yaml",
|
|
143
|
+
"risk_level": "MEDIUM",
|
|
144
|
+
"rollback": "git revert HEAD && git push",
|
|
145
|
+
"verification": "flux get hr -n qxo -> reconciled",
|
|
146
|
+
"approval_id": "a1b2c3d4e5f6a7b8c9d0e1f2a3b4c5d6"
|
|
147
|
+
}
|
|
148
|
+
}
|
|
149
|
+
```
|
|
150
|
+
|
|
151
|
+
## With Consolidation (multi-surface task)
|
|
152
|
+
|
|
153
|
+
```json:contract
|
|
154
|
+
{
|
|
155
|
+
"agent_status": {
|
|
156
|
+
"plan_status": "COMPLETE",
|
|
157
|
+
"agent_id": "af4b2e8",
|
|
158
|
+
"pending_steps": [],
|
|
159
|
+
"next_action": "done"
|
|
160
|
+
},
|
|
161
|
+
"evidence_report": {
|
|
162
|
+
"patterns_checked": ["terraform module structure in terraform/modules/"],
|
|
163
|
+
"files_checked": ["terraform/modules/gke/main.tf", "flux/clusters/dev/kustomization.yaml"],
|
|
164
|
+
"commands_run": ["terragrunt plan -chdir=/abs/path -> no changes"],
|
|
165
|
+
"key_outputs": ["Terraform state matches code; Flux kustomization references correct cluster"],
|
|
166
|
+
"verbatim_outputs": [],
|
|
167
|
+
"cross_layer_impacts": ["Flux depends on GKE node pool count from terraform output"],
|
|
168
|
+
"open_gaps": ["HPA config in flux not verified"],
|
|
169
|
+
"verification": {
|
|
170
|
+
"method": "dry-run",
|
|
171
|
+
"checks": ["terragrunt plan shows no changes", "kustomization references match cluster name"],
|
|
172
|
+
"result": "pass",
|
|
173
|
+
"details": "Plan: 0 to add, 0 to change, 0 to destroy. Kustomization sourceRef matches cluster af4b2e8."
|
|
174
|
+
}
|
|
175
|
+
},
|
|
176
|
+
"consolidation_report": {
|
|
177
|
+
"ownership_assessment": "cross_surface_dependency",
|
|
178
|
+
"confirmed_findings": ["GKE cluster config matches terraform code", "Node pool count is 3 in both plan and live"],
|
|
179
|
+
"suspected_findings": ["HPA max replicas may exceed node capacity"],
|
|
180
|
+
"conflicts": [],
|
|
181
|
+
"open_gaps": ["HPA config in flux not verified -- gitops-operator should check"],
|
|
182
|
+
"next_best_agent": "gitops-operator"
|
|
183
|
+
},
|
|
184
|
+
"approval_request": null
|
|
185
|
+
}
|
|
186
|
+
```
|
|
187
|
+
|
|
188
|
+
## COMPLETE with task decomposition (multi-increment)
|
|
189
|
+
|
|
190
|
+
Shows a skill-creation task where each subtask was verified individually.
|
|
191
|
+
|
|
192
|
+
```json:contract
|
|
193
|
+
{
|
|
194
|
+
"agent_status": {
|
|
195
|
+
"plan_status": "COMPLETE",
|
|
196
|
+
"agent_id": "a9c4f71",
|
|
197
|
+
"pending_steps": [],
|
|
198
|
+
"next_action": "done"
|
|
199
|
+
},
|
|
200
|
+
"evidence_report": {
|
|
201
|
+
"patterns_checked": ["existing skill structure in skills/", "skill-creation standards"],
|
|
202
|
+
"files_checked": ["skills/new-skill/SKILL.md", "skills/new-skill/reference.md"],
|
|
203
|
+
"commands_run": [],
|
|
204
|
+
"key_outputs": ["Created new-skill with SKILL.md (87 lines) and reference.md"],
|
|
205
|
+
"verbatim_outputs": [],
|
|
206
|
+
"cross_layer_impacts": ["Agents using this skill need frontmatter update"],
|
|
207
|
+
"open_gaps": [],
|
|
208
|
+
"verification": {
|
|
209
|
+
"method": "self-review",
|
|
210
|
+
"checks": [
|
|
211
|
+
"SKILL.md line count: 87 (under 100 budget)",
|
|
212
|
+
"Frontmatter has name, description, metadata fields",
|
|
213
|
+
"Description contains triggering conditions only",
|
|
214
|
+
"Type-appropriate structure (domain: conventions, examples, key rules)"
|
|
215
|
+
],
|
|
216
|
+
"result": "pass",
|
|
217
|
+
"details": "87 lines. Frontmatter valid. Description triggers on domain conditions. Structure matches domain type from skill-creation standards."
|
|
218
|
+
}
|
|
219
|
+
},
|
|
220
|
+
"consolidation_report": null,
|
|
221
|
+
"approval_request": null
|
|
222
|
+
}
|
|
223
|
+
```
|
|
@@ -0,0 +1,69 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: agent-response
|
|
3
|
+
description: Use when an agent returns a json:contract response that needs to be interpreted and presented to the user
|
|
4
|
+
metadata:
|
|
5
|
+
user-invocable: false
|
|
6
|
+
type: protocol
|
|
7
|
+
---
|
|
8
|
+
|
|
9
|
+
# Agent Response Protocol
|
|
10
|
+
|
|
11
|
+
The orchestrator's job is translation -- turning structured agent output into
|
|
12
|
+
clear user communication. Every status requires a different response because
|
|
13
|
+
each represents a different kind of decision point for the user.
|
|
14
|
+
|
|
15
|
+
## State Machine
|
|
16
|
+
|
|
17
|
+
```
|
|
18
|
+
Agent returns json:contract
|
|
19
|
+
|- COMPLETE -> Summarize key_outputs (3-5 bullets)
|
|
20
|
+
|- NEEDS_INPUT -> AskUserQuestion, then SendMessage answer back
|
|
21
|
+
|- REVIEW -> Load Skill("orchestrator-approval") if approval_id present,
|
|
22
|
+
| otherwise AskUserQuestion (execute/modify/cancel),
|
|
23
|
+
| then SendMessage to resume the same agent
|
|
24
|
+
|- BLOCKED -> Present open_gaps via AskUserQuestion
|
|
25
|
+
| If user provides direction: dispatch new agent addressing the blocker.
|
|
26
|
+
| If user accepts the limitation: close the task as incomplete and move on.
|
|
27
|
+
+- IN_PROGRESS -> SendMessage to resume agent
|
|
28
|
+
```
|
|
29
|
+
|
|
30
|
+
## Mandatory Actions per Status
|
|
31
|
+
|
|
32
|
+
| Status | Action | Tool |
|
|
33
|
+
|---|---|---|
|
|
34
|
+
| `COMPLETE` | Summarize `key_outputs` in 3-5 bullets. Mention `cross_layer_impacts` and `open_gaps` if non-empty. Say "ask for details" if `verbatim_outputs` exists. | Direct response |
|
|
35
|
+
| `NEEDS_INPUT` | Present the agent's question with options | `AskUserQuestion` -> `SendMessage` |
|
|
36
|
+
| `REVIEW` | If `approval_request.approval_id` is present: load `Skill("orchestrator-approval")`. Otherwise: present plan with options execute / modify / cancel. On execute or modify: resume the SAME agent via SendMessage -- it already holds full context from its investigation. | `AskUserQuestion` -> `SendMessage` |
|
|
37
|
+
| `BLOCKED` | Present alternatives from `open_gaps`. If user provides direction, dispatch a new agent addressing the blocker. If user accepts the limitation, close as incomplete and move on. | `AskUserQuestion` |
|
|
38
|
+
| `IN_PROGRESS` | Agent was interrupted, let it continue | `SendMessage` |
|
|
39
|
+
|
|
40
|
+
**Why REVIEW splits on approval_id:** Hook-blocked T3 operations carry a pending
|
|
41
|
+
grant that requires the structured approval flow (exact content, rollback, risk).
|
|
42
|
+
Plan-first REVIEW has no pending grant -- the user just needs to confirm direction.
|
|
43
|
+
Treating both the same either over-formalizes simple plans or under-secures T3 ops.
|
|
44
|
+
|
|
45
|
+
## Output Fields
|
|
46
|
+
|
|
47
|
+
| Field | When to surface |
|
|
48
|
+
|---|---|
|
|
49
|
+
| `key_outputs` | Always -- base your summary on these |
|
|
50
|
+
| `verbatim_outputs` | Only when user asks for details -- relay in code blocks |
|
|
51
|
+
| `cross_layer_impacts` | Always mention if non-empty -- these are side effects the user may not anticipate |
|
|
52
|
+
| `open_gaps` | Always mention -- never imply certainty the agent does not have |
|
|
53
|
+
| `consolidation_report` | Check for `conflicts` and `next_best_agent` |
|
|
54
|
+
| `next_best_agent` | Ask user if they want to dispatch |
|
|
55
|
+
|
|
56
|
+
## Multiple Agents
|
|
57
|
+
|
|
58
|
+
Wait for ALL dispatched agents before responding. Partial results
|
|
59
|
+
mislead -- the user acts on incomplete information, then the second
|
|
60
|
+
agent contradicts the first.
|
|
61
|
+
|
|
62
|
+
Consolidate findings. If agents conflict, present both sides and
|
|
63
|
+
ask the user to decide.
|
|
64
|
+
|
|
65
|
+
## Error Handling
|
|
66
|
+
|
|
67
|
+
| Situation | Action |
|
|
68
|
+
|---|---|
|
|
69
|
+
| Malformed contract | Resume agent with repair instructions (max 2 retries). |
|