From 5d947e8da0f955d469070ffe6d8224f57aaefa11 Mon Sep 17 00:00:00 2001 From: Evan Hu Date: Sun, 22 Mar 2026 16:42:27 +0900 Subject: [PATCH] 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 --- hands/analytics/HAND.toml | 7 +++++++ hands/apitester/HAND.toml | 7 +++++++ hands/browser/HAND.toml | 5 ++++- hands/clip/HAND.toml | 22 ++++++++++++++++++++++ hands/collector/HAND.toml | 6 +++++- hands/devops/HAND.toml | 32 ++++++++++++++++++++++++++------ hands/lead/HAND.toml | 7 ++++++- hands/linkedin/HAND.toml | 1 + hands/predictor/HAND.toml | 6 +++++- hands/reddit/HAND.toml | 1 + hands/researcher/HAND.toml | 7 ++++++- hands/strategist/HAND.toml | 7 ++++++- hands/trader/HAND.toml | 1 + hands/twitter/HAND.toml | 5 +++-- 14 files changed, 100 insertions(+), 14 deletions(-) diff --git a/hands/analytics/HAND.toml b/hands/analytics/HAND.toml index dcb9f0c..f2025ab 100644 --- a/hands/analytics/HAND.toml +++ b/hands/analytics/HAND.toml @@ -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]] diff --git a/hands/apitester/HAND.toml b/hands/apitester/HAND.toml index 1f95c4e..3f91665 100644 --- a/hands/apitester/HAND.toml +++ b/hands/apitester/HAND.toml @@ -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 ─────────────────────────────────────────────────── diff --git a/hands/browser/HAND.toml b/hands/browser/HAND.toml index 5773903..1a6c56b 100644 --- a/hands/browser/HAND.toml +++ b/hands/browser/HAND.toml @@ -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" diff --git a/hands/clip/HAND.toml b/hands/clip/HAND.toml index 7da5164..075f23f 100644 --- a/hands/clip/HAND.toml +++ b/hands/clip/HAND.toml @@ -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] diff --git a/hands/collector/HAND.toml b/hands/collector/HAND.toml index 7c58a33..509c5aa 100644 --- a/hands/collector/HAND.toml +++ b/hands/collector/HAND.toml @@ -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 ─────────────────────────────────────────────────── diff --git a/hands/devops/HAND.toml b/hands/devops/HAND.toml index 9c0b9ba..4dcc7d4 100644 --- a/hands/devops/HAND.toml +++ b/hands/devops/HAND.toml @@ -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] diff --git a/hands/lead/HAND.toml b/hands/lead/HAND.toml index f320d93..911c778 100644 --- a/hands/lead/HAND.toml +++ b/hands/lead/HAND.toml @@ -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 ─────────────────────────────────────────────────── diff --git a/hands/linkedin/HAND.toml b/hands/linkedin/HAND.toml index 2aa2d8a..fdc633d 100644 --- a/hands/linkedin/HAND.toml +++ b/hands/linkedin/HAND.toml @@ -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" diff --git a/hands/predictor/HAND.toml b/hands/predictor/HAND.toml index e6d0445..45be6c3 100644 --- a/hands/predictor/HAND.toml +++ b/hands/predictor/HAND.toml @@ -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 ─────────────────────────────────────────────────── diff --git a/hands/reddit/HAND.toml b/hands/reddit/HAND.toml index e1620e5..be98dc7 100644 --- a/hands/reddit/HAND.toml +++ b/hands/reddit/HAND.toml @@ -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" diff --git a/hands/researcher/HAND.toml b/hands/researcher/HAND.toml index 644dbb4..a97a2a7 100644 --- a/hands/researcher/HAND.toml +++ b/hands/researcher/HAND.toml @@ -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 ─────────────────────────────────────────────────── diff --git a/hands/strategist/HAND.toml b/hands/strategist/HAND.toml index 5ef2eb4..b1c75df 100644 --- a/hands/strategist/HAND.toml +++ b/hands/strategist/HAND.toml @@ -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 ─────────────────────────────────────────────────── diff --git a/hands/trader/HAND.toml b/hands/trader/HAND.toml index 7142908..5d96eb4 100644 --- a/hands/trader/HAND.toml +++ b/hands/trader/HAND.toml @@ -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" diff --git a/hands/twitter/HAND.toml b/hands/twitter/HAND.toml index b731cfc..0f1d9c0 100644 --- a/hands/twitter/HAND.toml +++ b/hands/twitter/HAND.toml @@ -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"