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"
version = "1.0.0"
name = "Analytics Hand"
description = "Autonomous data analytics agent — data collection, analysis, visualization, dashboards, and automated reporting"
category = "data"
@@ -28,6 +29,10 @@ aliases = [
"dashboard",
"automated report",
"statistical analysis",
"analyze data",
"run analytics",
"data insights",
"generate report",
]
weak_aliases = [
"visualization",
@@ -37,6 +42,8 @@ weak_aliases = [
"excel analysis",
"data pipeline",
"etl",
"metrics",
"trends",
]
[[requires]]
+7
View File
@@ -1,4 +1,5 @@
id = "apitester"
version = "1.0.0"
name = "API Tester Hand"
description = "Autonomous API testing agent — endpoint discovery, request validation, load testing, and regression detection"
category = "development"
@@ -29,6 +30,10 @@ aliases = [
"load test",
"regression test",
"api discovery",
"test api",
"api testing",
"api validation",
"test endpoint",
]
weak_aliases = [
"api debug",
@@ -36,6 +41,8 @@ weak_aliases = [
"swagger",
"openapi",
"postman",
"stress test",
"http test",
]
# ─── Configurable settings ───────────────────────────────────────────────────
+4 -1
View File
@@ -1,4 +1,5 @@
id = "browser"
version = "1.0.0"
name = "Browser Hand"
description = "Autonomous web browser — navigates sites, fills forms, clicks buttons, and completes multi-step web tasks with user approval for purchases"
category = "productivity"
@@ -33,8 +34,10 @@ aliases = [
"click button",
"web login",
"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]]
key = "python3"
+22
View File
@@ -1,4 +1,5 @@
id = "clip"
version = "1.0.0"
name = "Clip Hand"
description = "Turns long-form video into viral short clips with captions and thumbnails"
category = "content"
@@ -199,6 +200,13 @@ description = "Phone number in international format, no + or spaces (e.g. 141555
setting_type = "text"
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]
@@ -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.
### 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
Look at the `Publish Clips To` setting from User Configuration:
- 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 `***`
- 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
- In `approval_mode` (default), ALWAYS write to queue — NEVER publish without user review
"""
[dashboard]
+5 -1
View File
@@ -1,4 +1,5 @@
id = "collector"
version = "1.0.0"
name = "Collector Hand"
description = "Autonomous intelligence collector — monitors any target continuously with change detection and knowledge graphs"
category = "data"
@@ -29,8 +30,11 @@ aliases = [
"collect intelligence",
"osint",
"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 ───────────────────────────────────────────────────
+26 -6
View File
@@ -1,4 +1,5 @@
id = "devops"
version = "1.0.0"
name = "DevOps Hand"
description = "Autonomous DevOps engineer — CI/CD management, infrastructure monitoring, deployment automation, and incident response"
category = "development"
@@ -186,6 +187,13 @@ label = "Auto-rollback to previous version"
value = "blue_green"
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]
@@ -217,8 +225,9 @@ curl --version | head -1
Load context:
1. memory_recall `devops_hand_state` — load previous monitoring data and incident history
2. Read **User Configuration** for infrastructure, ci_platform, service_urls, etc.
3. knowledge_query for known infrastructure topology and previous incidents
2. Read **User Configuration** for infrastructure, ci_platform, service_urls, approval_mode, etc.
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:
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
2. Check prerequisites (build artifacts, configs, secrets)
3. Execute deployment with rollback plan
@@ -326,10 +346,9 @@ For each alert, provide:
When an incident is detected or reported:
1. **Assess**: Determine scope and severity
2. **Mitigate**: Take immediate action to reduce impact
3. **Investigate**: Find root cause using logs and metrics
4. **Resolve**: Fix the underlying issue
5. **Document**: Create incident report with timeline
2. **Investigate**: Find root cause using logs and metrics (non-destructive — always allowed)
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. **Document**: Create incident report with timeline
Incident severity levels:
- **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
- Respect rate limits on CI/CD and cloud provider APIs
- 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]
+6 -1
View File
@@ -1,4 +1,5 @@
id = "lead"
version = "1.0.0"
name = "Lead Hand"
description = "Autonomous lead generation — discovers, enriches, and delivers qualified leads on a schedule"
category = "data"
@@ -27,8 +28,12 @@ aliases = [
"prospect list",
"find customers",
"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 ───────────────────────────────────────────────────
+1
View File
@@ -1,4 +1,5 @@
id = "linkedin"
version = "1.0.0"
name = "LinkedIn Hand"
description = "Autonomous LinkedIn manager — profile optimization, content creation, networking, and professional engagement"
category = "communication"
+5 -1
View File
@@ -1,4 +1,5 @@
id = "predictor"
version = "1.0.0"
name = "Predictor Hand"
description = "Autonomous future predictor — collects signals, builds reasoning chains, makes calibrated predictions, and tracks accuracy"
category = "data"
@@ -28,8 +29,11 @@ aliases = [
"probability",
"likelihood",
"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 ───────────────────────────────────────────────────
+1
View File
@@ -1,4 +1,5 @@
id = "reddit"
version = "1.0.0"
name = "Reddit Hand"
description = "Autonomous Reddit manager — monitors subreddits, posts content, replies to threads, and tracks karma and engagement"
category = "communication"
+6 -1
View File
@@ -1,4 +1,5 @@
id = "researcher"
version = "1.0.0"
name = "Researcher Hand"
description = "Autonomous deep researcher — exhaustive investigation, cross-referencing, fact-checking, and structured reports"
category = "productivity"
@@ -28,8 +29,12 @@ aliases = [
"systematic review",
"landscape analysis",
"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 ───────────────────────────────────────────────────
+6 -1
View File
@@ -1,4 +1,5 @@
id = "strategist"
version = "1.0.0"
name = "Strategist Hand"
description = "Autonomous strategy analyst — market research, competitive analysis, business planning, and strategic recommendations"
category = "productivity"
@@ -28,8 +29,12 @@ aliases = [
"competitive analysis",
"business plan",
"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 ───────────────────────────────────────────────────
+1
View File
@@ -1,4 +1,5 @@
id = "trader"
version = "1.0.0"
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"
category = "data"
+3 -2
View File
@@ -1,4 +1,5 @@
id = "twitter"
version = "1.0.0"
name = "Twitter Hand"
description = "Autonomous Twitter/X manager — content creation, scheduled posting, engagement, and performance tracking"
category = "communication"
@@ -22,8 +23,8 @@ tools = [
]
[routing]
aliases = ["twitter", "tweet", "x.com", "scheduled tweet"]
weak_aliases = ["social media post", "engagement tracking"]
aliases = ["twitter", "tweet", "x.com", "scheduled tweet", "post tweet", "twitter thread"]
weak_aliases = ["social media post", "engagement tracking", "twitter management", "tweet scheduler"]
[[requires]]
key = "TWITTER_BEARER_TOKEN"