@jaguilar87/gaia-ops 1.0.0

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.
Files changed (91) hide show
  1. package/CHANGELOG.md +315 -0
  2. package/CLAUDE.md +154 -0
  3. package/LICENSE +21 -0
  4. package/README.md +221 -0
  5. package/agents/aws-troubleshooter.md +50 -0
  6. package/agents/claude-architect.md +821 -0
  7. package/agents/devops-developer.md +92 -0
  8. package/agents/gcp-troubleshooter.md +50 -0
  9. package/agents/gitops-operator.md +360 -0
  10. package/agents/terraform-architect.md +289 -0
  11. package/bin/gaia-init.js +620 -0
  12. package/commands/architect.md +97 -0
  13. package/commands/restore-session.md +87 -0
  14. package/commands/save-session.md +88 -0
  15. package/commands/session-status.md +61 -0
  16. package/commands/speckit.add-task.md +144 -0
  17. package/commands/speckit.analyze-task.md +65 -0
  18. package/commands/speckit.implement.md +96 -0
  19. package/commands/speckit.init.md +237 -0
  20. package/commands/speckit.plan.md +88 -0
  21. package/commands/speckit.specify.md +161 -0
  22. package/commands/speckit.tasks.md +188 -0
  23. package/config/AGENTS.md +162 -0
  24. package/config/agent-catalog.md +604 -0
  25. package/config/context-contracts.md +682 -0
  26. package/config/git-standards.md +674 -0
  27. package/config/git_standards.json +69 -0
  28. package/config/orchestration-workflow.md +735 -0
  29. package/hooks/__pycache__/post_tool_use.cpython-312.pyc +0 -0
  30. package/hooks/__pycache__/pre_kubectl_security.cpython-312.pyc +0 -0
  31. package/hooks/__pycache__/pre_tool_use.cpython-312.pyc +0 -0
  32. package/hooks/__pycache__/session_start.cpython-312.pyc +0 -0
  33. package/hooks/__pycache__/subagent_stop.cpython-312.pyc +0 -0
  34. package/hooks/post_tool_use.py +463 -0
  35. package/hooks/pre_kubectl_security.py +205 -0
  36. package/hooks/pre_tool_use.py +530 -0
  37. package/hooks/session_start.py +315 -0
  38. package/hooks/subagent_stop.py +549 -0
  39. package/index.js +92 -0
  40. package/package.json +59 -0
  41. package/speckit/README.en.md +648 -0
  42. package/speckit/README.md +353 -0
  43. package/speckit/governance.md +169 -0
  44. package/speckit/scripts/check-prerequisites.sh +194 -0
  45. package/speckit/scripts/common.sh +126 -0
  46. package/speckit/scripts/create-new-feature.sh +131 -0
  47. package/speckit/scripts/init.sh +42 -0
  48. package/speckit/scripts/setup-plan.sh +95 -0
  49. package/speckit/scripts/update-agent-context.sh +718 -0
  50. package/speckit/templates/adr-template.md +118 -0
  51. package/speckit/templates/agent-file-template.md +23 -0
  52. package/speckit/templates/plan-template.md +233 -0
  53. package/speckit/templates/spec-template.md +116 -0
  54. package/speckit/templates/tasks-template-bkp.md +136 -0
  55. package/speckit/templates/tasks-template.md +345 -0
  56. package/templates/CLAUDE.template.md +170 -0
  57. package/templates/code-examples/approval_gate_workflow.py +141 -0
  58. package/templates/code-examples/clarification_workflow.py +94 -0
  59. package/templates/code-examples/commit_validation.py +86 -0
  60. package/templates/project-context.template.json +126 -0
  61. package/templates/settings.template.json +307 -0
  62. package/tools/__pycache__/agent_router.cpython-312.pyc +0 -0
  63. package/tools/__pycache__/approval_gate.cpython-312.pyc +0 -0
  64. package/tools/__pycache__/clarify_engine.cpython-312.pyc +0 -0
  65. package/tools/__pycache__/clarify_patterns.cpython-312.pyc +0 -0
  66. package/tools/__pycache__/commit_validator.cpython-312.pyc +0 -0
  67. package/tools/__pycache__/context_section_reader.cpython-312.pyc +0 -0
  68. package/tools/__pycache__/routing_dashboard.cpython-312.pyc +0 -0
  69. package/tools/__pycache__/routing_feedback.cpython-312.pyc +0 -0
  70. package/tools/__pycache__/semantic_matcher.cpython-312.pyc +0 -0
  71. package/tools/__pycache__/task_manager.cpython-312.pyc +0 -0
  72. package/tools/agent_capabilities.json +231 -0
  73. package/tools/agent_invoker_helper.py +239 -0
  74. package/tools/agent_router.py +730 -0
  75. package/tools/approval_gate.py +318 -0
  76. package/tools/clarify_engine.py +511 -0
  77. package/tools/clarify_patterns.py +356 -0
  78. package/tools/commit_validator.py +338 -0
  79. package/tools/context_provider.py +181 -0
  80. package/tools/context_section_reader.py +301 -0
  81. package/tools/demo_clarify.py +104 -0
  82. package/tools/generate_embeddings.py +168 -0
  83. package/tools/quicktriage_aws_troubleshooter.sh +45 -0
  84. package/tools/quicktriage_devops_developer.sh +38 -0
  85. package/tools/quicktriage_gcp_troubleshooter.sh +51 -0
  86. package/tools/quicktriage_gitops_operator.sh +47 -0
  87. package/tools/quicktriage_terraform_architect.sh +40 -0
  88. package/tools/semantic_matcher.py +222 -0
  89. package/tools/task_manager.py +547 -0
  90. package/tools/task_manager_README.md +395 -0
  91. package/tools/task_manager_example.py +215 -0
@@ -0,0 +1,94 @@
1
+ # Phase 0: Clarification Workflow Example
2
+ # Use when user request contains ambiguous terms or missing context
3
+
4
+ import sys
5
+ sys.path.insert(0, '/home/jaguilar/aaxis/rnd/repositories/.claude/tools')
6
+ from clarify_engine import request_clarification, process_clarification
7
+
8
+ # Example 1: Detect ambiguity
9
+ def detect_ambiguity(user_prompt: str, command_context: dict):
10
+ """
11
+ Detect if user request needs clarification.
12
+ """
13
+ clarification_data = request_clarification(
14
+ user_prompt=user_prompt,
15
+ command_context=command_context # {"command": "general_prompt"} or speckit command
16
+ )
17
+
18
+ # Check if clarification needed
19
+ if not clarification_data["needs_clarification"]:
20
+ # No ambiguity, proceed with original prompt
21
+ return {"skip_clarification": True, "prompt": user_prompt}
22
+
23
+ # Ambiguity detected, need to ask user
24
+ return {
25
+ "skip_clarification": False,
26
+ "clarification_data": clarification_data
27
+ }
28
+
29
+
30
+ # Example 2: Present clarification questions
31
+ def present_clarification(clarification_data: dict):
32
+ """
33
+ Present ambiguity summary and ask questions.
34
+ """
35
+ # Show summary to user
36
+ summary = clarification_data["summary"]
37
+ print(f"Ambiguity detected: {summary}")
38
+
39
+ # Ask questions using AskUserQuestion tool
40
+ question_config = clarification_data["question_config"]
41
+ # response = AskUserQuestion(**question_config)
42
+
43
+ return question_config
44
+
45
+
46
+ # Example 3: Process user responses
47
+ def process_user_responses(clarification_data: dict, user_responses: dict, original_prompt: str):
48
+ """
49
+ Generate enriched prompt from user responses.
50
+ """
51
+ result = process_clarification(
52
+ engine_instance=clarification_data["engine_instance"],
53
+ original_prompt=original_prompt,
54
+ user_responses=user_responses,
55
+ clarification_context=clarification_data["clarification_context"]
56
+ )
57
+
58
+ enriched_prompt = result["enriched_prompt"]
59
+
60
+ # Example: "revisa el servicio" + {service: "tcm-api", namespace: "tcm-non-prod"}
61
+ # Becomes: "revisa el servicio tcm-api en el namespace tcm-non-prod"
62
+
63
+ return enriched_prompt
64
+
65
+
66
+ # Example 4: Full clarification workflow
67
+ def clarification_workflow(user_prompt: str):
68
+ """
69
+ Complete Phase 0 workflow.
70
+ """
71
+ # Step 1: Detect ambiguity
72
+ detection = detect_ambiguity(user_prompt, {"command": "general_prompt"})
73
+
74
+ if detection["skip_clarification"]:
75
+ # No clarification needed
76
+ return detection["prompt"]
77
+
78
+ # Step 2: Get clarification data
79
+ clarification_data = detection["clarification_data"]
80
+
81
+ # Step 3: Ask user (via AskUserQuestion tool)
82
+ question_config = present_clarification(clarification_data)
83
+ # user_responses = AskUserQuestion(**question_config) # Simulated
84
+
85
+ # Step 4: Process responses and enrich prompt
86
+ user_responses = {"service": "tcm-api", "namespace": "tcm-non-prod"} # Example
87
+ enriched_prompt = process_user_responses(
88
+ clarification_data,
89
+ user_responses,
90
+ user_prompt
91
+ )
92
+
93
+ # Step 5: Use enriched prompt for Phase 1 (Routing)
94
+ return enriched_prompt
@@ -0,0 +1,86 @@
1
+ # Git Commit Validation Example
2
+ # Use this pattern for ALL commit operations (orchestrator and agents)
3
+
4
+ import sys
5
+ sys.path.insert(0, '/home/jaguilar/aaxis/rnd/repositories/.claude/tools')
6
+ from commit_validator import safe_validate_before_commit
7
+
8
+ # Example 1: Orchestrator-level commit (ad-hoc)
9
+ def orchestrator_commit(commit_message: str):
10
+ """
11
+ Orchestrator creates ad-hoc commit.
12
+ """
13
+ # Validate
14
+ if not safe_validate_before_commit(commit_message):
15
+ return {
16
+ "status": "failed",
17
+ "reason": "commit_message_validation_failed"
18
+ }
19
+
20
+ # Only if validation passes: proceed with git operations
21
+ # Execute: git add . && git commit -m "$commit_message"
22
+ return {"status": "success"}
23
+
24
+
25
+ # Example 2: Agent-level commit (realization phase)
26
+ def agent_commit_in_realization(realization_package: dict):
27
+ """
28
+ Agent creates commit as part of workflow realization.
29
+ """
30
+ commit_message = realization_package["git_operations"]["commit_message"]
31
+
32
+ # Validate (same validation as orchestrator)
33
+ if not safe_validate_before_commit(commit_message):
34
+ return {
35
+ "status": "failed",
36
+ "reason": "commit_message_validation_failed",
37
+ "message": "Orchestrator provided invalid commit message"
38
+ }
39
+
40
+ # Proceed with git operations
41
+ # Execute: git add . && git commit -m "$commit_message" && git push
42
+ return {"status": "success"}
43
+
44
+
45
+ # Example 3: Generating commit message
46
+ def generate_commit_message(changes: dict) -> str:
47
+ """
48
+ Generate commit message following Conventional Commits.
49
+ """
50
+ commit_type = changes.get("type", "chore") # feat, fix, refactor, etc.
51
+ scope = changes.get("scope", "") # helmrelease, terraform, etc.
52
+ description = changes.get("description", "") # imperative mood, <72 chars
53
+
54
+ if scope:
55
+ return f"{commit_type}({scope}): {description}"
56
+ else:
57
+ return f"{commit_type}: {description}"
58
+
59
+
60
+ # Example 4: Handling validation failure
61
+ def commit_with_retry(commit_message: str, max_retries: int = 2):
62
+ """
63
+ Attempt commit with validation, regenerate if fails.
64
+ """
65
+ for attempt in range(max_retries):
66
+ if safe_validate_before_commit(commit_message):
67
+ # Valid, proceed
68
+ return {"status": "success", "message": commit_message}
69
+
70
+ # Invalid, regenerate
71
+ commit_message = regenerate_commit_message(commit_message, attempt)
72
+
73
+ # All attempts failed
74
+ return {
75
+ "status": "failed",
76
+ "reason": "Cannot generate valid commit message after retries"
77
+ }
78
+
79
+
80
+ def regenerate_commit_message(original: str, attempt: int) -> str:
81
+ """
82
+ Regenerate commit message after validation failure.
83
+ """
84
+ # Implement regeneration logic based on validation errors
85
+ # Example: shorten if too long, fix imperative mood, remove forbidden footers
86
+ return original # Placeholder
@@ -0,0 +1,126 @@
1
+ {
2
+ "project_name": "YOUR_PROJECT_NAME",
3
+ "project_id_gcp": "your-gcp-project-id",
4
+ "description": "Brief description of your project",
5
+ "cloud_provider": "GCP",
6
+ "primary_region": "us-central1",
7
+
8
+ "infrastructure": {
9
+ "clusters": {
10
+ "primary": {
11
+ "name": "your-cluster-name",
12
+ "provider": "GCP",
13
+ "type": "GKE",
14
+ "region": "us-central1",
15
+ "node_pools": [],
16
+ "networking": {
17
+ "vpc": "your-vpc-name",
18
+ "subnet": "your-subnet-name"
19
+ }
20
+ }
21
+ },
22
+
23
+ "databases": {
24
+ "primary_sql": {
25
+ "name": "your-postgres-instance",
26
+ "type": "Cloud SQL PostgreSQL",
27
+ "version": "15",
28
+ "tier": "db-custom-2-7680",
29
+ "region": "us-central1"
30
+ }
31
+ },
32
+
33
+ "artifact_repositories": {
34
+ "docker": {
35
+ "name": "your-artifact-registry",
36
+ "format": "Docker",
37
+ "location": "us-central1"
38
+ }
39
+ }
40
+ },
41
+
42
+ "gitops": {
43
+ "flux_version": "v2.x",
44
+ "repositories": {
45
+ "gitops": {
46
+ "url": "https://github.com/your-org/your-gitops-repo",
47
+ "path": "clusters/your-cluster",
48
+ "branch": "main"
49
+ }
50
+ },
51
+ "namespaces": [
52
+ "default",
53
+ "your-app-namespace"
54
+ ]
55
+ },
56
+
57
+ "services": {
58
+ "your_service_name": {
59
+ "description": "Your service description",
60
+ "type": "backend|frontend|worker",
61
+ "repository": "https://github.com/your-org/your-service-repo",
62
+ "deployment": {
63
+ "namespace": "your-app-namespace",
64
+ "replicas": 2,
65
+ "resources": {
66
+ "requests": {
67
+ "cpu": "100m",
68
+ "memory": "256Mi"
69
+ },
70
+ "limits": {
71
+ "cpu": "500m",
72
+ "memory": "512Mi"
73
+ }
74
+ }
75
+ },
76
+ "endpoints": {
77
+ "internal": "http://your-service.your-namespace.svc.cluster.local:8080",
78
+ "external": "https://your-service.yourdomain.com"
79
+ }
80
+ }
81
+ },
82
+
83
+ "terraform": {
84
+ "version": "1.5+",
85
+ "backend": {
86
+ "type": "gcs",
87
+ "bucket": "your-terraform-state-bucket",
88
+ "prefix": "your-project/terraform/state"
89
+ },
90
+ "modules": [
91
+ {
92
+ "name": "gke-cluster",
93
+ "path": "terraform/modules/gke"
94
+ }
95
+ ]
96
+ },
97
+
98
+ "access_patterns": {
99
+ "kubectl_context": "gke_your-project-id_us-central1_your-cluster-name",
100
+ "gcloud_project": "your-gcp-project-id"
101
+ },
102
+
103
+ "recent_changes": [],
104
+
105
+ "_instructions": {
106
+ "description": "Template for creating new project contexts",
107
+ "usage": [
108
+ "1. Copy this file to your project: cp templates/project-context.template.json .claude/project-context.json",
109
+ "2. Replace ALL placeholder values (YOUR_*, your-*) with actual values",
110
+ "3. Remove this _instructions section",
111
+ "4. Validate JSON syntax: jq . .claude/project-context.json"
112
+ ],
113
+ "required_fields": [
114
+ "project_name",
115
+ "project_id_gcp",
116
+ "cloud_provider",
117
+ "infrastructure.clusters.primary",
118
+ "access_patterns.kubectl_context"
119
+ ],
120
+ "optional_sections": [
121
+ "databases (if no databases)",
122
+ "terraform (if not using terraform)",
123
+ "services (initially empty, add as you develop)"
124
+ ]
125
+ }
126
+ }
@@ -0,0 +1,307 @@
1
+ {
2
+ "system_prompt": "You are part of an intelligent DevOps agent system. Use specialized agents via the Task tool for complex operations.",
3
+
4
+ "hooks": {
5
+ "pre_tool_use": ".claude/hooks/pre_tool_use.py",
6
+ "post_tool_use": ".claude/hooks/post_tool_use.py",
7
+ "subagent_stop": ".claude/hooks/subagent_stop.py"
8
+ },
9
+
10
+ "commands": {
11
+ "speckit.init": {
12
+ "file": ".claude/commands/speckit.init.md",
13
+ "description": "Bootstrap Spec-Kit and validate/create project-context.json"
14
+ },
15
+ "speckit.specify": {
16
+ "file": ".claude/commands/speckit.specify.md",
17
+ "description": "Create feature specification with auto-filled project context"
18
+ },
19
+ "speckit.plan": {
20
+ "file": ".claude/commands/speckit.plan.md",
21
+ "description": "Generate implementation plan with integrated clarification"
22
+ },
23
+ "speckit.tasks": {
24
+ "file": ".claude/commands/speckit.tasks.md",
25
+ "description": "Generate enriched task list with validation"
26
+ },
27
+ "speckit.implement": {
28
+ "file": ".claude/commands/speckit.implement.md",
29
+ "description": "Execute implementation tasks with agent orchestration"
30
+ },
31
+ "speckit.add-task": {
32
+ "file": ".claude/commands/speckit.add-task.md",
33
+ "description": "Add single task with inline metadata"
34
+ },
35
+ "speckit.analyze-task": {
36
+ "file": ".claude/commands/speckit.analyze-task.md",
37
+ "description": "Deep analysis of specific task (auto-triggered for T2/T3)"
38
+ },
39
+ "save-session": {
40
+ "file": ".claude/commands/save-session.md",
41
+ "description": "Export session bundle with active context"
42
+ }
43
+ },
44
+
45
+ "agents": {
46
+ "terraform-architect": {
47
+ "prompt_file": ".claude/agents/terraform-architect.md",
48
+ "triggers": ["#terraform", "#infrastructure", "terraform", "terragrunt"],
49
+ "security_tier": ["T0", "T1", "T2"]
50
+ },
51
+ "gitops-operator": {
52
+ "prompt_file": ".claude/agents/gitops-operator.md",
53
+ "triggers": ["#kubernetes", "#gitops", "#helm", "kubectl", "flux", "helm"],
54
+ "security_tier": ["T0", "T1", "T2"]
55
+ },
56
+ "gcp-troubleshooter": {
57
+ "prompt_file": ".claude/agents/gcp-troubleshooter.md",
58
+ "triggers": ["#gcp", "#gke", "gcloud", "GKE", "Cloud SQL"],
59
+ "security_tier": ["T0"]
60
+ },
61
+ "aws-troubleshooter": {
62
+ "prompt_file": ".claude/agents/aws-troubleshooter.md",
63
+ "triggers": ["#aws", "#eks", "#ec2", "aws", "EKS", "RDS"],
64
+ "security_tier": ["T0"]
65
+ },
66
+ "devops-developer": {
67
+ "prompt_file": ".claude/agents/devops-developer.md",
68
+ "triggers": ["#dockerfile", "#ci", "#pipeline", "docker", "npm", "build"],
69
+ "security_tier": ["T0", "T1"]
70
+ }
71
+ },
72
+
73
+ "security": {
74
+ "default_tier": "T0",
75
+ "tier_definitions": {
76
+ "T0": {
77
+ "name": "Read Only",
78
+ "description": "describe, get, show, list operations only",
79
+ "allowed_patterns": [
80
+ "terraform (fmt|validate|plan|show|output|version)",
81
+ "kubectl (get|describe|logs|explain|version)",
82
+ "gcloud .* (describe|list|show|get)",
83
+ "helm (template|lint|list|status|version)"
84
+ ]
85
+ },
86
+ "T1": {
87
+ "name": "Validation",
88
+ "description": "validate, plan, template, lint operations",
89
+ "allowed_patterns": [
90
+ "terraform (validate|plan|fmt -check)",
91
+ "helm (template|lint)",
92
+ "kubectl .* --dry-run=client"
93
+ ]
94
+ },
95
+ "T2": {
96
+ "name": "Dry Run",
97
+ "description": "--dry-run and --plan-only operations",
98
+ "allowed_patterns": [
99
+ ".* --dry-run.*",
100
+ ".* --plan-only.*"
101
+ ]
102
+ },
103
+ "T3": {
104
+ "name": "Blocked",
105
+ "description": "apply, reconcile, deploy operations - BLOCKED",
106
+ "blocked": true
107
+ }
108
+ },
109
+ "always_blocked": [
110
+ "terraform apply",
111
+ "terraform destroy",
112
+ "kubectl apply",
113
+ "kubectl delete",
114
+ "helm install",
115
+ "helm upgrade",
116
+ "gcloud .* (create|update|delete|patch)"
117
+ ]
118
+ },
119
+
120
+ "permissions": {
121
+ "allow": [
122
+ "Bash(echo \"Generated password for tcm_app: $TCM_APP_PASSWORD\")",
123
+ "Read(*)",
124
+ "Glob(*)",
125
+ "Grep(*)",
126
+ "Bash(./tests/task-*-validation.sh:*)",
127
+ "Bash(/home/jaguilar/aaxis/rnd/repositories/tcm-deployment/tests/task-104-validation.sh:*)",
128
+ "Bash(./spec-kit-tcm-plan/.specify/scripts/bash/check-prerequisites.sh:*)",
129
+ "Bash(./scripts/dev/setup-local.sh:*)",
130
+ "Bash(./scripts/dev/test-local-container-stack.sh:*)",
131
+ "Bash(./scripts/headless/synthesize-bundle.sh:*)",
132
+ "Bash(./scripts/test-pubsub-flow.sh:*)",
133
+ "Bash(./scripts/validate-eslint.sh:*)",
134
+ "Bash(./test-session-intelligence.sh:*)",
135
+ "Bash(./test-session-intelligence-v2.sh:*)",
136
+ "Bash(./test-hooks.sh:*)",
137
+ "Bash(./ssl-validation-test.sh:*)",
138
+ "Bash(./e2e-test-complete.sh:*)",
139
+ "Bash(/home/jaguilar/aaxis/rnd/repositories/.claude/tools/quicktriage_gitops_operator.sh:*)",
140
+ "Bash(/home/jaguilar/aaxis/rnd/repositories/.claude/tools/test_context_reader.sh)",
141
+ "Bash(chmod:*)",
142
+ "Bash(tree:*)",
143
+ "Bash(find:*)",
144
+ "Bash(cat:*)",
145
+ "Bash(head:*)",
146
+ "Bash(tail:*)",
147
+ "Bash(ls:*)",
148
+ "Bash(pwd:*)",
149
+ "Bash(wc:*)",
150
+ "Bash(diff:*)",
151
+ "Bash(which:*)",
152
+ "Bash(whoami:*)",
153
+ "Bash(date:*)",
154
+ "Bash(env:*)",
155
+ "Bash(printenv:*)",
156
+ "Bash(basename:*)",
157
+ "Bash(dirname:*)",
158
+ "Bash(realpath:*)",
159
+ "Bash(touch:*)",
160
+ "Bash(mkdir:*)",
161
+ "Bash(cp:*)",
162
+ "Bash(tee:*)",
163
+ "Bash(echo:*)",
164
+ "Bash(awk:*)",
165
+ "Bash(sed:*)",
166
+ "Bash(grep:*)",
167
+ "Bash(egrep:*)",
168
+ "Bash(rg:*)",
169
+ "Bash(jq:*)",
170
+ "Bash(yq:*)",
171
+ "Bash(base64:*)",
172
+ "Bash(sha256sum:*)",
173
+ "Bash(md5sum:*)",
174
+ "Bash(nslookup:*)",
175
+ "Bash(dig:*)",
176
+ "Bash(openssl:*)",
177
+ "Bash(curl:*)",
178
+ "Bash(wget:*)",
179
+ "Bash(nc:*)",
180
+ "Bash(ping:*)",
181
+ "Bash(traceroute:*)",
182
+ "Bash(PROJECT_ID=\"aaxis-rnd-general-project\")",
183
+ "Bash(REGION=\"us-central1\")",
184
+ "Bash(POSTGRES_INSTANCE=\"tcm-postgres-non-prod\")",
185
+ "Bash(export PUBSUB_EMULATOR_HOST=localhost:8085)",
186
+ "Bash(terragrunt (output|plan|validate|fmt|init|show|state|graph-dependencies):*)",
187
+ "Bash(terragrunt run-all (plan|validate|output|init):*)",
188
+ "Bash(terraform (fmt|validate|plan|show|output|version):*)",
189
+ "Bash(helm (template|lint|list|status):*)",
190
+ "Bash(helm show values:*)",
191
+ "Bash(kubectl (get|describe|logs|top|version):*)",
192
+ "Bash(kubectl explain:*)",
193
+ "Bash(kubectl wait:*)",
194
+ "Bash(kubeseal:*)",
195
+ "Bash(flux (check|get):*)",
196
+ "Bash(flux reconcile helmrelease --dry-run:*)",
197
+ "Bash(flux reconcile kustomization --dry-run:*)",
198
+ "Bash(flux reconcile helmrelease * --timeout=*)",
199
+ "Bash(flux reconcile kustomization * --timeout=*)",
200
+ "Bash(git status:*)",
201
+ "Bash(git diff:*)",
202
+ "Bash(git diff --cached:*)",
203
+ "Bash(git log:*)",
204
+ "Bash(git show:*)",
205
+ "Bash(git rev-parse:*)",
206
+ "Bash(git branch:*)",
207
+ "Bash(gcloud auth:*)",
208
+ "Bash(gcloud config get-value:*)",
209
+ "Bash(gcloud config set:*)",
210
+ "Bash(gcloud .* (describe|list|get):*)",
211
+ "Bash(gcloud logging read:*)",
212
+ "Bash(gcloud asset search-all-resources:*)",
213
+ "Bash(gcloud container clusters describe:*)",
214
+ "Bash(gcloud container images list:*)",
215
+ "Bash(gcloud container images describe:*)",
216
+ "Bash(gcloud compute (describe|list|get)-*:*)",
217
+ "Bash(gcloud compute backend-services (describe|list|get-health):*)",
218
+ "Bash(gcloud compute health-checks describe:*)",
219
+ "Bash(gcloud compute forwarding-rules list:*)",
220
+ "Bash(gcloud compute url-maps describe:*)",
221
+ "Bash(gcloud compute ssl-certificates (list|describe):*)",
222
+ "Bash(gcloud compute ssl-policies list:*)",
223
+ "Bash(gcloud dns record-sets list:*)",
224
+ "Bash(gcloud artifacts docker (tags|images) (list|describe):*)",
225
+ "Bash(gcloud iam service-accounts (list|get-iam-policy|keys list):*)",
226
+ "Bash(gcloud projects get-iam-policy:*)",
227
+ "Bash(aws sts get-caller-identity:*)",
228
+ "Bash(aws eks (describe|list)-*:*)",
229
+ "Bash(aws elbv2 (describe|list)-*:*)",
230
+ "Bash(aws ec2 (describe|list)-*:*)",
231
+ "Bash(aws rds (describe|list)-*:*)",
232
+ "Bash(aws iam (get|list)-*:*)",
233
+ "Bash(aws cloudwatch (describe|list)-*:*)",
234
+ "Bash(aws logs (describe|list)-*:*)",
235
+ "Bash(aws s3 ls:*)",
236
+ "Bash(aws ecr (describe|list)-*:*)",
237
+ "Bash(aws cloudformation (describe|list)-*:*)",
238
+ "Bash(aws route53 (list|get)-*:*)",
239
+ "Bash(eksctl get:*)",
240
+ "Bash(npm run:*)",
241
+ "Bash(npm test:*)",
242
+ "Bash(npm run test:*)",
243
+ "Bash(pnpm run lint:*)",
244
+ "Bash(pnpm test:*)",
245
+ "Bash(python3:*)",
246
+ "Bash(python -m pytest:*)",
247
+ "Bash(pytest:*)",
248
+ "Bash(pip install:*)",
249
+ "Bash(docker (build|run|logs|stop|rm|rmi|exec|compose|ps|images):*)",
250
+ "Bash(docker-compose:*)",
251
+ "Bash(time docker build:*)",
252
+ "WebSearch",
253
+ "WebFetch(domain:github.com)",
254
+ "WebFetch(domain:raw.githubusercontent.com)",
255
+ "WebFetch(domain:dify.ai)",
256
+ "WebFetch(domain:docs.dify.ai)",
257
+ "WebFetch(domain:docs.aws.amazon.com)",
258
+ "WebFetch(domain:cloud.google.com)"
259
+ ],
260
+ "deny": [],
261
+ "ask": [
262
+ "Edit(*)",
263
+ "Write(*)",
264
+ "NotebookEdit(*)",
265
+ "Bash(rm:*)",
266
+ "Bash(rmdir:*)",
267
+ "Bash(mv:*)",
268
+ "Bash(git add:*)",
269
+ "Bash(git commit:*)",
270
+ "Bash(git push:*)",
271
+ "Bash(terraform apply:*)",
272
+ "Bash(kubectl apply:*)",
273
+ "Bash(kubectl delete:*)",
274
+ "Bash(helm (install|upgrade):*)",
275
+ "Bash(gcloud .* (create|update|delete|patch):*)",
276
+ "Bash(aws .* (create|update|delete|modify|put):*)"
277
+ ]
278
+ },
279
+
280
+ "routing": {
281
+ "auto_route_tasks": true,
282
+ "task_metadata_required": false,
283
+ "fallback_agent": "devops-developer",
284
+ "confidence_threshold": 0.7
285
+ },
286
+
287
+ "logging": {
288
+ "audit_enabled": true,
289
+ "metrics_enabled": true,
290
+ "log_directory": ".claude/logs",
291
+ "metrics_directory": ".claude/metrics",
292
+ "retention_days": 30
293
+ },
294
+
295
+ "context": {
296
+ "bundle_directory": "contexts/bundles",
297
+ "auto_bundle_on_completion": true,
298
+ "max_bundle_size_mb": 50
299
+ },
300
+
301
+ "environment": {
302
+ "project_id": "aaxis-rnd-general-project",
303
+ "region": "us-central1",
304
+ "cluster_name": "tcm-gke-non-prod",
305
+ "postgres_instance": "tcm-postgres-non-prod"
306
+ }
307
+ }