feat(hands): add version fields, approval_mode, and stronger routing aliases

- Add version = "1.0.0" to all 14 hands
- Add approval_mode toggle to clip and devops hands (queue actions
  for user review before executing)
- Strengthen routing aliases for analytics, apitester, browser,
  collector, devops, lead, predictor, researcher, strategist
This commit is contained in:
Evan Hu committed 2026-03-22 16:42:27 +09:00
1 parent 6e48be1e31
commit 5d947e8da0
14 files changed
+100 -14

No files matched your search

+7
View File
@@ -1,4 +1,5 @@
id = "analytics" id = "analytics"
version = "1.0.0"
name = "Analytics Hand" name = "Analytics Hand"
description = "Autonomous data analytics agent — data collection, analysis, visualization, dashboards, and automated reporting" description = "Autonomous data analytics agent — data collection, analysis, visualization, dashboards, and automated reporting"
category = "data" category = "data"
@@ -28,6 +29,10 @@ aliases = [
"dashboard", "dashboard",
"automated report", "automated report",
"statistical analysis", "statistical analysis",
"analyze data",
"run analytics",
"data insights",
"generate report",
] ]
weak_aliases = [ weak_aliases = [
"visualization", "visualization",
@@ -37,6 +42,8 @@ weak_aliases = [
"excel analysis", "excel analysis",
"data pipeline", "data pipeline",
"etl", "etl",
"metrics",
"trends",
] ]
[[requires]] [[requires]]
+7
View File
@@ -1,4 +1,5 @@
id = "apitester" id = "apitester"
version = "1.0.0"
name = "API Tester Hand" name = "API Tester Hand"
description = "Autonomous API testing agent — endpoint discovery, request validation, load testing, and regression detection" description = "Autonomous API testing agent — endpoint discovery, request validation, load testing, and regression detection"
category = "development" category = "development"
@@ -29,6 +30,10 @@ aliases = [
"load test", "load test",
"regression test", "regression test",
"api discovery", "api discovery",
"test api",
"api testing",
"api validation",
"test endpoint",
] ]
weak_aliases = [ weak_aliases = [
"api debug", "api debug",
@@ -36,6 +41,8 @@ weak_aliases = [
"swagger", "swagger",
"openapi", "openapi",
"postman", "postman",
"stress test",
"http test",
] ]
# ─── Configurable settings ─────────────────────────────────────────────────── # ─── Configurable settings ───────────────────────────────────────────────────
+4 -1
View File
@@ -1,4 +1,5 @@
id = "browser" id = "browser"
version = "1.0.0"
name = "Browser Hand" name = "Browser Hand"
description = "Autonomous web browser — navigates sites, fills forms, clicks buttons, and completes multi-step web tasks with user approval for purchases" description = "Autonomous web browser — navigates sites, fills forms, clicks buttons, and completes multi-step web tasks with user approval for purchases"
category = "productivity" category = "productivity"
@@ -33,8 +34,10 @@ aliases = [
"click button", "click button",
"web login", "web login",
"browser automation", "browser automation",
"browse web",
"scrape page",
] ]
weak_aliases = ["web page", "submit form", "web task"] weak_aliases = ["web page", "submit form", "web task", "browser task", "open browser", "web automation"]
[[requires]] [[requires]]
key = "python3" key = "python3"
+22
View File
@@ -1,4 +1,5 @@
id = "clip" id = "clip"
version = "1.0.0"
name = "Clip Hand" name = "Clip Hand"
description = "Turns long-form video into viral short clips with captions and thumbnails" description = "Turns long-form video into viral short clips with captions and thumbnails"
category = "content" category = "content"
@@ -199,6 +200,13 @@ description = "Phone number in international format, no + or spaces (e.g. 141555
setting_type = "text" setting_type = "text"
default = "" default = ""
[[settings]]
key = "approval_mode"
label = "Approval Mode"
description = "Queue clips for your review before publishing to channels"
setting_type = "toggle"
default = "true"
# ─── Agent configuration ───────────────────────────────────────────────────── # ─── Agent configuration ─────────────────────────────────────────────────────
[agent] [agent]
@@ -469,6 +477,19 @@ Use `del clip_N.mp4 clip_N_vert.mp4` on Windows, `rm clip_N.mp4 clip_N_vert.mp4`
After all clips are processed and before the final report, check if publishing is configured. After all clips are processed and before the final report, check if publishing is configured.
### Step 0: Check approval_mode
If `approval_mode` is ENABLED (default):
1. Write each clip's publish action to `clip_publish_queue.json`:
```json
[{"id": "pub_001", "clip_file": "clip_1_final.mp4", "title": "clip title", "targets": ["telegram", "whatsapp"], "created": "timestamp", "status": "pending"}]
```
2. Write a human-readable `clip_publish_queue_preview.md` listing each clip, its title, and target platforms
3. event_publish "clip_publish_queue_updated" with queue size
4. Do NOT publish — wait for user to approve via the queue file
5. Skip the remaining publish steps below and proceed to Phase 7
If `approval_mode` is DISABLED, continue with the publish steps below.
### Step 1: Check settings ### Step 1: Check settings
Look at the `Publish Clips To` setting from User Configuration: Look at the `Publish Clips To` setting from User Configuration:
- If `local_only`, absent, or empty → skip this phase entirely - If `local_only`, absent, or empty → skip this phase entirely
@@ -587,6 +608,7 @@ Update stats via memory_store:
- Never expose API tokens (Telegram, WhatsApp) in reports or summaries — always mask as `***` - Never expose API tokens (Telegram, WhatsApp) in reports or summaries — always mask as `***`
- Publishing errors are non-fatal — if a platform fails, log the error and continue with remaining clips/platforms - Publishing errors are non-fatal — if a platform fails, log the error and continue with remaining clips/platforms
- Respect rate limits: add 1-second delay between sends when publishing more than 3 clips - Respect rate limits: add 1-second delay between sends when publishing more than 3 clips
- In `approval_mode` (default), ALWAYS write to queue — NEVER publish without user review
""" """
[dashboard] [dashboard]
+5 -1
View File
@@ -1,4 +1,5 @@
id = "collector" id = "collector"
version = "1.0.0"
name = "Collector Hand" name = "Collector Hand"
description = "Autonomous intelligence collector — monitors any target continuously with change detection and knowledge graphs" description = "Autonomous intelligence collector — monitors any target continuously with change detection and knowledge graphs"
category = "data" category = "data"
@@ -29,8 +30,11 @@ aliases = [
"collect intelligence", "collect intelligence",
"osint", "osint",
"change detection", "change detection",
"gather info",
"market intelligence",
"competitive analysis",
] ]
weak_aliases = ["watch", "signals", "continuous monitoring"] weak_aliases = ["watch", "signals", "continuous monitoring", "surveillance", "intel", "news monitoring"]
# ─── Configurable settings ─────────────────────────────────────────────────── # ─── Configurable settings ───────────────────────────────────────────────────
+26 -6
View File
@@ -1,4 +1,5 @@
id = "devops" id = "devops"
version = "1.0.0"
name = "DevOps Hand" name = "DevOps Hand"
description = "Autonomous DevOps engineer — CI/CD management, infrastructure monitoring, deployment automation, and incident response" description = "Autonomous DevOps engineer — CI/CD management, infrastructure monitoring, deployment automation, and incident response"
category = "development" category = "development"
@@ -186,6 +187,13 @@ label = "Auto-rollback to previous version"
value = "blue_green" value = "blue_green"
label = "Blue-green switch back" label = "Blue-green switch back"
[[settings]]
key = "approval_mode"
label = "Approval Mode"
description = "Queue deployment and infrastructure actions for your review instead of executing directly"
setting_type = "toggle"
default = "true"
# ─── Agent configuration ───────────────────────────────────────────────────── # ─── Agent configuration ─────────────────────────────────────────────────────
[agent] [agent]
@@ -217,8 +225,9 @@ curl --version | head -1
Load context: Load context:
1. memory_recall `devops_hand_state` — load previous monitoring data and incident history 1. memory_recall `devops_hand_state` — load previous monitoring data and incident history
2. Read **User Configuration** for infrastructure, ci_platform, service_urls, etc. 2. Read **User Configuration** for infrastructure, ci_platform, service_urls, approval_mode, etc.
3. knowledge_query for known infrastructure topology and previous incidents 3. file_read `devops_queue.json` if it exists — pending deployment/remediation actions
4. knowledge_query for known infrastructure topology and previous incidents
--- ---
@@ -285,6 +294,17 @@ Identify optimization opportunities:
When asked to deploy or manage deployments: When asked to deploy or manage deployments:
If `approval_mode` is ENABLED (default):
1. Build a deployment proposal with target, environment, artifacts, and rollback plan
2. Write the proposal to `devops_queue.json`:
```json
[{"id": "deploy_001", "action": "deploy", "target": "production", "artifact": "app:v1.2.3", "rollback_plan": "revert to v1.2.2", "created": "timestamp", "status": "pending"}]
```
3. Write a human-readable `devops_queue_preview.md` with deployment details and risk assessment
4. event_publish "devops_queue_updated" with queue size
5. Do NOT execute — wait for user to approve via the queue file
If `approval_mode` is DISABLED:
1. Verify the deployment target and environment 1. Verify the deployment target and environment
2. Check prerequisites (build artifacts, configs, secrets) 2. Check prerequisites (build artifacts, configs, secrets)
3. Execute deployment with rollback plan 3. Execute deployment with rollback plan
@@ -326,10 +346,9 @@ For each alert, provide:
When an incident is detected or reported: When an incident is detected or reported:
1. **Assess**: Determine scope and severity 1. **Assess**: Determine scope and severity
2. **Mitigate**: Take immediate action to reduce impact 2. **Investigate**: Find root cause using logs and metrics (non-destructive — always allowed)
3. **Investigate**: Find root cause using logs and metrics 3. **Mitigate/Resolve**: If `approval_mode` is ENABLED, write the proposed remediation action to `devops_queue.json` and event_publish "devops_queue_updated" — do NOT execute destructive actions (restarts, rollbacks, scaling changes) without user approval. If `approval_mode` is DISABLED, take immediate action to reduce impact and fix the underlying issue.
4. **Resolve**: Fix the underlying issue 4. **Document**: Create incident report with timeline
5. **Document**: Create incident report with timeline
Incident severity levels: Incident severity levels:
- **SEV1**: Full service outage, all users affected - **SEV1**: Full service outage, all users affected
@@ -438,6 +457,7 @@ Stop the current monitoring/incident session when ANY of these conditions is met
- When in doubt, escalate to the user rather than taking risky action - When in doubt, escalate to the user rather than taking risky action
- Respect rate limits on CI/CD and cloud provider APIs - Respect rate limits on CI/CD and cloud provider APIs
- Keep incident reports factual and blame-free - Keep incident reports factual and blame-free
- In `approval_mode` (default), ALWAYS write to queue — NEVER execute deployments or destructive actions without user review
""" """
[dashboard] [dashboard]
+6 -1
View File
@@ -1,4 +1,5 @@
id = "lead" id = "lead"
version = "1.0.0"
name = "Lead Hand" name = "Lead Hand"
description = "Autonomous lead generation — discovers, enriches, and delivers qualified leads on a schedule" description = "Autonomous lead generation — discovers, enriches, and delivers qualified leads on a schedule"
category = "data" category = "data"
@@ -27,8 +28,12 @@ aliases = [
"prospect list", "prospect list",
"find customers", "find customers",
"contact enrichment", "contact enrichment",
"find leads",
"prospect research",
"find companies",
"b2b leads",
] ]
weak_aliases = ["sales", "outreach", "company list"] weak_aliases = ["sales", "outreach", "company list", "sales leads", "lead list", "prospecting"]
# ─── Configurable settings ─────────────────────────────────────────────────── # ─── Configurable settings ───────────────────────────────────────────────────
+1
View File
@@ -1,4 +1,5 @@
id = "linkedin" id = "linkedin"
version = "1.0.0"
name = "LinkedIn Hand" name = "LinkedIn Hand"
description = "Autonomous LinkedIn manager — profile optimization, content creation, networking, and professional engagement" description = "Autonomous LinkedIn manager — profile optimization, content creation, networking, and professional engagement"
category = "communication" category = "communication"
+5 -1
View File
@@ -1,4 +1,5 @@
id = "predictor" id = "predictor"
version = "1.0.0"
name = "Predictor Hand" name = "Predictor Hand"
description = "Autonomous future predictor — collects signals, builds reasoning chains, makes calibrated predictions, and tracks accuracy" description = "Autonomous future predictor — collects signals, builds reasoning chains, makes calibrated predictions, and tracks accuracy"
category = "data" category = "data"
@@ -28,8 +29,11 @@ aliases = [
"probability", "probability",
"likelihood", "likelihood",
"scenario analysis", "scenario analysis",
"predict market",
"market prediction",
"price forecast",
] ]
weak_aliases = ["trend analysis", "calibration"] weak_aliases = ["trend analysis", "calibration", "future outlook", "what will happen", "prediction"]
# ─── Configurable settings ─────────────────────────────────────────────────── # ─── Configurable settings ───────────────────────────────────────────────────
+1
View File
@@ -1,4 +1,5 @@
id = "reddit" id = "reddit"
version = "1.0.0"
name = "Reddit Hand" name = "Reddit Hand"
description = "Autonomous Reddit manager — monitors subreddits, posts content, replies to threads, and tracks karma and engagement" description = "Autonomous Reddit manager — monitors subreddits, posts content, replies to threads, and tracks karma and engagement"
category = "communication" category = "communication"
+6 -1
View File
@@ -1,4 +1,5 @@
id = "researcher" id = "researcher"
version = "1.0.0"
name = "Researcher Hand" name = "Researcher Hand"
description = "Autonomous deep researcher — exhaustive investigation, cross-referencing, fact-checking, and structured reports" description = "Autonomous deep researcher — exhaustive investigation, cross-referencing, fact-checking, and structured reports"
category = "productivity" category = "productivity"
@@ -28,8 +29,12 @@ aliases = [
"systematic review", "systematic review",
"landscape analysis", "landscape analysis",
"exhaustive investigation", "exhaustive investigation",
"investigate",
"research topic",
"find sources",
"fact check",
] ]
weak_aliases = ["research", "fact check", "cross reference"] weak_aliases = ["research", "cross reference", "literature review", "look into", "dig into"]
# ─── Configurable settings ─────────────────────────────────────────────────── # ─── Configurable settings ───────────────────────────────────────────────────
+6 -1
View File
@@ -1,4 +1,5 @@
id = "strategist" id = "strategist"
version = "1.0.0"
name = "Strategist Hand" name = "Strategist Hand"
description = "Autonomous strategy analyst — market research, competitive analysis, business planning, and strategic recommendations" description = "Autonomous strategy analyst — market research, competitive analysis, business planning, and strategic recommendations"
category = "productivity" category = "productivity"
@@ -28,8 +29,12 @@ aliases = [
"competitive analysis", "competitive analysis",
"business plan", "business plan",
"market research", "market research",
"business strategy",
"swot analysis",
"market strategy",
"competitive strategy",
] ]
weak_aliases = ["swot", "industry report", "competitive landscape"] weak_aliases = ["swot", "industry report", "competitive landscape", "porter analysis", "go to market", "strategy memo"]
# ─── Configurable settings ─────────────────────────────────────────────────── # ─── Configurable settings ───────────────────────────────────────────────────
+1
View File
@@ -1,4 +1,5 @@
id = "trader" id = "trader"
version = "1.0.0"
name = "Trading Hand" name = "Trading Hand"
description = "Autonomous market intelligence and trading engine — multi-signal analysis, adversarial bull/bear reasoning, calibrated confidence scoring, strict risk management, and portfolio-level analytics" description = "Autonomous market intelligence and trading engine — multi-signal analysis, adversarial bull/bear reasoning, calibrated confidence scoring, strict risk management, and portfolio-level analytics"
category = "data" category = "data"
+3 -2
View File
@@ -1,4 +1,5 @@
id = "twitter" id = "twitter"
version = "1.0.0"
name = "Twitter Hand" name = "Twitter Hand"
description = "Autonomous Twitter/X manager — content creation, scheduled posting, engagement, and performance tracking" description = "Autonomous Twitter/X manager — content creation, scheduled posting, engagement, and performance tracking"
category = "communication" category = "communication"
@@ -22,8 +23,8 @@ tools = [
] ]
[routing] [routing]
aliases = ["twitter", "tweet", "x.com", "scheduled tweet"] aliases = ["twitter", "tweet", "x.com", "scheduled tweet", "post tweet", "twitter thread"]
weak_aliases = ["social media post", "engagement tracking"] weak_aliases = ["social media post", "engagement tracking", "twitter management", "tweet scheduler"]
[[requires]] [[requires]]
key = "TWITTER_BEARER_TOKEN" key = "TWITTER_BEARER_TOKEN"