@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
|
@@ -0,0 +1,191 @@
|
|
|
1
|
+
# Agent Creation -- Reference
|
|
2
|
+
|
|
3
|
+
Detailed template, dimension guidance, and weight test per component. Read on-demand when drafting or reviewing an agent definition.
|
|
4
|
+
|
|
5
|
+
---
|
|
6
|
+
|
|
7
|
+
## Specialist Agent Template
|
|
8
|
+
|
|
9
|
+
The canonical structure for a Gaia specialist agent. Sections marked [REQUIRED] appear in every specialist. Sections marked [CONDITIONAL] appear when the corresponding dimension applies.
|
|
10
|
+
|
|
11
|
+
```markdown
|
|
12
|
+
---
|
|
13
|
+
name: <kebab-case-name>
|
|
14
|
+
description: <triggering conditions -- when the orchestrator should dispatch this agent>
|
|
15
|
+
tools: Read, Edit, Write, Glob, Grep, Bash, Task, Skill # restrict to what the domain actually needs
|
|
16
|
+
model: inherit
|
|
17
|
+
maxTurns: 40 # omit only for short-lived agents
|
|
18
|
+
permissionMode: acceptEdits # required if D1=yes (agent mutates state)
|
|
19
|
+
disallowedTools: [Write, Edit, NotebookEdit] # include if D1=no and enforcement matters
|
|
20
|
+
color: <optional -- hex or color name>
|
|
21
|
+
skills:
|
|
22
|
+
- agent-protocol # always first
|
|
23
|
+
- security-tiers # always second
|
|
24
|
+
- command-execution # if agent runs Bash commands
|
|
25
|
+
- investigation # if agent diagnoses complex state
|
|
26
|
+
- <domain-skill> # agent's domain patterns
|
|
27
|
+
- context-updater # if agent may discover new system state
|
|
28
|
+
- fast-queries # if agent diagnoses cloud/system health
|
|
29
|
+
---
|
|
30
|
+
|
|
31
|
+
## Workflow [REQUIRED if domain has a non-obvious sequence]
|
|
32
|
+
|
|
33
|
+
1. **Step name**: Brief rationale for why this step comes first.
|
|
34
|
+
2. **Step name**: What to do and what to look at.
|
|
35
|
+
3. **Step name**: When to surface for approval vs proceed.
|
|
36
|
+
|
|
37
|
+
## Identity [REQUIRED]
|
|
38
|
+
|
|
39
|
+
You are a <role with stakes>. You <what you uniquely see or are constrained to do>.
|
|
40
|
+
|
|
41
|
+
**Your output is always a <Realization Package | Diagnostic Report | Findings Report>:**
|
|
42
|
+
- What the output contains
|
|
43
|
+
- What it never contains (hybrid outputs drift)
|
|
44
|
+
|
|
45
|
+
## <Domain-Specific Section> [CONDITIONAL -- only if lookup logic is agent-specific]
|
|
46
|
+
|
|
47
|
+
Tables, decision trees, or classification logic that only applies to this agent.
|
|
48
|
+
If the same logic would help another agent, extract it to a skill instead.
|
|
49
|
+
|
|
50
|
+
## Scope [REQUIRED]
|
|
51
|
+
|
|
52
|
+
### CAN DO
|
|
53
|
+
- Concrete capability 1
|
|
54
|
+
- Concrete capability 2
|
|
55
|
+
|
|
56
|
+
### CANNOT DO -> DELEGATE [REQUIRED]
|
|
57
|
+
|
|
58
|
+
| Need | Agent |
|
|
59
|
+
|------|-------|
|
|
60
|
+
| <boundary description that names the decision point> | `<agent-name>` |
|
|
61
|
+
|
|
62
|
+
## Domain Errors [REQUIRED]
|
|
63
|
+
|
|
64
|
+
| Error | Action |
|
|
65
|
+
|-------|--------|
|
|
66
|
+
| <specific error or condition> | <concrete action, not "report the error"> |
|
|
67
|
+
|
|
68
|
+
## Surface Signals (proposed) [CONDITIONAL -- if D3=yes, remove after gaia-system applies]
|
|
69
|
+
|
|
70
|
+
```json
|
|
71
|
+
{
|
|
72
|
+
"intent": "<what this agent handles>",
|
|
73
|
+
"primary_agent": "<agent-name>",
|
|
74
|
+
"signals": {
|
|
75
|
+
"high_confidence": ["keyword1", "keyword2"],
|
|
76
|
+
"medium_confidence": ["keyword3", "keyword4"]
|
|
77
|
+
}
|
|
78
|
+
}
|
|
79
|
+
```
|
|
80
|
+
```
|
|
81
|
+
|
|
82
|
+
---
|
|
83
|
+
|
|
84
|
+
## The 3 Bifurcating Dimensions -- Detailed
|
|
85
|
+
|
|
86
|
+
### D1: Does the agent mutate system state?
|
|
87
|
+
|
|
88
|
+
"Mutate" means writing files, running commands that change resource state, or committing to VCS. The distinction matters because:
|
|
89
|
+
|
|
90
|
+
- Mutation requires T3 approval flow. An agent that can write but has no T3 handling in its failure model will either block silently or execute without user awareness.
|
|
91
|
+
- Read-only agents gain security value from `disallowedTools`, not just from not listing Write/Edit. A later frontmatter edit that adds a tool to a read-only agent should be caught by explicit disallow, not by convention.
|
|
92
|
+
|
|
93
|
+
**D1=yes implications:**
|
|
94
|
+
- `permissionMode: acceptEdits` in frontmatter
|
|
95
|
+
- `Write`, `Edit` listed in tools
|
|
96
|
+
- Failure handling covers T3 block + APPROVAL_REQUEST flow
|
|
97
|
+
- Output type is "Realization Package" (contains code/config changes)
|
|
98
|
+
|
|
99
|
+
**D1=no implications:**
|
|
100
|
+
- `disallowedTools: [Write, Edit, NotebookEdit]`
|
|
101
|
+
- No T3 surface in failure handling
|
|
102
|
+
- Output type is "Diagnostic Report" or "Findings Report"
|
|
103
|
+
|
|
104
|
+
### D2: Does the agent delegate to other agents?
|
|
105
|
+
|
|
106
|
+
Specialist agents are almost always terminal. "Delegation" here means the agent dispatches other agents (uses the Agent tool mid-task). Most specialists do not -- they surface CANNOT DO items back to the orchestrator, which handles routing.
|
|
107
|
+
|
|
108
|
+
**D2=yes implications (rare):**
|
|
109
|
+
- `Agent` in tools list
|
|
110
|
+
- A delegation table in the body describing which agents it dispatches and under what conditions
|
|
111
|
+
|
|
112
|
+
**D2=no implications (standard):**
|
|
113
|
+
- No `Agent` in tools (or `Agent` explicitly disallowed)
|
|
114
|
+
- CANNOT DO -> DELEGATE table is for the orchestrator's reference, not for the agent to act on directly
|
|
115
|
+
|
|
116
|
+
### D3: Does the agent enter the orchestrator's automatic routing?
|
|
117
|
+
|
|
118
|
+
Almost all specialists do. The exception would be a utility agent that is only dispatched explicitly, never via intent routing.
|
|
119
|
+
|
|
120
|
+
**D3=yes implications:**
|
|
121
|
+
- Description field written as triggering conditions (see Step 5 in SKILL.md)
|
|
122
|
+
- Surface signals proposed for `surface-routing.json`
|
|
123
|
+
- Description must not overlap with signals of existing agents (check `config/surface-routing.json` before finalizing)
|
|
124
|
+
|
|
125
|
+
---
|
|
126
|
+
|
|
127
|
+
## Weight Test per Component
|
|
128
|
+
|
|
129
|
+
Use this checklist when reviewing a drafted agent. For each component, the test question is: if this section were removed, would the agent behave differently in a realistic scenario?
|
|
130
|
+
|
|
131
|
+
### Identity weight test
|
|
132
|
+
|
|
133
|
+
| What you wrote | Does it pass? | Why |
|
|
134
|
+
|---|---|---|
|
|
135
|
+
| "You are a specialist in Terraform." | No | Baseline -- the LLM already knows what Terraform specialists do. |
|
|
136
|
+
| "You are a senior Terraform architect. You manage the lifecycle by working primarily with the declarative config in the repository. You never query live cloud resources directly." | Yes | The constraint ("never query live cloud") and the orientation ("declarative config, not live state") are not the LLM's default. They redirect behavior. |
|
|
137
|
+
|
|
138
|
+
**Fix:** Add the constraint or orientation that distinguishes this agent from a generic expert. The identity earns its place by narrowing the action space.
|
|
139
|
+
|
|
140
|
+
### Scope weight test
|
|
141
|
+
|
|
142
|
+
| What you wrote | Does it pass? | Why |
|
|
143
|
+
|---|---|---|
|
|
144
|
+
| "CANNOT DO: cloud infrastructure → terraform-architect" | Weak | Too broad. The agent will still touch cloud config when it seems "close enough." |
|
|
145
|
+
| "If the resource type is managed by IaC, creating it belongs to terraform-architect even if you need it as a prerequisite for your task." | Yes | Names the decision moment. Agent knows to stop at "I need this resource created" rather than proceeding. |
|
|
146
|
+
|
|
147
|
+
**Fix:** Identify the specific moment the agent would rationalize crossing the boundary, and make that moment explicit.
|
|
148
|
+
|
|
149
|
+
### Domain Errors weight test
|
|
150
|
+
|
|
151
|
+
| What you wrote | Does it pass? | Why |
|
|
152
|
+
|---|---|---|
|
|
153
|
+
| `terraform init fails → Check credentials` | Marginal | "Check credentials" is the default. Passes only if the agent would normally do something worse. |
|
|
154
|
+
| `Plan shows unexpected destroys → HALT -- report, require explicit confirmation` | Yes | "HALT" is not the default. The agent would normally continue to apply. |
|
|
155
|
+
|
|
156
|
+
**Fix:** For each error row, ask what a naive agent would do. If the row's action is identical to the default, it adds no weight.
|
|
157
|
+
|
|
158
|
+
### Output type weight test
|
|
159
|
+
|
|
160
|
+
An output type declaration passes if it excludes a hybrid the agent would otherwise produce. "Your output is code or a report -- never both" prevents the agent from writing files *and* returning a summary in the same turn -- a pattern that creates ambiguity about what was done. If the output type only names what the agent always produces anyway, it is decorative.
|
|
161
|
+
|
|
162
|
+
---
|
|
163
|
+
|
|
164
|
+
## Frontmatter Field Reference
|
|
165
|
+
|
|
166
|
+
| Field | Type | Required | Notes |
|
|
167
|
+
|-------|------|----------|-------|
|
|
168
|
+
| `name` | string | Yes | kebab-case; matches file name |
|
|
169
|
+
| `description` | string | Yes | Triggering conditions only -- what makes the orchestrator dispatch this agent |
|
|
170
|
+
| `tools` | list | Yes | Only what the domain actually uses; omitting is better than bloating |
|
|
171
|
+
| `model` | string | Yes | `inherit` for most; `sonnet` if the agent needs a specific model pinned |
|
|
172
|
+
| `permissionMode` | string | D1=yes | `acceptEdits` -- required for agents that write files |
|
|
173
|
+
| `disallowedTools` | list | D1=no | Include when read-only enforcement matters beyond convention |
|
|
174
|
+
| `maxTurns` | int | Recommended | 40 for most specialists; 50+ for agents with complex investigation phases |
|
|
175
|
+
| `skills` | list | Yes | `agent-protocol` always first, `security-tiers` always second |
|
|
176
|
+
| `color` | string | Optional | Hex or color name for visual routing distinction |
|
|
177
|
+
|
|
178
|
+
---
|
|
179
|
+
|
|
180
|
+
## Systemic Files the Agent Creation Touches
|
|
181
|
+
|
|
182
|
+
This skill guides thinking about each file, but gaia-system (the invoking agent) applies the writes.
|
|
183
|
+
|
|
184
|
+
| File | What changes | Who writes it |
|
|
185
|
+
|------|--------------|---------------|
|
|
186
|
+
| `.claude/agents/<name>.md` | New agent definition | gaia-system |
|
|
187
|
+
| `config/surface-routing.json` | New surface entry with signals | gaia-system |
|
|
188
|
+
| `.claude/skills/README.md` | Agent assignment matrix (if agent gets new skills) | gaia-system |
|
|
189
|
+
| `agents/README.md` | New agent in the roster | gaia-system |
|
|
190
|
+
|
|
191
|
+
The skill does not modify any of these files directly.
|
|
@@ -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
|
+
|- APPROVAL_REQUEST -> 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
|
+
| `APPROVAL_REQUEST` | 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 APPROVAL_REQUEST 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 APPROVAL_REQUEST 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). |
|
|
@@ -0,0 +1,80 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: agentic-loop
|
|
3
|
+
description: Use when the orchestrator injects "Carga la skill agentic-loop" with a goal, eval_command, metric, and threshold
|
|
4
|
+
metadata:
|
|
5
|
+
user-invocable: false
|
|
6
|
+
type: technique
|
|
7
|
+
---
|
|
8
|
+
|
|
9
|
+
# Agentic Loop
|
|
10
|
+
|
|
11
|
+
Iterative improvement through small, reversible changes evaluated against a single metric. Each iteration is one hypothesis, one edit, one eval, one decision. The metric decides -- not you.
|
|
12
|
+
|
|
13
|
+
## Parameters (from orchestrator prompt)
|
|
14
|
+
|
|
15
|
+
`goal`, `eval_command`, `metric`, `direction` (higher/lower), `threshold`, `max_iterations`, `files_in_scope`, `branch`
|
|
16
|
+
|
|
17
|
+
## Setup
|
|
18
|
+
|
|
19
|
+
1. Read every file in `files_in_scope` deeply -- understand before changing
|
|
20
|
+
2. `git checkout -b {branch}`
|
|
21
|
+
3. Run `eval_command` -- parse `METRIC {name}={number}` from stdout -- this is your baseline
|
|
22
|
+
4. Write `state.json` and `worklog.md` (schemas in `reference.md`)
|
|
23
|
+
5. `git commit -m "baseline: {metric} {value}"`
|
|
24
|
+
|
|
25
|
+
## Loop (repeat until threshold, max_iterations, or stop)
|
|
26
|
+
|
|
27
|
+
1. **HYPOTHESIZE** -- based on worklog insights and last failure. When stuck, re-read source files; thinking longer beats trying faster
|
|
28
|
+
2. **EDIT** -- one focused change. Smaller diffs are easier to evaluate and reverse
|
|
29
|
+
3. **EVALUATE** -- run `eval_command`, parse `METRIC {name}={number}`
|
|
30
|
+
4. **DECIDE** (mechanically, not judgment):
|
|
31
|
+
- Improved (or equal with less code) -- KEEP -- `git add -A` then `git commit -m "improve: {metric} {old}->{new}"`
|
|
32
|
+
- Same or worse -- DISCARD -- `git checkout -- .` then `git clean -fd`
|
|
33
|
+
5. **LOG** -- append to `worklog.md`: run number, what changed, result, insight, next idea
|
|
34
|
+
6. **UPDATE** -- write `state.json` with current values
|
|
35
|
+
7. **ESCALATE** if needed:
|
|
36
|
+
- 3 consecutive discards -- REFINE (adjust within current strategy)
|
|
37
|
+
- 5 consecutive discards -- PIVOT (structurally different approach)
|
|
38
|
+
- 3 pivots without a keep -- STOP and report blockers
|
|
39
|
+
8. Every 10 iterations: re-read `files_in_scope`, review worklog "What's Been Tried", recalibrate
|
|
40
|
+
|
|
41
|
+
## Termination
|
|
42
|
+
|
|
43
|
+
- **Threshold reached** -- `git commit -m "final: {metric} {baseline}->{final} in N iterations"`, write summary
|
|
44
|
+
- **Max iterations** -- report best achieved vs threshold
|
|
45
|
+
- **Stop from escalation** -- report what was tried and what blocked progress
|
|
46
|
+
- All paths: finalize `state.json` (status: complete/stopped), write summary in `worklog.md`
|
|
47
|
+
|
|
48
|
+
## Contract Integration
|
|
49
|
+
|
|
50
|
+
Include `loop_status` in your `json:contract` agent_status on every response:
|
|
51
|
+
|
|
52
|
+
```json
|
|
53
|
+
"loop_status": {
|
|
54
|
+
"iteration": 5,
|
|
55
|
+
"metric": 94.5,
|
|
56
|
+
"best": 94.5,
|
|
57
|
+
"baseline": 89.0,
|
|
58
|
+
"threshold": 98,
|
|
59
|
+
"status": "iterating"
|
|
60
|
+
}
|
|
61
|
+
```
|
|
62
|
+
|
|
63
|
+
Do NOT return `plan_status: "COMPLETE"` until the loop finishes. The user may be away for hours.
|
|
64
|
+
|
|
65
|
+
## Rules
|
|
66
|
+
|
|
67
|
+
- **Loop forever.** Never ask "should I continue?" The metric and thresholds decide when to stop. The user may be away for hours.
|
|
68
|
+
- **One change per iteration.** Multiple changes make it impossible to isolate what helped.
|
|
69
|
+
- **Metric is king.** Personal judgment about code quality does not override the number.
|
|
70
|
+
- **Simpler wins ties.** Removing code for equal performance is a keep.
|
|
71
|
+
- **Think longer when stuck.** Re-read source files before trying faster. Fresh context beats more iterations.
|
|
72
|
+
- **Retreat, don't thrash.** Same idea reverting repeatedly means the approach is wrong -- pivot.
|
|
73
|
+
|
|
74
|
+
## Anti-Patterns
|
|
75
|
+
|
|
76
|
+
- Making multiple changes per iteration -- cannot isolate what helped or hurt
|
|
77
|
+
- Skipping eval after a change -- invisible regressions compound
|
|
78
|
+
- Continuing after 3 pivots without improvement -- diminishing returns; stop and report
|
|
79
|
+
- Using `git clean -fdx` instead of `-fd` -- destroys untracked config files needed by eval
|
|
80
|
+
- Editing state.json by hand instead of writing it atomically after each phase
|