htmlgraph 0.9.3__py3-none-any.whl → 0.27.5__py3-none-any.whl
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- htmlgraph/.htmlgraph/.session-warning-state.json +6 -0
- htmlgraph/.htmlgraph/agents.json +72 -0
- htmlgraph/.htmlgraph/htmlgraph.db +0 -0
- htmlgraph/__init__.py +173 -17
- htmlgraph/__init__.pyi +123 -0
- htmlgraph/agent_detection.py +127 -0
- htmlgraph/agent_registry.py +45 -30
- htmlgraph/agents.py +160 -107
- htmlgraph/analytics/__init__.py +9 -2
- htmlgraph/analytics/cli.py +190 -51
- htmlgraph/analytics/cost_analyzer.py +391 -0
- htmlgraph/analytics/cost_monitor.py +664 -0
- htmlgraph/analytics/cost_reporter.py +675 -0
- htmlgraph/analytics/cross_session.py +617 -0
- htmlgraph/analytics/dependency.py +192 -100
- htmlgraph/analytics/pattern_learning.py +771 -0
- htmlgraph/analytics/session_graph.py +707 -0
- htmlgraph/analytics/strategic/__init__.py +80 -0
- htmlgraph/analytics/strategic/cost_optimizer.py +611 -0
- htmlgraph/analytics/strategic/pattern_detector.py +876 -0
- htmlgraph/analytics/strategic/preference_manager.py +709 -0
- htmlgraph/analytics/strategic/suggestion_engine.py +747 -0
- htmlgraph/analytics/work_type.py +190 -14
- htmlgraph/analytics_index.py +135 -51
- htmlgraph/api/__init__.py +3 -0
- htmlgraph/api/cost_alerts_websocket.py +416 -0
- htmlgraph/api/main.py +2498 -0
- htmlgraph/api/static/htmx.min.js +1 -0
- htmlgraph/api/static/style-redesign.css +1344 -0
- htmlgraph/api/static/style.css +1079 -0
- htmlgraph/api/templates/dashboard-redesign.html +1366 -0
- htmlgraph/api/templates/dashboard.html +794 -0
- htmlgraph/api/templates/partials/activity-feed-hierarchical.html +326 -0
- htmlgraph/api/templates/partials/activity-feed.html +1100 -0
- htmlgraph/api/templates/partials/agents-redesign.html +317 -0
- htmlgraph/api/templates/partials/agents.html +317 -0
- htmlgraph/api/templates/partials/event-traces.html +373 -0
- htmlgraph/api/templates/partials/features-kanban-redesign.html +509 -0
- htmlgraph/api/templates/partials/features.html +578 -0
- htmlgraph/api/templates/partials/metrics-redesign.html +346 -0
- htmlgraph/api/templates/partials/metrics.html +346 -0
- htmlgraph/api/templates/partials/orchestration-redesign.html +443 -0
- htmlgraph/api/templates/partials/orchestration.html +198 -0
- htmlgraph/api/templates/partials/spawners.html +375 -0
- htmlgraph/api/templates/partials/work-items.html +613 -0
- htmlgraph/api/websocket.py +538 -0
- htmlgraph/archive/__init__.py +24 -0
- htmlgraph/archive/bloom.py +234 -0
- htmlgraph/archive/fts.py +297 -0
- htmlgraph/archive/manager.py +583 -0
- htmlgraph/archive/search.py +244 -0
- htmlgraph/atomic_ops.py +560 -0
- htmlgraph/attribute_index.py +208 -0
- htmlgraph/bounded_paths.py +539 -0
- htmlgraph/builders/__init__.py +14 -0
- htmlgraph/builders/base.py +118 -29
- htmlgraph/builders/bug.py +150 -0
- htmlgraph/builders/chore.py +119 -0
- htmlgraph/builders/epic.py +150 -0
- htmlgraph/builders/feature.py +31 -6
- htmlgraph/builders/insight.py +195 -0
- htmlgraph/builders/metric.py +217 -0
- htmlgraph/builders/pattern.py +202 -0
- htmlgraph/builders/phase.py +162 -0
- htmlgraph/builders/spike.py +52 -19
- htmlgraph/builders/track.py +148 -72
- htmlgraph/cigs/__init__.py +81 -0
- htmlgraph/cigs/autonomy.py +385 -0
- htmlgraph/cigs/cost.py +475 -0
- htmlgraph/cigs/messages_basic.py +472 -0
- htmlgraph/cigs/messaging.py +365 -0
- htmlgraph/cigs/models.py +771 -0
- htmlgraph/cigs/pattern_storage.py +427 -0
- htmlgraph/cigs/patterns.py +503 -0
- htmlgraph/cigs/posttool_analyzer.py +234 -0
- htmlgraph/cigs/reporter.py +818 -0
- htmlgraph/cigs/tracker.py +317 -0
- htmlgraph/cli/.htmlgraph/.session-warning-state.json +6 -0
- htmlgraph/cli/.htmlgraph/agents.json +72 -0
- htmlgraph/cli/.htmlgraph/htmlgraph.db +0 -0
- htmlgraph/cli/__init__.py +42 -0
- htmlgraph/cli/__main__.py +6 -0
- htmlgraph/cli/analytics.py +1424 -0
- htmlgraph/cli/base.py +685 -0
- htmlgraph/cli/constants.py +206 -0
- htmlgraph/cli/core.py +954 -0
- htmlgraph/cli/main.py +147 -0
- htmlgraph/cli/models.py +475 -0
- htmlgraph/cli/templates/__init__.py +1 -0
- htmlgraph/cli/templates/cost_dashboard.py +399 -0
- htmlgraph/cli/work/__init__.py +239 -0
- htmlgraph/cli/work/browse.py +115 -0
- htmlgraph/cli/work/features.py +568 -0
- htmlgraph/cli/work/orchestration.py +676 -0
- htmlgraph/cli/work/report.py +728 -0
- htmlgraph/cli/work/sessions.py +466 -0
- htmlgraph/cli/work/snapshot.py +559 -0
- htmlgraph/cli/work/tracks.py +486 -0
- htmlgraph/cli_commands/__init__.py +1 -0
- htmlgraph/cli_commands/feature.py +195 -0
- htmlgraph/cli_framework.py +115 -0
- htmlgraph/collections/__init__.py +18 -0
- htmlgraph/collections/base.py +415 -98
- htmlgraph/collections/bug.py +53 -0
- htmlgraph/collections/chore.py +53 -0
- htmlgraph/collections/epic.py +53 -0
- htmlgraph/collections/feature.py +12 -26
- htmlgraph/collections/insight.py +100 -0
- htmlgraph/collections/metric.py +92 -0
- htmlgraph/collections/pattern.py +97 -0
- htmlgraph/collections/phase.py +53 -0
- htmlgraph/collections/session.py +194 -0
- htmlgraph/collections/spike.py +56 -16
- htmlgraph/collections/task_delegation.py +241 -0
- htmlgraph/collections/todo.py +511 -0
- htmlgraph/collections/traces.py +487 -0
- htmlgraph/config/cost_models.json +56 -0
- htmlgraph/config.py +190 -0
- htmlgraph/context_analytics.py +344 -0
- htmlgraph/converter.py +216 -28
- htmlgraph/cost_analysis/__init__.py +5 -0
- htmlgraph/cost_analysis/analyzer.py +438 -0
- htmlgraph/dashboard.html +2406 -307
- htmlgraph/dashboard.html.backup +6592 -0
- htmlgraph/dashboard.html.bak +7181 -0
- htmlgraph/dashboard.html.bak2 +7231 -0
- htmlgraph/dashboard.html.bak3 +7232 -0
- htmlgraph/db/__init__.py +38 -0
- htmlgraph/db/queries.py +790 -0
- htmlgraph/db/schema.py +1788 -0
- htmlgraph/decorators.py +317 -0
- htmlgraph/dependency_models.py +19 -2
- htmlgraph/deploy.py +142 -125
- htmlgraph/deployment_models.py +474 -0
- htmlgraph/docs/API_REFERENCE.md +841 -0
- htmlgraph/docs/HTTP_API.md +750 -0
- htmlgraph/docs/INTEGRATION_GUIDE.md +752 -0
- htmlgraph/docs/ORCHESTRATION_PATTERNS.md +717 -0
- htmlgraph/docs/README.md +532 -0
- htmlgraph/docs/__init__.py +77 -0
- htmlgraph/docs/docs_version.py +55 -0
- htmlgraph/docs/metadata.py +93 -0
- htmlgraph/docs/migrations.py +232 -0
- htmlgraph/docs/template_engine.py +143 -0
- htmlgraph/docs/templates/_sections/cli_reference.md.j2 +52 -0
- htmlgraph/docs/templates/_sections/core_concepts.md.j2 +29 -0
- htmlgraph/docs/templates/_sections/sdk_basics.md.j2 +69 -0
- htmlgraph/docs/templates/base_agents.md.j2 +78 -0
- htmlgraph/docs/templates/example_user_override.md.j2 +47 -0
- htmlgraph/docs/version_check.py +163 -0
- htmlgraph/edge_index.py +182 -27
- htmlgraph/error_handler.py +544 -0
- htmlgraph/event_log.py +100 -52
- htmlgraph/event_migration.py +13 -4
- htmlgraph/exceptions.py +49 -0
- htmlgraph/file_watcher.py +101 -28
- htmlgraph/find_api.py +75 -63
- htmlgraph/git_events.py +145 -63
- htmlgraph/graph.py +1122 -106
- htmlgraph/hooks/.htmlgraph/.session-warning-state.json +6 -0
- htmlgraph/hooks/.htmlgraph/agents.json +72 -0
- htmlgraph/hooks/.htmlgraph/index.sqlite +0 -0
- htmlgraph/hooks/__init__.py +45 -0
- htmlgraph/hooks/bootstrap.py +169 -0
- htmlgraph/hooks/cigs_pretool_enforcer.py +354 -0
- htmlgraph/hooks/concurrent_sessions.py +208 -0
- htmlgraph/hooks/context.py +350 -0
- htmlgraph/hooks/drift_handler.py +525 -0
- htmlgraph/hooks/event_tracker.py +1314 -0
- htmlgraph/hooks/git_commands.py +175 -0
- htmlgraph/hooks/hooks-config.example.json +12 -0
- htmlgraph/hooks/installer.py +343 -0
- htmlgraph/hooks/orchestrator.py +674 -0
- htmlgraph/hooks/orchestrator_reflector.py +223 -0
- htmlgraph/hooks/post-checkout.sh +28 -0
- htmlgraph/hooks/post-commit.sh +24 -0
- htmlgraph/hooks/post-merge.sh +26 -0
- htmlgraph/hooks/post_tool_use_failure.py +273 -0
- htmlgraph/hooks/post_tool_use_handler.py +257 -0
- htmlgraph/hooks/posttooluse.py +408 -0
- htmlgraph/hooks/pre-commit.sh +94 -0
- htmlgraph/hooks/pre-push.sh +28 -0
- htmlgraph/hooks/pretooluse.py +819 -0
- htmlgraph/hooks/prompt_analyzer.py +637 -0
- htmlgraph/hooks/session_handler.py +668 -0
- htmlgraph/hooks/session_summary.py +395 -0
- htmlgraph/hooks/state_manager.py +504 -0
- htmlgraph/hooks/subagent_detection.py +202 -0
- htmlgraph/hooks/subagent_stop.py +369 -0
- htmlgraph/hooks/task_enforcer.py +255 -0
- htmlgraph/hooks/task_validator.py +177 -0
- htmlgraph/hooks/validator.py +628 -0
- htmlgraph/ids.py +41 -27
- htmlgraph/index.d.ts +286 -0
- htmlgraph/learning.py +767 -0
- htmlgraph/mcp_server.py +69 -23
- htmlgraph/models.py +1586 -87
- htmlgraph/operations/README.md +62 -0
- htmlgraph/operations/__init__.py +79 -0
- htmlgraph/operations/analytics.py +339 -0
- htmlgraph/operations/bootstrap.py +289 -0
- htmlgraph/operations/events.py +244 -0
- htmlgraph/operations/fastapi_server.py +231 -0
- htmlgraph/operations/hooks.py +350 -0
- htmlgraph/operations/initialization.py +597 -0
- htmlgraph/operations/initialization.py.backup +228 -0
- htmlgraph/operations/server.py +303 -0
- htmlgraph/orchestration/__init__.py +58 -0
- htmlgraph/orchestration/claude_launcher.py +179 -0
- htmlgraph/orchestration/command_builder.py +72 -0
- htmlgraph/orchestration/headless_spawner.py +281 -0
- htmlgraph/orchestration/live_events.py +377 -0
- htmlgraph/orchestration/model_selection.py +327 -0
- htmlgraph/orchestration/plugin_manager.py +140 -0
- htmlgraph/orchestration/prompts.py +137 -0
- htmlgraph/orchestration/spawner_event_tracker.py +383 -0
- htmlgraph/orchestration/spawners/__init__.py +16 -0
- htmlgraph/orchestration/spawners/base.py +194 -0
- htmlgraph/orchestration/spawners/claude.py +173 -0
- htmlgraph/orchestration/spawners/codex.py +435 -0
- htmlgraph/orchestration/spawners/copilot.py +294 -0
- htmlgraph/orchestration/spawners/gemini.py +471 -0
- htmlgraph/orchestration/subprocess_runner.py +36 -0
- htmlgraph/orchestration/task_coordination.py +343 -0
- htmlgraph/orchestration.md +563 -0
- htmlgraph/orchestrator-system-prompt-optimized.txt +863 -0
- htmlgraph/orchestrator.py +669 -0
- htmlgraph/orchestrator_config.py +357 -0
- htmlgraph/orchestrator_mode.py +328 -0
- htmlgraph/orchestrator_validator.py +133 -0
- htmlgraph/parallel.py +646 -0
- htmlgraph/parser.py +160 -35
- htmlgraph/path_query.py +608 -0
- htmlgraph/pattern_matcher.py +636 -0
- htmlgraph/planning.py +147 -52
- htmlgraph/pydantic_models.py +476 -0
- htmlgraph/quality_gates.py +350 -0
- htmlgraph/query_builder.py +109 -72
- htmlgraph/query_composer.py +509 -0
- htmlgraph/reflection.py +443 -0
- htmlgraph/refs.py +344 -0
- htmlgraph/repo_hash.py +512 -0
- htmlgraph/repositories/__init__.py +292 -0
- htmlgraph/repositories/analytics_repository.py +455 -0
- htmlgraph/repositories/analytics_repository_standard.py +628 -0
- htmlgraph/repositories/feature_repository.py +581 -0
- htmlgraph/repositories/feature_repository_htmlfile.py +668 -0
- htmlgraph/repositories/feature_repository_memory.py +607 -0
- htmlgraph/repositories/feature_repository_sqlite.py +858 -0
- htmlgraph/repositories/filter_service.py +620 -0
- htmlgraph/repositories/filter_service_standard.py +445 -0
- htmlgraph/repositories/shared_cache.py +621 -0
- htmlgraph/repositories/shared_cache_memory.py +395 -0
- htmlgraph/repositories/track_repository.py +552 -0
- htmlgraph/repositories/track_repository_htmlfile.py +619 -0
- htmlgraph/repositories/track_repository_memory.py +508 -0
- htmlgraph/repositories/track_repository_sqlite.py +711 -0
- htmlgraph/routing.py +8 -19
- htmlgraph/scripts/deploy.py +1 -2
- htmlgraph/sdk/__init__.py +398 -0
- htmlgraph/sdk/__init__.pyi +14 -0
- htmlgraph/sdk/analytics/__init__.py +19 -0
- htmlgraph/sdk/analytics/engine.py +155 -0
- htmlgraph/sdk/analytics/helpers.py +178 -0
- htmlgraph/sdk/analytics/registry.py +109 -0
- htmlgraph/sdk/base.py +484 -0
- htmlgraph/sdk/constants.py +216 -0
- htmlgraph/sdk/core.pyi +308 -0
- htmlgraph/sdk/discovery.py +120 -0
- htmlgraph/sdk/help/__init__.py +12 -0
- htmlgraph/sdk/help/mixin.py +699 -0
- htmlgraph/sdk/mixins/__init__.py +15 -0
- htmlgraph/sdk/mixins/attribution.py +113 -0
- htmlgraph/sdk/mixins/mixin.py +410 -0
- htmlgraph/sdk/operations/__init__.py +12 -0
- htmlgraph/sdk/operations/mixin.py +427 -0
- htmlgraph/sdk/orchestration/__init__.py +17 -0
- htmlgraph/sdk/orchestration/coordinator.py +203 -0
- htmlgraph/sdk/orchestration/spawner.py +204 -0
- htmlgraph/sdk/planning/__init__.py +19 -0
- htmlgraph/sdk/planning/bottlenecks.py +93 -0
- htmlgraph/sdk/planning/mixin.py +211 -0
- htmlgraph/sdk/planning/parallel.py +186 -0
- htmlgraph/sdk/planning/queue.py +210 -0
- htmlgraph/sdk/planning/recommendations.py +87 -0
- htmlgraph/sdk/planning/smart_planning.py +319 -0
- htmlgraph/sdk/session/__init__.py +19 -0
- htmlgraph/sdk/session/continuity.py +57 -0
- htmlgraph/sdk/session/handoff.py +110 -0
- htmlgraph/sdk/session/info.py +309 -0
- htmlgraph/sdk/session/manager.py +103 -0
- htmlgraph/sdk/strategic/__init__.py +26 -0
- htmlgraph/sdk/strategic/mixin.py +563 -0
- htmlgraph/server.py +685 -180
- htmlgraph/services/__init__.py +10 -0
- htmlgraph/services/claiming.py +199 -0
- htmlgraph/session_hooks.py +300 -0
- htmlgraph/session_manager.py +1392 -175
- htmlgraph/session_registry.py +587 -0
- htmlgraph/session_state.py +436 -0
- htmlgraph/session_warning.py +201 -0
- htmlgraph/sessions/__init__.py +23 -0
- htmlgraph/sessions/handoff.py +756 -0
- htmlgraph/setup.py +34 -17
- htmlgraph/spike_index.py +143 -0
- htmlgraph/sync_docs.py +12 -15
- htmlgraph/system_prompts.py +450 -0
- htmlgraph/templates/AGENTS.md.template +366 -0
- htmlgraph/templates/CLAUDE.md.template +97 -0
- htmlgraph/templates/GEMINI.md.template +87 -0
- htmlgraph/templates/orchestration-view.html +350 -0
- htmlgraph/track_builder.py +146 -15
- htmlgraph/track_manager.py +69 -21
- htmlgraph/transcript.py +890 -0
- htmlgraph/transcript_analytics.py +699 -0
- htmlgraph/types.py +323 -0
- htmlgraph/validation.py +115 -0
- htmlgraph/watch.py +8 -5
- htmlgraph/work_type_utils.py +3 -2
- {htmlgraph-0.9.3.data → htmlgraph-0.27.5.data}/data/htmlgraph/dashboard.html +2406 -307
- htmlgraph-0.27.5.data/data/htmlgraph/templates/AGENTS.md.template +366 -0
- htmlgraph-0.27.5.data/data/htmlgraph/templates/CLAUDE.md.template +97 -0
- htmlgraph-0.27.5.data/data/htmlgraph/templates/GEMINI.md.template +87 -0
- {htmlgraph-0.9.3.dist-info → htmlgraph-0.27.5.dist-info}/METADATA +97 -64
- htmlgraph-0.27.5.dist-info/RECORD +337 -0
- {htmlgraph-0.9.3.dist-info → htmlgraph-0.27.5.dist-info}/entry_points.txt +1 -1
- htmlgraph/cli.py +0 -2688
- htmlgraph/sdk.py +0 -709
- htmlgraph-0.9.3.dist-info/RECORD +0 -61
- {htmlgraph-0.9.3.data → htmlgraph-0.27.5.data}/data/htmlgraph/styles.css +0 -0
- {htmlgraph-0.9.3.dist-info → htmlgraph-0.27.5.dist-info}/WHEEL +0 -0
|
@@ -0,0 +1,563 @@
|
|
|
1
|
+
# Orchestration Rules - Cost-First Delegation
|
|
2
|
+
|
|
3
|
+
**CRITICAL: When operating in orchestrator mode, you MUST delegate ALL operations except a minimal set of strategic activities.**
|
|
4
|
+
|
|
5
|
+
## Cost-First Delegation Priority
|
|
6
|
+
|
|
7
|
+
**IMPERATIVE: ALWAYS choose the cheapest/best approach for each task type.**
|
|
8
|
+
|
|
9
|
+
Use this decision tree IN ORDER (check each before falling back):
|
|
10
|
+
|
|
11
|
+
1. **Exploration/Research** → `Task(subagent_type="Explore")` (Uses Gemini FREE, 2M tokens)
|
|
12
|
+
2. **Git/GitHub Operations** → `Bash` tool with `gh` CLI (direct GitHub integration)
|
|
13
|
+
3. **Code Implementation** → `Task(subagent_type="general-purpose")` (Claude native)
|
|
14
|
+
4. **Simple Operations** → `Bash` tool (direct, for ls/pwd/cat/echo type commands)
|
|
15
|
+
5. **Deep Reasoning/Architecture** → Task() with Opus subagent ($$$$)
|
|
16
|
+
6. **Multi-Agent Coordination** → Task() with Sonnet subagent ($$$)
|
|
17
|
+
7. **FALLBACK ONLY** → Task() with Haiku subagent ($$, when above unavailable)
|
|
18
|
+
|
|
19
|
+
### Using Skills for Guidance
|
|
20
|
+
|
|
21
|
+
**Skills provide implementation guidance for common patterns:**
|
|
22
|
+
|
|
23
|
+
```
|
|
24
|
+
# Use /gemini skill for exploration guidance
|
|
25
|
+
Skill(skill="gemini") # Shows how to use Explore agent effectively
|
|
26
|
+
|
|
27
|
+
# Use /codex skill for implementation patterns
|
|
28
|
+
Skill(skill="codex") # Shows code generation best practices
|
|
29
|
+
|
|
30
|
+
# Use /copilot skill for Git/GitHub workflows
|
|
31
|
+
Skill(skill="copilot") # Shows gh CLI commands and patterns
|
|
32
|
+
```
|
|
33
|
+
|
|
34
|
+
### Task() for Claude Subagents
|
|
35
|
+
|
|
36
|
+
**Task() delegates work to Claude-based subagents:**
|
|
37
|
+
|
|
38
|
+
```python
|
|
39
|
+
# Exploration using Explore agent (uses Gemini FREE)
|
|
40
|
+
Task(
|
|
41
|
+
subagent_type="Explore",
|
|
42
|
+
prompt="Analyze codebase patterns for authentication"
|
|
43
|
+
)
|
|
44
|
+
|
|
45
|
+
# Code implementation using general-purpose agent
|
|
46
|
+
Task(
|
|
47
|
+
subagent_type="general-purpose",
|
|
48
|
+
prompt="Implement JWT authentication middleware with tests"
|
|
49
|
+
)
|
|
50
|
+
|
|
51
|
+
# Strategic planning using Opus
|
|
52
|
+
Task(
|
|
53
|
+
subagent_type="general-purpose",
|
|
54
|
+
model="opus",
|
|
55
|
+
prompt="Design authentication architecture"
|
|
56
|
+
)
|
|
57
|
+
```
|
|
58
|
+
|
|
59
|
+
### Bash for Direct Operations
|
|
60
|
+
|
|
61
|
+
**Use Bash tool directly for Git/GitHub operations:**
|
|
62
|
+
|
|
63
|
+
```bash
|
|
64
|
+
# Git operations
|
|
65
|
+
git add . && git commit -m "feat: add auth"
|
|
66
|
+
|
|
67
|
+
# GitHub operations via gh CLI
|
|
68
|
+
gh pr create --title "Add auth" --body "Implements JWT middleware"
|
|
69
|
+
|
|
70
|
+
# Chained operations
|
|
71
|
+
git checkout -b feature/auth && git add . && gh pr create
|
|
72
|
+
```
|
|
73
|
+
|
|
74
|
+
### When to Use Each Approach
|
|
75
|
+
|
|
76
|
+
**Use Explore Agent (Task with subagent_type="Explore"):**
|
|
77
|
+
- ✅ Large codebase searches (FREE via Gemini)
|
|
78
|
+
- ✅ Understanding unfamiliar systems
|
|
79
|
+
- ✅ Documentation research
|
|
80
|
+
- ✅ Analysis requiring large context
|
|
81
|
+
|
|
82
|
+
**Use General-Purpose Agent (Task with subagent_type="general-purpose"):**
|
|
83
|
+
- ✅ Code generation and implementation
|
|
84
|
+
- ✅ Strategic coordination across models
|
|
85
|
+
- ✅ Multi-agent orchestration
|
|
86
|
+
- ✅ Architecture/design decisions
|
|
87
|
+
|
|
88
|
+
**Use Bash Tool:**
|
|
89
|
+
- ✅ Git operations (commit, push, branch)
|
|
90
|
+
- ✅ GitHub operations via gh CLI
|
|
91
|
+
- ✅ Simple file operations (ls, cat, echo)
|
|
92
|
+
- ✅ Build and deployment commands
|
|
93
|
+
|
|
94
|
+
**Cost Comparison**:
|
|
95
|
+
- Exploring 100 files: Explore agent (FREE via Gemini) vs general-purpose Task ($15-25) = 100% savings
|
|
96
|
+
- Git operations: Bash with gh CLI (minimal) vs Task ($5-10) = near 100% savings
|
|
97
|
+
- Code generation: Task ($10-15) = standard Claude rates
|
|
98
|
+
|
|
99
|
+
**Token Cache Consideration**:
|
|
100
|
+
Task() provides 5x cheaper prompt caching for RELATED sequential work within same conversation.
|
|
101
|
+
|
|
102
|
+
## Model Selection Reference
|
|
103
|
+
|
|
104
|
+
For detailed model selection logic, see:
|
|
105
|
+
- `/multi-ai-orchestration` skill (comprehensive guide)
|
|
106
|
+
- `src/python/htmlgraph/orchestration/model_selection.py` (decision matrix)
|
|
107
|
+
- `src/python/htmlgraph/orchestration/headless_spawner.py` (implementation)
|
|
108
|
+
|
|
109
|
+
## Core Philosophy
|
|
110
|
+
|
|
111
|
+
**You don't know the outcome before running a tool.** What looks like "one bash call" often becomes 2, 3, 4+ calls when handling failures, conflicts, hooks, or errors. Delegation preserves strategic context by isolating tactical execution in subagent threads.
|
|
112
|
+
|
|
113
|
+
## Operations You MUST Delegate
|
|
114
|
+
|
|
115
|
+
**ALL operations EXCEPT:**
|
|
116
|
+
- `Task()` - Delegation itself (use spawner subagent types when possible)
|
|
117
|
+
- `AskUserQuestion()` - Clarifying requirements with user
|
|
118
|
+
- `TodoWrite()` - Tracking work items
|
|
119
|
+
- SDK operations - Creating features, spikes, bugs, analytics
|
|
120
|
+
|
|
121
|
+
**Everything else MUST be delegated**, including:
|
|
122
|
+
|
|
123
|
+
### 1. Git Operations - ALWAYS use Copilot
|
|
124
|
+
|
|
125
|
+
**REQUIRED: MUST use Copilot spawner for all git/GitHub operations.**
|
|
126
|
+
|
|
127
|
+
- ❌ NEVER run git commands directly (add, commit, push, branch, merge)
|
|
128
|
+
- ❌ NEVER use generic Task() for git operations (expensive, not specialized)
|
|
129
|
+
- ✅ ALWAYS use Copilot spawner (cheaper, GitHub-specialized)
|
|
130
|
+
|
|
131
|
+
**Why Copilot?** Git operations cascade unpredictably + Copilot is specialized:
|
|
132
|
+
- Commit hooks may fail (need fix + retry)
|
|
133
|
+
- Conflicts may occur (need resolution + retry)
|
|
134
|
+
- Push may fail (need pull + merge + retry)
|
|
135
|
+
- Tests may fail in hooks (need fix + retry)
|
|
136
|
+
- Copilot has native GitHub integration
|
|
137
|
+
|
|
138
|
+
**Cost comparison:**
|
|
139
|
+
```
|
|
140
|
+
Task() for git: $5-10 per workflow
|
|
141
|
+
Copilot for git: $2-3 per workflow (60% savings + better results)
|
|
142
|
+
Direct execution: 7+ tool calls (context pollution)
|
|
143
|
+
```
|
|
144
|
+
|
|
145
|
+
**IMPERATIVE Delegation pattern:**
|
|
146
|
+
```
|
|
147
|
+
# ✅ CORRECT - Use Bash tool with gh CLI for git operations
|
|
148
|
+
Bash("""
|
|
149
|
+
gh pr create --title "Add feature" --body "Description" || \
|
|
150
|
+
git add CLAUDE.md SKILL.md git-commit-push.sh && \
|
|
151
|
+
git commit -m 'docs: enforce strict git delegation in orchestrator directives' && \
|
|
152
|
+
git push origin main
|
|
153
|
+
""")
|
|
154
|
+
|
|
155
|
+
# See /copilot skill for more gh CLI workflows
|
|
156
|
+
|
|
157
|
+
# ❌ INCORRECT - Don't run git commands in multiple separate Bash calls
|
|
158
|
+
Bash("git add file.py")
|
|
159
|
+
Bash("git commit -m 'message'")
|
|
160
|
+
Bash("git push")
|
|
161
|
+
```
|
|
162
|
+
|
|
163
|
+
### 2. Code Changes - Delegate to General-Purpose Agent
|
|
164
|
+
|
|
165
|
+
**REQUIRED: MUST delegate code implementation (unless trivial).**
|
|
166
|
+
|
|
167
|
+
- ❌ NEVER execute code changes directly (expensive, loses strategic context)
|
|
168
|
+
- ❌ Multi-file edits → MUST delegate to general-purpose agent
|
|
169
|
+
- ❌ Implementation requiring research → MUST delegate
|
|
170
|
+
- ❌ Changes with testing requirements → MUST delegate
|
|
171
|
+
- ✅ Single-line typo fixes (OK to do directly)
|
|
172
|
+
|
|
173
|
+
**IMPERATIVE Delegation pattern:**
|
|
174
|
+
```
|
|
175
|
+
# ✅ CORRECT - Use Task() for code implementation
|
|
176
|
+
Task(
|
|
177
|
+
subagent_type="general-purpose",
|
|
178
|
+
prompt="Implement authentication middleware with JWT..."
|
|
179
|
+
)
|
|
180
|
+
|
|
181
|
+
# See /codex skill for implementation patterns
|
|
182
|
+
|
|
183
|
+
# ❌ INCORRECT - Don't execute code changes directly
|
|
184
|
+
Edit(file_path="...", old_string="...", new_string="...")
|
|
185
|
+
Write(file_path="...", content="...")
|
|
186
|
+
```
|
|
187
|
+
|
|
188
|
+
### 3. Research & Exploration - Use Explore Agent (FREE!)
|
|
189
|
+
|
|
190
|
+
**REQUIRED: MUST use Explore agent for exploration (FREE via Gemini!).**
|
|
191
|
+
|
|
192
|
+
- ❌ NEVER use general-purpose Task() for exploration (expensive)
|
|
193
|
+
- ❌ Large codebase searches → MUST use Explore agent (FREE)
|
|
194
|
+
- ❌ Understanding unfamiliar systems → MUST use Explore agent (FREE)
|
|
195
|
+
- ❌ Documentation research → MUST use Explore agent (FREE)
|
|
196
|
+
- ✅ Single file quick lookup (OK to do directly)
|
|
197
|
+
|
|
198
|
+
**IMPERATIVE Delegation pattern:**
|
|
199
|
+
```
|
|
200
|
+
# ✅ CORRECT - Use Explore agent (leverages Gemini FREE tier)
|
|
201
|
+
Task(
|
|
202
|
+
subagent_type="Explore",
|
|
203
|
+
prompt="Analyze all authentication patterns in codebase"
|
|
204
|
+
)
|
|
205
|
+
|
|
206
|
+
# See /gemini skill for exploration guidance
|
|
207
|
+
|
|
208
|
+
# ❌ INCORRECT - Don't use general-purpose Task() (costs $15-25 vs FREE)
|
|
209
|
+
Task(subagent_type="general-purpose", prompt="Explore codebase...")
|
|
210
|
+
```
|
|
211
|
+
|
|
212
|
+
### 4. Testing & Validation - MUST DELEGATE
|
|
213
|
+
|
|
214
|
+
**REQUIRED: MUST delegate testing operations.**
|
|
215
|
+
|
|
216
|
+
- ❌ Running test suites → MUST delegate to general-purpose agent
|
|
217
|
+
- ❌ Debugging test failures → MUST delegate
|
|
218
|
+
- ❌ Quality gate validation → MUST delegate
|
|
219
|
+
- ✅ Checking test command exists (OK to do directly)
|
|
220
|
+
|
|
221
|
+
**Delegation pattern:**
|
|
222
|
+
```
|
|
223
|
+
# ✅ CORRECT - Delegate testing to general-purpose agent
|
|
224
|
+
Task(
|
|
225
|
+
subagent_type="general-purpose",
|
|
226
|
+
prompt="Run pytest suite and fix any failures"
|
|
227
|
+
)
|
|
228
|
+
|
|
229
|
+
# Or use Bash for simple test runs (no fixes)
|
|
230
|
+
Bash("uv run pytest")
|
|
231
|
+
```
|
|
232
|
+
|
|
233
|
+
### 5. Build & Deployment - MUST DELEGATE
|
|
234
|
+
- ❌ Build processes → MUST delegate
|
|
235
|
+
- ❌ Package publishing → MUST delegate
|
|
236
|
+
- ❌ Environment setup → MUST delegate
|
|
237
|
+
- ✅ Checking deployment script exists (OK to do directly)
|
|
238
|
+
|
|
239
|
+
### 6. File Operations - DELEGATE Complex Operations
|
|
240
|
+
- ❌ Batch file operations (multiple files) → MUST delegate
|
|
241
|
+
- ❌ Large file reading/writing → MUST delegate
|
|
242
|
+
- ❌ Complex file transformations → MUST delegate
|
|
243
|
+
- ✅ Reading single config file (OK to do directly)
|
|
244
|
+
- ✅ Writing single small file (OK to do directly)
|
|
245
|
+
|
|
246
|
+
### 7. Analysis & Computation - ALWAYS use Gemini
|
|
247
|
+
|
|
248
|
+
**REQUIRED: MUST use Gemini spawner for analysis (FREE!).**
|
|
249
|
+
|
|
250
|
+
- ❌ Performance profiling → MUST use Gemini spawner (FREE)
|
|
251
|
+
- ❌ Large-scale analysis → MUST use Gemini spawner (FREE)
|
|
252
|
+
- ❌ Complex calculations → MUST delegate
|
|
253
|
+
- ✅ Simple status checks (OK to do directly)
|
|
254
|
+
|
|
255
|
+
## Why Strict Delegation Matters
|
|
256
|
+
|
|
257
|
+
**1. Cost Optimization (NEW - MOST IMPORTANT)**
|
|
258
|
+
- Gemini is FREE for exploration (vs $15-25 with Task)
|
|
259
|
+
- Codex is 70% cheaper for code (vs Task)
|
|
260
|
+
- Copilot is 60% cheaper for git (vs Task)
|
|
261
|
+
- Choosing the right model saves 60-100% per operation
|
|
262
|
+
|
|
263
|
+
**2. Context Preservation**
|
|
264
|
+
- Each tool call consumes tokens
|
|
265
|
+
- Failed operations consume MORE tokens
|
|
266
|
+
- Cascading failures consume MOST tokens
|
|
267
|
+
- Delegation isolates failure to subagent context
|
|
268
|
+
|
|
269
|
+
**3. Parallel Efficiency**
|
|
270
|
+
- Multiple subagents can work simultaneously
|
|
271
|
+
- Orchestrator stays available for decisions
|
|
272
|
+
- Higher throughput on independent tasks
|
|
273
|
+
|
|
274
|
+
**4. Error Isolation**
|
|
275
|
+
- Subagent handles retries and recovery
|
|
276
|
+
- Orchestrator receives clean success/failure
|
|
277
|
+
- No pollution of strategic context
|
|
278
|
+
|
|
279
|
+
**5. Cognitive Clarity**
|
|
280
|
+
- Orchestrator maintains high-level view
|
|
281
|
+
- Subagents handle tactical details
|
|
282
|
+
- Clear separation of concerns
|
|
283
|
+
|
|
284
|
+
## Decision Framework
|
|
285
|
+
|
|
286
|
+
Ask yourself IN ORDER:
|
|
287
|
+
1. **Is this exploration/research?**
|
|
288
|
+
- If yes → MUST use Gemini spawner (FREE)
|
|
289
|
+
|
|
290
|
+
2. **Is this code implementation?**
|
|
291
|
+
- If yes → MUST use Codex spawner (cheaper, specialized)
|
|
292
|
+
|
|
293
|
+
3. **Is this git/GitHub operation?**
|
|
294
|
+
- If yes → MUST use Copilot spawner (cheaper, specialized)
|
|
295
|
+
|
|
296
|
+
4. **Is this strategic coordination?**
|
|
297
|
+
- If yes → MAY use generic Task() with Opus/Sonnet
|
|
298
|
+
|
|
299
|
+
5. **Is this a trivial single tool call?**
|
|
300
|
+
- If yes AND certain → MAY do directly
|
|
301
|
+
- If uncertain → MUST delegate to appropriate spawner
|
|
302
|
+
|
|
303
|
+
## Orchestrator Reflection System
|
|
304
|
+
|
|
305
|
+
When orchestrator mode is enabled (strict), you'll receive reflections after direct tool execution:
|
|
306
|
+
|
|
307
|
+
```
|
|
308
|
+
ORCHESTRATOR REFLECTION: You executed code directly.
|
|
309
|
+
|
|
310
|
+
Ask yourself:
|
|
311
|
+
- Could this have been delegated to Gemini spawner (FREE)?
|
|
312
|
+
- Could this have been delegated to Codex spawner (70% cheaper)?
|
|
313
|
+
- Could this have been delegated to Copilot spawner (60% cheaper)?
|
|
314
|
+
- What if this operation fails - how many retries will consume context?
|
|
315
|
+
- Would parallel spawner Task() calls have been faster?
|
|
316
|
+
```
|
|
317
|
+
|
|
318
|
+
Use these reflections to adjust your delegation habits.
|
|
319
|
+
|
|
320
|
+
## Integration with HtmlGraph SDK
|
|
321
|
+
|
|
322
|
+
Always use SDK to track orchestration activities:
|
|
323
|
+
|
|
324
|
+
```python
|
|
325
|
+
from htmlgraph import SDK
|
|
326
|
+
|
|
327
|
+
sdk = SDK(agent='orchestrator')
|
|
328
|
+
|
|
329
|
+
# Track what you delegate
|
|
330
|
+
feature = sdk.features.create("Implement authentication") \
|
|
331
|
+
.set_priority("high") \
|
|
332
|
+
.add_steps([
|
|
333
|
+
"Research existing auth patterns (delegated to Gemini FREE)",
|
|
334
|
+
"Implement OAuth flow (delegated to Codex)",
|
|
335
|
+
"Add tests (delegated to Codex)",
|
|
336
|
+
"Commit changes (delegated to Copilot)"
|
|
337
|
+
]) \
|
|
338
|
+
.save()
|
|
339
|
+
```
|
|
340
|
+
|
|
341
|
+
Then delegate using Skill tool to invoke spawner skills:
|
|
342
|
+
|
|
343
|
+
```
|
|
344
|
+
# Research (FREE!)
|
|
345
|
+
Skill(
|
|
346
|
+
skill=".claude-plugin:gemini-spawner",
|
|
347
|
+
args="Find all auth-related code and analyze patterns"
|
|
348
|
+
)
|
|
349
|
+
|
|
350
|
+
# Implementation
|
|
351
|
+
Skill(
|
|
352
|
+
skill=".claude-plugin:codex-spawner",
|
|
353
|
+
args="Implement OAuth flow based on research findings"
|
|
354
|
+
)
|
|
355
|
+
|
|
356
|
+
# Git operations
|
|
357
|
+
Skill(
|
|
358
|
+
skill=".claude-plugin:copilot-spawner",
|
|
359
|
+
args="Commit changes with message: 'feat: add OAuth'"
|
|
360
|
+
)
|
|
361
|
+
```
|
|
362
|
+
|
|
363
|
+
**See:** `packages/claude-plugin/skills/multi-ai-orchestration-skill/SKILL.md` for complete model selection patterns
|
|
364
|
+
|
|
365
|
+
## Task ID Pattern for Parallel Coordination
|
|
366
|
+
|
|
367
|
+
**Problem:** Timestamp-based lookup cannot distinguish parallel task results.
|
|
368
|
+
|
|
369
|
+
**Solution:** Generate unique task ID for each delegation.
|
|
370
|
+
|
|
371
|
+
### Helper Functions
|
|
372
|
+
|
|
373
|
+
HtmlGraph provides orchestration helpers in `htmlgraph.orchestration`:
|
|
374
|
+
|
|
375
|
+
```python
|
|
376
|
+
from htmlgraph.orchestration import delegate_with_id, get_results_by_task_id
|
|
377
|
+
|
|
378
|
+
# Generate task ID and enhanced prompt
|
|
379
|
+
task_id, prompt = delegate_with_id(
|
|
380
|
+
"Implement authentication",
|
|
381
|
+
"Add JWT auth to API endpoints...",
|
|
382
|
+
"general-purpose"
|
|
383
|
+
)
|
|
384
|
+
|
|
385
|
+
# Delegate (orchestrator calls Task tool)
|
|
386
|
+
Task(
|
|
387
|
+
prompt=prompt,
|
|
388
|
+
description=f"{task_id}: Implement authentication",
|
|
389
|
+
subagent_type="general-purpose"
|
|
390
|
+
)
|
|
391
|
+
|
|
392
|
+
# Retrieve results by task ID
|
|
393
|
+
results = get_results_by_task_id(sdk, task_id, timeout=120)
|
|
394
|
+
if results["success"]:
|
|
395
|
+
print(results["findings"])
|
|
396
|
+
```
|
|
397
|
+
|
|
398
|
+
### Parallel Task Coordination
|
|
399
|
+
|
|
400
|
+
```python
|
|
401
|
+
from htmlgraph.orchestration import delegate_with_id, get_results_by_task_id
|
|
402
|
+
|
|
403
|
+
# Spawn 3 parallel tasks
|
|
404
|
+
auth_id, auth_prompt = delegate_with_id("Implement auth", "...", "general-purpose")
|
|
405
|
+
test_id, test_prompt = delegate_with_id("Write tests", "...", "general-purpose")
|
|
406
|
+
docs_id, docs_prompt = delegate_with_id("Update docs", "...", "general-purpose")
|
|
407
|
+
|
|
408
|
+
# Delegate all in parallel (single message, multiple Task calls)
|
|
409
|
+
Task(prompt=auth_prompt, description=f"{auth_id}: Implement auth")
|
|
410
|
+
Task(prompt=test_prompt, description=f"{test_id}: Write tests")
|
|
411
|
+
Task(prompt=docs_prompt, description=f"{docs_id}: Update docs")
|
|
412
|
+
|
|
413
|
+
# Retrieve results independently (order doesn't matter)
|
|
414
|
+
auth_results = get_results_by_task_id(sdk, auth_id)
|
|
415
|
+
test_results = get_results_by_task_id(sdk, test_id)
|
|
416
|
+
docs_results = get_results_by_task_id(sdk, docs_id)
|
|
417
|
+
```
|
|
418
|
+
|
|
419
|
+
**Benefits:**
|
|
420
|
+
- Works with parallel delegations
|
|
421
|
+
- Full traceability (Task → task_id → spike → findings)
|
|
422
|
+
- Timeout handling with polling
|
|
423
|
+
- Independent result retrieval
|
|
424
|
+
|
|
425
|
+
## Git Workflow Patterns
|
|
426
|
+
|
|
427
|
+
### Orchestrator Pattern (REQUIRED)
|
|
428
|
+
|
|
429
|
+
When operating as orchestrator, ALWAYS use Copilot spawner skill for git operations:
|
|
430
|
+
|
|
431
|
+
```
|
|
432
|
+
# ✅ CORRECT - Use Skill to invoke Copilot spawner for git workflow
|
|
433
|
+
Skill(
|
|
434
|
+
skill=".claude-plugin:copilot-spawner",
|
|
435
|
+
args="""Commit and push changes to git:
|
|
436
|
+
|
|
437
|
+
Files to commit: [list files or use 'all changes']
|
|
438
|
+
Commit message: "chore: update session tracking"
|
|
439
|
+
|
|
440
|
+
Steps:
|
|
441
|
+
1. Run ./scripts/git-commit-push.sh "chore: update session tracking" --no-confirm
|
|
442
|
+
2. If that script doesn't exist, use manual git workflow:
|
|
443
|
+
- git add [files]
|
|
444
|
+
- git commit -m "message"
|
|
445
|
+
- git push origin main
|
|
446
|
+
3. Handle any errors (pre-commit hooks, conflicts, push failures)
|
|
447
|
+
4. Retry with fixes if needed
|
|
448
|
+
|
|
449
|
+
Report final status: success or failure with details.
|
|
450
|
+
|
|
451
|
+
🔴 CRITICAL - Track in HtmlGraph:
|
|
452
|
+
After successful commit, update the active feature/spike with completion status."""
|
|
453
|
+
)
|
|
454
|
+
|
|
455
|
+
# ❌ INCORRECT - Don't use Task() for spawners (spawns Claude subagent)
|
|
456
|
+
Task(
|
|
457
|
+
prompt="commit changes...",
|
|
458
|
+
subagent_type="general-purpose"
|
|
459
|
+
)
|
|
460
|
+
```
|
|
461
|
+
|
|
462
|
+
**Why Copilot?** Git operations cascade unpredictably + cost savings:
|
|
463
|
+
- Pre-commit hooks may fail → need code fix → retry commit
|
|
464
|
+
- Push may fail due to conflicts → need pull → merge → retry push
|
|
465
|
+
- Tests may fail in hooks → need debugging → fix → retry
|
|
466
|
+
- Copilot is 60% cheaper than Task() for git operations
|
|
467
|
+
|
|
468
|
+
**Cost:**
|
|
469
|
+
- Direct execution: 5-10+ tool calls (with failures and retries)
|
|
470
|
+
- Task() delegation: $5-10 per workflow
|
|
471
|
+
- Copilot delegation: $2-3 per workflow (60% savings)
|
|
472
|
+
|
|
473
|
+
## Troubleshooting Spawner Issues
|
|
474
|
+
|
|
475
|
+
### "Spawner 'gemini' requires 'gemini' CLI"
|
|
476
|
+
|
|
477
|
+
**Meaning:** The Gemini CLI is not installed on the system.
|
|
478
|
+
|
|
479
|
+
**Solution 1: Install the CLI**
|
|
480
|
+
```bash
|
|
481
|
+
# Install Gemini CLI
|
|
482
|
+
# See: https://ai.google.dev/gemini-api/docs/cli
|
|
483
|
+
|
|
484
|
+
# Verify installation
|
|
485
|
+
which gemini
|
|
486
|
+
```
|
|
487
|
+
|
|
488
|
+
**Solution 2: Use different spawner**
|
|
489
|
+
```
|
|
490
|
+
# Try Codex instead
|
|
491
|
+
Skill(skill=".claude-plugin:codex-spawner", args="Same task")
|
|
492
|
+
|
|
493
|
+
# Or fallback to Claude subagent
|
|
494
|
+
Task(subagent_type="haiku", prompt="Same task")
|
|
495
|
+
```
|
|
496
|
+
|
|
497
|
+
### Spawner Execution Timeout
|
|
498
|
+
|
|
499
|
+
**Meaning:** The spawner took longer than expected to complete.
|
|
500
|
+
|
|
501
|
+
**Solution:**
|
|
502
|
+
```
|
|
503
|
+
# Break into smaller subtasks
|
|
504
|
+
Skill(skill=".claude-plugin:gemini-spawner", args="Analyze first 50 files")
|
|
505
|
+
Skill(skill=".claude-plugin:gemini-spawner", args="Analyze next 50 files")
|
|
506
|
+
```
|
|
507
|
+
|
|
508
|
+
### "Operation cannot proceed without required CLI"
|
|
509
|
+
|
|
510
|
+
**Meaning:** The CLI is genuinely not installed, not a transient error.
|
|
511
|
+
|
|
512
|
+
**This is TRANSPARENT - not a silent fallback:**
|
|
513
|
+
- Orchestrator receives explicit error
|
|
514
|
+
- You decide: install, use different spawner, or fallback to Claude
|
|
515
|
+
- Do NOT silently fallback
|
|
516
|
+
|
|
517
|
+
**Example:**
|
|
518
|
+
```python
|
|
519
|
+
# This fails explicitly if CLI missing (no silent fallback)
|
|
520
|
+
try:
|
|
521
|
+
result = Skill(skill=".claude-plugin:gemini-spawner", args="...")
|
|
522
|
+
except CLINotFound as e:
|
|
523
|
+
# Orchestrator handles explicitly
|
|
524
|
+
if ask_user("Install Gemini CLI?"):
|
|
525
|
+
install_gemini()
|
|
526
|
+
result = Skill(skill=".claude-plugin:gemini-spawner", args="...")
|
|
527
|
+
else:
|
|
528
|
+
# Explicit fallback to Claude subagent
|
|
529
|
+
result = Task(subagent_type="haiku", prompt="...")
|
|
530
|
+
```
|
|
531
|
+
|
|
532
|
+
### Spawner Returns Empty/Malformed Results
|
|
533
|
+
|
|
534
|
+
**Solution:**
|
|
535
|
+
```
|
|
536
|
+
# Request explicit output format
|
|
537
|
+
Skill(
|
|
538
|
+
skill=".claude-plugin:gemini-spawner",
|
|
539
|
+
args="""Find all API endpoints and return as JSON:
|
|
540
|
+
{
|
|
541
|
+
"endpoints": [
|
|
542
|
+
{"path": "/api/users", "method": "GET", "file": "src/api/users.py"}
|
|
543
|
+
]
|
|
544
|
+
}"""
|
|
545
|
+
)
|
|
546
|
+
```
|
|
547
|
+
|
|
548
|
+
### Spawner Cost Higher Than Expected
|
|
549
|
+
|
|
550
|
+
**Solution:**
|
|
551
|
+
```
|
|
552
|
+
# Use cheaper spawner for exploration
|
|
553
|
+
Skill(skill=".claude-plugin:gemini-spawner", args="Quick analysis") # FREE
|
|
554
|
+
|
|
555
|
+
# Use Codex for code (cheaper than Claude)
|
|
556
|
+
Skill(skill=".claude-plugin:codex-spawner", args="Code generation") # 70% cheaper
|
|
557
|
+
|
|
558
|
+
# Use Copilot for git (cheaper than Claude)
|
|
559
|
+
Skill(skill=".claude-plugin:copilot-spawner", args="Git operations") # 60% cheaper
|
|
560
|
+
|
|
561
|
+
# Only use Claude subagents for strategic reasoning
|
|
562
|
+
Task(subagent_type="sonnet", prompt="Architecture analysis") # Necessary cost
|
|
563
|
+
```
|