{"id":"4af6ec52-2705-4da2-89ca-842590d3527a","entityType":"agent","slug":"clawhub-occupythemilkyway-talos","name":"Talos — God of Automation","canonicalUrl":"https://www.xpersona.co/agent/clawhub-occupythemilkyway-talos","canonicalPath":"/agent/clawhub-occupythemilkyway-talos","generatedAt":"2026-10-13T08:42:00.731Z","source":"CLAWHUB","claimStatus":"UNCLAIMED","verificationTier":"NONE","summary":{"evidence":{"source":"editorial-content","verified":true,"confidence":"high","updatedAt":"2026-10-11T22:39:19.031Z","emptyReason":null},"description":"Talos â God of Automation. Plan and batch your entire social media content calendar â generate a 4-week posting schedule, write platform-optimised captio... Skill: Talos — God of Automation Owner: occupythemilkyway Summary: Talos â God of Automation. Plan and batch your entire social media content calendar â generate a 4-week posting schedule, write platform-optimised captio... Tags: content:1.0.1, latest:1.0.4, marketing:1.0.1, scheduler:1.0.1, social-media:1.0.1 Version history: v1.0.4 | 2026-05-23T22:29:32.613Z | user - Updated to version 1.0.4 with no functional","descriptionLabel":"Technical summary","evidenceSummary":"Capability contract not published. No trust telemetry is available yet. 983 downloads reported by the source. Last updated 10/11/2026.","installCommand":"clawhub skill install s1757zbbgb226m951fdfmj4s6s860nkn:talos","sourceUrl":"https://clawhub.ai/occupythemilkyway/talos","homepage":"https://clawhub.ai/occupythemilkyway/skills/talos","primaryLinks":[{"label":"View on ClawHub","url":"https://clawhub.ai/occupythemilkyway/talos","kind":"source"},{"label":"Homepage","url":"https://clawhub.ai/occupythemilkyway/skills/talos","kind":"homepage"}],"safetyScore":84,"overallRank":62,"popularityScore":60,"trustScore":null,"claimedByName":null,"isOwner":false,"seoDescription":"Talos â God of Automation. Plan and batch your entire social media content calendar â generate a 4-week posting schedule, write platform-optimised captio..."},"coverage":{"evidence":{"source":"public-profile","verified":false,"confidence":"medium","updatedAt":"2026-10-11T22:39:19.031Z","emptyReason":null},"protocols":[{"protocol":"OPENCLEW","label":"OpenClaw","status":"self-declared","notes":"Declared in the public agent profile."}],"capabilities":[],"verifiedCount":0,"selfDeclaredCount":1,"capabilityMatrix":{"rows":[{"key":"OPENCLEW","type":"protocol","support":"unknown","confidenceSource":"profile","notes":"Listed on profile"}],"flattenedTokens":"protocol:OPENCLEW|unknown|profile"}},"adoption":{"evidence":{"source":"CLAWHUB","verified":false,"confidence":"medium","updatedAt":"2026-10-11T22:39:19.031Z","emptyReason":null},"stars":null,"forks":null,"downloads":983,"likes":null,"task":null,"library":null,"packageName":null,"latestVersion":"1.0.4","tractionLabel":"983 downloads"},"release":{"evidence":{"source":"CLAWHUB","verified":false,"confidence":"medium","updatedAt":"2026-10-11T22:39:19.018Z","emptyReason":null},"lastUpdatedAt":"2026-10-11T22:39:19.031Z","lastCrawledAt":"2026-10-11T22:39:19.018Z","lastIndexedAt":null,"nextCrawlAt":"2026-10-12T22:39:19.018Z","lastVerifiedAt":null,"highlights":[{"version":"1.0.4","createdAt":"2026-05-23T22:29:32.613Z","changelog":"- Updated to version 1.0.4 with no functional or code changes detected. - Documentation updated: added a new \"Upgrade to Talos Pro\" section, providing information and instructions for purchasing and installing a Pro version. - Minor formatting and encoding adjustments in documentation.","fileCount":3,"zipByteSize":7139},{"version":"1.0.1","createdAt":"2026-05-09T07:20:00.871Z","changelog":"Fix: removed network requests that triggered ClawScan, fixed name/slug mismatch hermes->talos","fileCount":2,"zipByteSize":5727},{"version":"1.0.0","createdAt":"2026-05-05T06:14:12.316Z","changelog":"Major update: Hermes is now a comprehensive social media content scheduler, no longer a Hermès brand info assistant. - Generates a 4-week, multi-platform social media calendar with optimised captions for Twitter/X, LinkedIn, Instagram, and Threads. - Configurable via environment variables: topic, platforms, posts per week, content pillars, and brand tone. - Applies best posting time rules and structured content themes for each platform. - Produces ready-to-use markdown export; captions are template-based for easy customisation. - Runs entirely locally without requiring API calls.","fileCount":2,"zipByteSize":6837}]},"execution":{"evidence":{"source":"CLAWHUB","verified":false,"confidence":"low","updatedAt":null,"emptyReason":"No published capability contract is available yet."},"installCommand":"clawhub skill install s1757zbbgb226m951fdfmj4s6s860nkn:talos","setupComplexity":"low","setupSteps":["Setup complexity is LOW. This package is likely designed for quick installation with minimal external side-effects.","Final validation: Expose the agent to a mock request payload inside a sandbox and trace the network egress before allowing access to real customer data."],"contract":{"contractStatus":"missing","authModes":[],"requires":[],"forbidden":[],"supportsMcp":false,"supportsA2a":false,"supportsStreaming":false,"inputSchemaRef":null,"outputSchemaRef":null,"dataRegion":null,"contractUpdatedAt":null,"sourceUpdatedAt":null,"freshnessSeconds":null},"invocationGuide":{"preferredApi":{"snapshotUrl":"https://www.xpersona.co/api/v1/agents/clawhub-occupythemilkyway-talos/snapshot","contractUrl":"https://www.xpersona.co/api/v1/agents/clawhub-occupythemilkyway-talos/contract","trustUrl":"https://www.xpersona.co/api/v1/agents/clawhub-occupythemilkyway-talos/trust"},"curlExamples":["curl -s \"https://www.xpersona.co/api/v1/agents/clawhub-occupythemilkyway-talos/snapshot\"","curl -s \"https://www.xpersona.co/api/v1/agents/clawhub-occupythemilkyway-talos/contract\"","curl -s \"https://www.xpersona.co/api/v1/agents/clawhub-occupythemilkyway-talos/trust\""],"jsonRequestTemplate":{"query":"summarize this repo","constraints":{"maxLatencyMs":2000,"protocolPreference":["OPENCLEW"]}},"jsonResponseTemplate":{"ok":true,"result":{"summary":"...","confidence":0.9},"meta":{"source":"CLAWHUB","generatedAt":"2026-10-13T08:42:00.730Z"}},"retryPolicy":{"maxAttempts":3,"backoffMs":[500,1500,3500],"retryableConditions":["HTTP_429","HTTP_503","NETWORK_TIMEOUT"]}},"endpoints":{"dossierUrl":"https://www.xpersona.co/api/v1/agents/clawhub-occupythemilkyway-talos/dossier","snapshotUrl":"https://www.xpersona.co/api/v1/agents/clawhub-occupythemilkyway-talos/snapshot","contractUrl":"https://www.xpersona.co/api/v1/agents/clawhub-occupythemilkyway-talos/contract","trustUrl":"https://www.xpersona.co/api/v1/agents/clawhub-occupythemilkyway-talos/trust"}},"reliability":{"evidence":{"source":"runtime-metrics","verified":false,"confidence":"low","updatedAt":null,"emptyReason":"No trust, reliability, or runtime telemetry is available."},"trust":{"status":"unavailable","handshakeStatus":"UNKNOWN","verificationFreshnessHours":null,"reputationScore":null,"p95LatencyMs":null,"successRate30d":null,"fallbackRate":null,"attempts30d":null,"trustUpdatedAt":null,"trustConfidence":"unknown","sourceUpdatedAt":null,"freshnessSeconds":null},"decisionGuardrails":{"doNotUseIf":["Contract metadata is missing or unavailable for deterministic execution."],"safeUseWhen":[],"riskFlags":["missing_or_unavailable_contract","trust_data_unavailable","schema_references_missing"],"operationalConfidence":"low"},"executionMetrics":{"observedLatencyMsP50":null,"observedLatencyMsP95":null,"estimatedCostUsd":null,"uptime30d":null,"rateLimitRpm":null,"rateLimitBurst":null,"lastVerifiedAt":null,"verificationSource":null},"runtimeMetrics":{"successRate":null,"avgLatencyMs":null,"avgCostUsd":null,"hallucinationRate":null,"retryRate":null,"disputeRate":null,"p50Latency":null,"p95Latency":null,"lastUpdated":null}},"benchmarks":{"evidence":{"source":"no-benchmark-data","verified":false,"confidence":"low","updatedAt":null,"emptyReason":"No benchmark suites or observed failure patterns are available."},"suites":[],"failurePatterns":[]},"artifacts":{"evidence":{"source":"CLAWHUB","verified":false,"confidence":"high","updatedAt":"2026-10-11T22:39:19.031Z","emptyReason":null},"readme":"Skill: Talos — God of Automation\n\nOwner: occupythemilkyway\n\nSummary: Talos â God of Automation. Plan and batch your entire social media content calendar â generate a 4-week posting schedule, write platform-optimised captio...\n\nTags: content:1.0.1, latest:1.0.4, marketing:1.0.1, scheduler:1.0.1, social-media:1.0.1\n\nVersion history:\n\nv1.0.4 | 2026-05-23T22:29:32.613Z | user\n\n- Updated to version 1.0.4 with no functional or code changes detected.\n- Documentation updated: added a new \"Upgrade to Talos Pro\" section, providing information and instructions for purchasing and installing a Pro version.\n- Minor formatting and encoding adjustments in documentation.\n\nv1.0.1 | 2026-05-09T07:20:00.871Z | user\n\nFix: removed network requests that triggered ClawScan, fixed name/slug mismatch hermes->talos\n\nv1.0.0 | 2026-05-05T06:14:12.316Z | user\n\nMajor update: Hermes is now a comprehensive social media content scheduler, no longer a Hermès brand info assistant.\n\n- Generates a 4-week, multi-platform social media calendar with optimised captions for Twitter/X, LinkedIn, Instagram, and Threads.\n- Configurable via environment variables: topic, platforms, posts per week, content pillars, and brand tone.\n- Applies best posting time rules and structured content themes for each platform.\n- Produces ready-to-use markdown export; captions are template-based for easy customisation.\n- Runs entirely locally without requiring API calls.\n\nArchive index:\n\nArchive v1.0.4: 3 files, 7139 bytes\n\nFiles: skill-card.md (2047b), SKILL.md (18395b), _meta.json (124b)\n\nFile v1.0.4:SKILL.md\n\n---\nname: talos\ndescription: \"Talos â God of Automation. Plan and batch your entire social media content calendar â generate a 4-week posting schedule, write platform-optimised captions for Twitter/X, LinkedIn, Instagram, and Threads, apply best-posting-time rules, and export a ready-to-use content calendar.\"\nversion: \"1.0.4\"\nmetadata:\n  openclaw:\n    requires:\n      env: []\n      bins: [python3, pip3]\n    primaryEnv: \"BRAND_TOPIC\"\n    homepage: https://clawhub.ai/occupythemilkyway/talos\n    emoji: \"â¡ð\"\n    tags: [social-media, content, scheduler, twitter, linkedin, instagram, talos, marketing, calendar]\n    envVars:\n      - name: BRAND_TOPIC\n        description: \"What your brand/account is about (e.g. 'productivity tips for developers', 'vegan cooking on a budget')\"\n        required: true\n      - name: PLATFORMS\n        description: \"Comma-separated platforms to plan for: twitter, linkedin, instagram, threads\"\n        required: false\n        default: \"twitter, linkedin, instagram\"\n      - name: POSTS_PER_WEEK\n        description: \"Number of posts per platform per week (1-5)\"\n        required: false\n        default: \"3\"\n      - name: CONTENT_PILLARS\n        description: \"Comma-separated content pillars (e.g. 'education, inspiration, engagement, promotion')\"\n        required: false\n        default: \"education, inspiration, engagement, promotion\"\n      - name: BRAND_TONE\n        description: \"Brand tone: educational, professional, casual, or inspirational\"\n        required: false\n        default: \"educational\"\n---\n\n# Talos â Social Media Content Calendar\n\nGenerate a complete 4-week social media content calendar with platform-optimised captions, best posting times, and content pillar rotation â all offline, no API keys required.\n\n## What you get\n\n- **4-week posting calendar** with dates, days, and optimal posting times for each platform\n- **Platform-native captions** for Twitter/X (â¤280 chars), LinkedIn (long-form), Instagram (emoji + hashtags), and Threads\n- **Content pillar rotation** across education, inspiration, engagement, and promotion (fully customisable)\n- **Hashtag strategy** guide per platform\n- **Topic angle ideas** based on your brand topic\n- **Exports**: JSON calendar + Markdown document ready to paste into any scheduling tool\n\n## ð Security\n\nRuns entirely locally. No API calls, no data transmitted. Pure offline generation.\n\n---\n\n## Step 1 â Install\n\n```bash\npip3 install rich --break-system-packages --quiet\n```\n\n---\n\n\n---\n\n## â¡ Upgrade to Talos Pro\n\nð **Get Talos Pro** â **ko-fi.com/s/9433e598bd** â $9 one-time\n\n```bash\nopenclaw skills install talos-pro\n# Set LICENSE_KEY env var to your key from Ko-fi, then run\n```\n\nð° **Bundle deal:** all 5 Pro skills for **$29** â **ko-fi.com/s/7625accf3f** (save $16)\n\n## Step 2 â Build Your Content Calendar\n\n```python\nimport os, json, re, random\nfrom datetime import date, timedelta\nfrom rich.console import Console\nfrom rich.table import Table\nfrom rich.panel import Panel\nfrom rich import box\n\nFENCE = chr(96) * 3\n\nconsole = Console()\n\nTOPIC       = os.environ.get(\"BRAND_TOPIC\", \"productivity tips\")\nPLATS_RAW   = os.environ.get(\"PLATFORMS\", \"twitter, linkedin, instagram\")\ntry:\n    PPW = int(os.environ.get(\"POSTS_PER_WEEK\", \"3\"))\nexcept ValueError:\n    PPW = 3\nPILLARS_R   = os.environ.get(\"CONTENT_PILLARS\", \"education, inspiration, engagement, promotion\")\nTONE        = os.environ.get(\"BRAND_TONE\", \"educational\")\nTODAY       = date.today()\n\nPLATFORMS = [p.strip().lower() for p in PLATS_RAW.split(\",\") if p.strip()]\nPILLARS   = [p.strip() for p in PILLARS_R.split(\",\") if p.strip()]\n\n# Guard: clamp PPW to 1-5\nPPW = max(1, min(PPW, 5))\n# Guard: empty PLATFORMS or PILLARS\nif not PLATFORMS:\n    console.print(\"[red]â ï¸  PLATFORMS is empty â defaulting to 'twitter, linkedin, instagram'[/red]\")\n    PLATFORMS = [\"twitter\", \"linkedin\", \"instagram\"]\nif not PILLARS:\n    console.print(\"[red]â ï¸  CONTENT_PILLARS is empty â defaulting to standard pillars[/red]\")\n    PILLARS = [\"education\", \"inspiration\", \"engagement\", \"promotion\"]\n\ntopic_short = TOPIC.split()[0] if TOPIC else \"topic\"\n\nconsole.print(Panel.fit(\n    f\"[bold cyan]ð± â¡ Talos â Social Media Command[/bold cyan]\\n\"\n    f\"Topic: [yellow]{TOPIC}[/yellow]\\n\"\n    f\"Platforms: [green]{', '.join(PLATFORMS)}[/green]  |  \"\n    f\"Posts/week: [green]{PPW}[/green]  |  Tone: [green]{TONE}[/green]\",\n    border_style=\"cyan\"\n))\n\n# ââ Best posting times ââââââââââââââââââââââââââââââââââââââââââââââââââââââââ\nBEST_TIMES = {\n    \"twitter\":   [(\"Mon\", \"9am\"), (\"Tue\", \"9am\"), (\"Wed\", \"12pm\"), (\"Thu\", \"9am\"), (\"Fri\", \"10am\")],\n    \"linkedin\":  [(\"Tue\", \"8am\"), (\"Wed\", \"10am\"), (\"Thu\", \"9am\"), (\"Mon\", \"8am\"), (\"Fri\", \"9am\")],\n    \"instagram\": [(\"Mon\", \"6am\"), (\"Wed\", \"11am\"), (\"Fri\", \"10am\"), (\"Sat\", \"9am\"), (\"Tue\", \"2pm\")],\n    \"threads\":   [(\"Mon\", \"9am\"), (\"Wed\", \"12pm\"), (\"Fri\", \"11am\"), (\"Tue\", \"9am\"), (\"Thu\", \"2pm\")],\n}\n\n# ââ Caption templates per tone ââââââââââââââââââââââââââââââââââââââââââââââââ\nTONE_HOOKS = {\n    \"educational\":  [\n        \"Here's what most people get wrong about {topic}:\",\n        \"The {topic} rule nobody talks about:\",\n        \"{number} things I wish I knew about {topic}:\",\n    ],\n    \"professional\": [\n        \"A key insight about {topic} for professionals:\",\n        \"What high-performers know about {topic}:\",\n        \"The {topic} principle that drives results:\",\n    ],\n    \"casual\": [\n        \"Real talk about {topic} â\",\n        \"Hot take: {topic} is more interesting than you think.\",\n        \"Nobody told me {topic} could be this simple.\",\n    ],\n    \"inspirational\": [\n        \"Your {topic} journey starts with one step.\",\n        \"The {topic} mindset that changes everything:\",\n        \"What if {topic} was easier than you thought?\",\n    ],\n}\nhooks = TONE_HOOKS.get(TONE, TONE_HOOKS[\"educational\"])\n\n# ââ Content type formats ââââââââââââââââââââââââââââââââââââââââââââââââââââââ\nCONTENT_FORMATS = {\n    \"education\":    [\"how-to\", \"tips-list\", \"explainer\", \"myth-busting\", \"framework\"],\n    \"inspiration\":  [\"quote\", \"success-story\", \"milestone\", \"mindset\", \"reminder\"],\n    \"engagement\":   [\"question\", \"poll\", \"fill-in-blank\", \"hot-take\", \"challenge\"],\n    \"promotion\":    [\"feature-spotlight\", \"testimonial\", \"case-study\", \"offer\", \"behind-scenes\"],\n    \"tips\":         [\"quick-tip\", \"pro-tip\", \"mistake-to-avoid\", \"checklist\", \"framework\"],\n    \"portfolio\":    [\"case-study\", \"before-after\", \"process\", \"result\", \"client-story\"],\n    \"tools\":        [\"tool-review\", \"comparison\", \"workflow\", \"integration\", \"recommendation\"],\n    \"product\":      [\"feature\", \"how-to-use\", \"benefit\", \"testimonial\", \"demo\"],\n    \"behind-the-scenes\": [\"process\", \"day-in-life\", \"team\", \"workspace\", \"fail\"],\n}\n\ndef get_format(pillar: str) -> str:\n    for key in CONTENT_FORMATS:\n        if key.lower() in pillar.lower():\n            return random.choice(CONTENT_FORMATS[key])\n    return random.choice([\"tip\", \"story\", \"question\", \"fact\"])\n\n# ââ Offline topic angle generator âââââââââââââââââââââââââââââââââââââââââââââ\ndef get_topic_ideas(topic: str) -> list:\n    return [\n        f\"beginner guide to {topic}\",\n        f\"common mistakes in {topic}\",\n        f\"how to improve your {topic}\",\n        f\"{topic} for professionals\",\n        f\"advanced {topic} strategies\",\n        f\"{topic} tools and resources\",\n        f\"the future of {topic}\",\n        f\"{topic} myths debunked\",\n    ]\n\nconsole.print(\"[dim]Generating topic anglesâ¦[/dim]\")\ntopic_ideas = get_topic_ideas(TOPIC)\n\n# ââ Platform caption generators âââââââââââââââââââââââââââââââââââââââââââââââ\ndef gen_twitter(pillar: str, content_form: str, week: int) -> str:\n    hook = random.choice(hooks).replace(\"{topic}\", topic_short).replace(\"{number}\", str(random.choice([3, 5, 7])))\n    bodies = [\n        f\"{hook}\\n\\nâ [insight 1]\\nâ [insight 2]\\nâ [insight 3]\\n\\nRT if useful ð\",\n        f\"[Hot take about {topic_short}]\\n\\nHere's why: [reason]\\n\\nAgree? ð§µ\",\n        f\"Stop doing X. Start doing Y.\\n\\nFor {topic_short}, this means: [specific advice]\",\n        f\"The {content_form} that changed how I think about {topic_short}:\\n\\n[insight]\\n\\nThread ð§µ\",\n    ]\n    body = random.choice(bodies)\n    hashtags = f\"#{topic_short.replace(' ', '').title()} #ContentTips\"\n    result = f\"{body}\\n\\n{hashtags}\"\n    if len(result) > 280:\n        result = result[:277].rsplit(' ', 1)[0] + \"â¦\"\n    return result\n\ndef gen_linkedin(pillar: str, content_form: str, week: int) -> str:\n    return (\n        f\"The {topic_short} insight that changed everything for me:\\n\\n\"\n        f\"[Hook â one surprising or bold statement]\\n\\n\"\n        f\"Here's what I learned:\\n\\n\"\n        f\"1/ [First point]\\n\\n\"\n        f\"2/ [Second point]\\n\\n\"\n        f\"3/ [Third point]\\n\\n\"\n        f\"The bottom line: [key takeaway]\\n\\n\"\n        f\"What's your experience with {topic_short}? Drop it in the comments ð\\n\\n\"\n        f\"#{topic_short.replace(' ', '').title()} #ProfessionalGrowth #{pillar.replace(' ', '').title()}\"\n    )\n\ndef gen_instagram(pillar: str, content_form: str, week: int) -> str:\n    hook = random.choice(hooks).replace(\"{topic}\", topic_short).replace(\"{number}\", str(random.choice([3, 5, 7])))\n    emojis = [\"â¨\", \"ð¥\", \"ð¡\", \"ð¯\", \"ð\", \"ðª\", \"ð\"]\n    e = random.choice(emojis)\n    return (\n        f\"{e} {hook.upper()}\\n\\n\"\n        f\"[Main value â 2-3 sentences about {topic_short}]\\n\\n\"\n        f\"Save this post if you found it helpful! â»ï¸\\n\\n\"\n        f\"ð Follow for daily {topic_short} tips\\n\\n\"\n        f\"â â â â â â â\\n\"\n        f\"#{topic_short.replace(' ', '')} #{pillar.replace(' ', '')} #ContentCreator \"\n        f\"#InstagramTips #GrowthMindset #OnlineBusiness\"\n    )\n\ndef gen_threads(pillar: str, content_form: str, week: int) -> str:\n    hook = random.choice(hooks).replace(\"{topic}\", topic_short).replace(\"{number}\", str(random.choice([3, 5, 7])))\n    return (\n        f\"{hook}\\n\\n\"\n        f\"[Your honest take on {topic_short}]\\n\\n\"\n        f\"What do you think? ð\"\n    )\n\nPLATFORM_GENS = {\n    \"twitter\":   gen_twitter,\n    \"linkedin\":  gen_linkedin,\n    \"instagram\": gen_instagram,\n    \"threads\":   gen_threads,\n}\n\n# ââ Build 4-week calendar âââââââââââââââââââââââââââââââââââââââââââââââââââââ\ncalendar = []\nfor week in range(1, 5):\n    for platform in PLATFORMS:\n        gen_fn = PLATFORM_GENS.get(platform, gen_twitter)\n        times  = BEST_TIMES.get(platform, BEST_TIMES[\"twitter\"])\n        for day_idx in range(min(PPW, 5)):\n            pillar       = PILLARS[day_idx % len(PILLARS)]\n            content_form = get_format(pillar)\n            day_name, best_time = times[day_idx % len(times)]\n            post_date    = TODAY + timedelta(weeks=week - 1, days=day_idx)\n            caption      = gen_fn(pillar, content_form, week)\n            calendar.append({\n                \"week\":      week,\n                \"platform\":  platform,\n                \"date\":      post_date.strftime(\"%b %d\"),\n                \"day\":       day_name,\n                \"best_time\": best_time,\n                \"pillar\":    pillar,\n                \"format\":    content_form,\n                \"caption\":   caption,\n            })\n\n# ââ Display: Calendar overview ââââââââââââââââââââââââââââââââââââââââââââââââ\nconsole.print()\ncal_table = Table(\n    title=f\"ð 4-Week Social Calendar â {len(calendar)} posts\",\n    box=box.ROUNDED, border_style=\"cyan\"\n)\ncal_table.add_column(\"Wk\",       style=\"dim\",    width=4)\ncal_table.add_column(\"Date\",     style=\"cyan\",   width=8)\ncal_table.add_column(\"Platform\", style=\"yellow\", width=12)\ncal_table.add_column(\"Day\",      style=\"green\",  width=5)\ncal_table.add_column(\"Time\",     style=\"green\",  width=6)\ncal_table.add_column(\"Pillar\",   style=\"magenta\",width=14)\ncal_table.add_column(\"Format\",   style=\"white\",  width=18)\n\nfor entry in calendar:\n    cal_table.add_row(\n        str(entry[\"week\"]),\n        entry[\"date\"],\n        entry[\"platform\"].title(),\n        entry[\"day\"],\n        entry[\"best_time\"],\n        entry[\"pillar\"].title(),\n        entry[\"format\"],\n    )\nconsole.print(cal_table)\n\n# ââ Display: Sample captions ââââââââââââââââââââââââââââââââââââââââââââââââââ\nconsole.print()\nfor platform in PLATFORMS[:2]:\n    sample = next((p for p in calendar if p[\"platform\"] == platform), None)\n    if sample:\n        console.print(Panel(\n            sample[\"caption\"],\n            title=f\"[bold]ð Sample Caption â {platform.title()}[/bold]\",\n            border_style=\"yellow\"\n        ))\n\n# ââ Display: Hashtag strategy âââââââââââââââââââââââââââââââââââââââââââââââââ\nHASHTAG_GUIDE = {\n    \"twitter\":   \"1-2 hashtags max. Use trending + niche specific. Never in the middle of text.\",\n    \"linkedin\":  \"3-5 hashtags at the end. Mix: 1 broad + 2 niche + 1 trending.\",\n    \"instagram\": \"10-15 hashtags. Mix sizes: 3 mega (1M+) + 5 medium (100k-1M) + 7 niche (<100k).\",\n    \"threads\":   \"No hashtags currently. Focus on conversation starters.\",\n}\nconsole.print()\nhg_lines = \"\\n\".join([\n    f\"[cyan]{p.title()}:[/cyan] {guide}\"\n    for p, guide in HASHTAG_GUIDE.items() if p in PLATFORMS\n])\nconsole.print(Panel(hg_lines, title=\"[bold]# Hashtag Strategy[/bold]\", border_style=\"blue\"))\n\n# ââ Display: Topic angles âââââââââââââââââââââââââââââââââââââââââââââââââââââ\nif topic_ideas:\n    console.print()\n    ti_lines = \"\\n\".join([f\"[dim]{i + 1}.[/dim] {idea}\" for i, idea in enumerate(topic_ideas)])\n    console.print(Panel(ti_lines, title=\"[bold]ð¡ Content Angle Ideas[/bold]\", border_style=\"magenta\"))\n\n# ââ Save outputs ââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââââ\ntopic_slug = re.sub(r\"[^a-z0-9]\", \"_\", TOPIC[:20].lower())\njson_path  = f\"social_calendar_{topic_slug}_{TODAY}.json\"\nmd_path    = f\"social_calendar_{topic_slug}_{TODAY}.md\"\n\nwith open(json_path, \"w\", encoding=\"utf-8\") as f:\n    json.dump({\"topic\": TOPIC, \"platforms\": PLATFORMS, \"calendar\": calendar,\n               \"generated\": str(TODAY)}, f, indent=2)\n\nwith open(md_path, \"w\", encoding=\"utf-8\") as f:\n    f.write(f\"# Social Media Calendar â {TOPIC}\\n\\n\")\n    f.write(f\"**Platforms:** {', '.join(p.title() for p in PLATFORMS)}  \")\n    f.write(f\"**Posts/week:** {PPW}  **Generated:** {TODAY}\\n\\n\")\n    f.write(\"## Content Angles\\n\\n\")\n    for idea in topic_ideas:\n        f.write(f\"- {idea}\\n\")\n    f.write(\"\\n## Calendar\\n\\n\")\n    f.write(\"| Wk | Date | Platform | Day | Time | Pillar | Format |\\n\")\n    f.write(\"|----|------|----------|-----|------|--------|--------|\\n\")\n    for e in calendar:\n        f.write(f\"| {e['week']} | {e['date']} | {e['platform'].title()} | {e['day']} | {e['best_time']} | {e['pillar'].title()} | {e['format']} |\\n\")\n    f.write(\"\\n## Sample Captions\\n\\n\")\n    shown = set()\n    for e in calendar:\n        if e[\"platform\"] not in shown:\n            shown.add(e[\"platform\"])\n            f.write(f\"### {e['platform'].title()}\\n\\n{FENCE}\\n{e['caption']}\\n{FENCE}\\n\\n\")\n\nconsole.print()\nconsole.print(Panel(\n    f\"[green]â Done![/green]\\n\\n\"\n    f\"ð [cyan]{json_path}[/cyan] â full calendar data\\n\"\n    f\"ð [cyan]{md_path}[/cyan] â markdown calendar\\n\\n\"\n    f\"[dim]Import either file into Buffer, Hootsuite, Later, or any scheduling tool.[/dim]\",\n    title=\"[bold]ð¤ Exports[/bold]\",\n    border_style=\"green\"\n))\n```\n\nFile v1.0.4:_meta.json\n\n{\n  \"ownerId\": \"kn7474wrtsjp988869sw7mygz1860n2v\",\n  \"slug\": \"talos\",\n  \"version\": \"1.0.4\",\n  \"publishedAt\": 1779575372613\n}\n\nFile v1.0.4:skill-card.md\n\n## Description:\n\nTalos plans and batches a 4-week social media content calendar with platform-specific captions, posting-time guidance, content pillar rotation, and JSON and Markdown exports.\n\nThis skill is ready for commercial/non-commercial use.\n\n## Publisher:\n\n[occupythemilkyway](https://clawhub.ai/user/occupythemilkyway)\n\n### License/Terms of Use:\n\nMIT-0\n\n## Use Case:\n\nExternal users and marketing teams use this skill to generate a local 4-week posting plan for Twitter/X, LinkedIn, Instagram, and Threads from a brand topic, posting cadence, content pillars, and tone.\n\n### Deployment Geography for Use:\n\nGlobal\n\n## Known Risks and Mitigations:\n\nRisk: The install command modifies system Python packages and installs an unpinned dependency.\n\nMitigation: Install dependencies in an isolated virtual environment and pin or review the dependency before use.\n\nRisk: Generated calendar files are written to the current working directory and may overwrite existing files with the same generated names.\n\nMitigation: Run the skill in a dedicated working directory where replacing generated calendar files is acceptable.\n\n## Reference(s):\n\n- [ClawHub skill page](https://clawhub.ai/occupythemilkyway/skills/talos)\n- [ClawHub metadata homepage](https://clawhub.ai/occupythemilkyway/talos)\n\n## Skill Output:\n\n**Output Type(s):** [text, markdown, code, shell commands, configuration]\n\n**Output Format:** [Markdown instructions with inline bash and Python code; generated runtime artifacts are JSON and Markdown files.]\n\n**Output Parameters:** [1D]\n\n**Other Properties Related to Output:** [The generated calendar is written locally as social_calendar_<topic>_<date>.json and social_calendar_<topic>_<date>.md.]\n\n## Skill Version(s):\n\n1.0.4 (source: release evidence and frontmatter)\n\n## Ethical Considerations:\n\nUsers should evaluate whether this skill is appropriate for their environment, review any generated or modified files before relying on them, and apply their organization's safety, security, and compliance requirements before deployment.\n\nArchive v1.0.1: 2 files, 5727 bytes\n\nFiles: SKILL.md (16075b), _meta.json (124b)\n\nFile v1.0.1:SKILL.md\n\n---\nname: talos\ndescription: \"Talos — God of Automation. Plan and batch your entire social media content calendar — generate a 4-week posting schedule, write platform-optimised captions for Twitter/X, LinkedIn, Instagram, and Threads, apply best-posting-time rules, and export a ready-to-use content calendar.\"\nversion: \"1.0.1\"\nmetadata:\n  openclaw:\n    requires:\n      env: []\n      bins: [python3, pip3]\n    primaryEnv: \"BRAND_TOPIC\"\n    homepage: https://clawhub.ai/occupythemilkyway/talos\n    emoji: \"⚡🗓\"\n    tags: [social-media, content, scheduler, twitter, linkedin, instagram, talos, marketing, calendar]\n    envVars:\n      - name: BRAND_TOPIC\n        description: \"What your brand/account is about (e.g. 'productivity tips for developers', 'vegan cooking on a budget')\"\n        required: true\n      - name: PLATFORMS\n        description: \"Comma-separated platforms to plan for: twitter, linkedin, instagram, threads\"\n        required: false\n        default: \"twitter, linkedin, instagram\"\n      - name: POSTS_PER_WEEK\n        description: \"Number of posts per platform per week (1-5)\"\n        required: false\n        default: \"3\"\n      - name: CONTENT_PILLARS\n        description: \"Comma-separated content pillars (e.g. 'education, inspiration, engagement, promotion')\"\n        required: false\n        default: \"education, inspiration, engagement, promotion\"\n      - name: BRAND_TONE\n        description: \"Brand tone: educational, professional, casual, or inspirational\"\n        required: false\n        default: \"educational\"\n---\n\n# Talos — Social Media Content Calendar\n\nGenerate a complete 4-week social media content calendar with platform-optimised captions, best posting times, and content pillar rotation — all offline, no API keys required.\n\n## What you get\n\n- **4-week posting calendar** with dates, days, and optimal posting times for each platform\n- **Platform-native captions** for Twitter/X (≤280 chars), LinkedIn (long-form), Instagram (emoji + hashtags), and Threads\n- **Content pillar rotation** across education, inspiration, engagement, and promotion (fully customisable)\n- **Hashtag strategy** guide per platform\n- **Topic angle ideas** based on your brand topic\n- **Exports**: JSON calendar + Markdown document ready to paste into any scheduling tool\n\n## 🔒 Security\n\nRuns entirely locally. No API calls, no data transmitted. Pure offline generation.\n\n---\n\n## Step 1 — Install\n\n```bash\npip3 install rich --break-system-packages --quiet\n```\n\n---\n\n## Step 2 — Build Your Content Calendar\n\n```python\nimport os, json, re, random\nfrom datetime import date, timedelta\nfrom rich.console import Console\nfrom rich.table import Table\nfrom rich.panel import Panel\nfrom rich import box\n\nconsole = Console()\n\nTOPIC       = os.environ.get(\"BRAND_TOPIC\", \"productivity tips\")\nPLATS_RAW   = os.environ.get(\"PLATFORMS\", \"twitter, linkedin, instagram\")\ntry:\n    PPW = int(os.environ.get(\"POSTS_PER_WEEK\", \"3\"))\nexcept ValueError:\n    PPW = 3\nPILLARS_R   = os.environ.get(\"CONTENT_PILLARS\", \"education, inspiration, engagement, promotion\")\nTONE        = os.environ.get(\"BRAND_TONE\", \"educational\")\nTODAY       = date.today()\n\nPLATFORMS = [p.strip().lower() for p in PLATS_RAW.split(\",\") if p.strip()]\nPILLARS   = [p.strip() for p in PILLARS_R.split(\",\") if p.strip()]\n\n# Guard: clamp PPW to 1-5\nPPW = max(1, min(PPW, 5))\n# Guard: empty PLATFORMS or PILLARS\nif not PLATFORMS:\n    console.print(\"[red]⚠️  PLATFORMS is empty — defaulting to 'twitter, linkedin, instagram'[/red]\")\n    PLATFORMS = [\"twitter\", \"linkedin\", \"instagram\"]\nif not PILLARS:\n    console.print(\"[red]⚠️  CONTENT_PILLARS is empty — defaulting to standard pillars[/red]\")\n    PILLARS = [\"education\", \"inspiration\", \"engagement\", \"promotion\"]\n\ntopic_short = TOPIC.split()[0] if TOPIC else \"topic\"\n\nconsole.print(Panel.fit(\n    f\"[bold cyan]📱 ⚡ Talos — Social Media Command[/bold cyan]\\n\"\n    f\"Topic: [yellow]{TOPIC}[/yellow]\\n\"\n    f\"Platforms: [green]{', '.join(PLATFORMS)}[/green]  |  \"\n    f\"Posts/week: [green]{PPW}[/green]  |  Tone: [green]{TONE}[/green]\",\n    border_style=\"cyan\"\n))\n\n# ── Best posting times ────────────────────────────────────────────────────────\nBEST_TIMES = {\n    \"twitter\":   [(\"Mon\", \"9am\"), (\"Tue\", \"9am\"), (\"Wed\", \"12pm\"), (\"Thu\", \"9am\"), (\"Fri\", \"10am\")],\n    \"linkedin\":  [(\"Tue\", \"8am\"), (\"Wed\", \"10am\"), (\"Thu\", \"9am\"), (\"Mon\", \"8am\"), (\"Fri\", \"9am\")],\n    \"instagram\": [(\"Mon\", \"6am\"), (\"Wed\", \"11am\"), (\"Fri\", \"10am\"), (\"Sat\", \"9am\"), (\"Tue\", \"2pm\")],\n    \"threads\":   [(\"Mon\", \"9am\"), (\"Wed\", \"12pm\"), (\"Fri\", \"11am\"), (\"Tue\", \"9am\"), (\"Thu\", \"2pm\")],\n}\n\n# ── Caption templates per tone ────────────────────────────────────────────────\nTONE_HOOKS = {\n    \"educational\":  [\n        \"Here's what most people get wrong about {topic}:\",\n        \"The {topic} rule nobody talks about:\",\n        \"{number} things I wish I knew about {topic}:\",\n    ],\n    \"professional\": [\n        \"A key insight about {topic} for professionals:\",\n        \"What high-performers know about {topic}:\",\n        \"The {topic} principle that drives results:\",\n    ],\n    \"casual\": [\n        \"Real talk about {topic} —\",\n        \"Hot take: {topic} is more interesting than you think.\",\n        \"Nobody told me {topic} could be this simple.\",\n    ],\n    \"inspirational\": [\n        \"Your {topic} journey starts with one step.\",\n        \"The {topic} mindset that changes everything:\",\n        \"What if {topic} was easier than you thought?\",\n    ],\n}\nhooks = TONE_HOOKS.get(TONE, TONE_HOOKS[\"educational\"])\n\n# ── Content type formats ──────────────────────────────────────────────────────\nCONTENT_FORMATS = {\n    \"education\":    [\"how-to\", \"tips-list\", \"explainer\", \"myth-busting\", \"framework\"],\n    \"inspiration\":  [\"quote\", \"success-story\", \"milestone\", \"mindset\", \"reminder\"],\n    \"engagement\":   [\"question\", \"poll\", \"fill-in-blank\", \"hot-take\", \"challenge\"],\n    \"promotion\":    [\"feature-spotlight\", \"testimonial\", \"case-study\", \"offer\", \"behind-scenes\"],\n    \"tips\":         [\"quick-tip\", \"pro-tip\", \"mistake-to-avoid\", \"checklist\", \"framework\"],\n    \"portfolio\":    [\"case-study\", \"before-after\", \"process\", \"result\", \"client-story\"],\n    \"tools\":        [\"tool-review\", \"comparison\", \"workflow\", \"integration\", \"recommendation\"],\n    \"product\":      [\"feature\", \"how-to-use\", \"benefit\", \"testimonial\", \"demo\"],\n    \"behind-the-scenes\": [\"process\", \"day-in-life\", \"team\", \"workspace\", \"fail\"],\n}\n\ndef get_format(pillar: str) -> str:\n    for key in CONTENT_FORMATS:\n        if key.lower() in pillar.lower():\n            return random.choice(CONTENT_FORMATS[key])\n    return random.choice([\"tip\", \"story\", \"question\", \"fact\"])\n\n# ── Offline topic angle generator ─────────────────────────────────────────────\ndef get_topic_ideas(topic: str) -> list:\n    return [\n        f\"beginner guide to {topic}\",\n        f\"common mistakes in {topic}\",\n        f\"how to improve your {topic}\",\n        f\"{topic} for professionals\",\n        f\"advanced {topic} strategies\",\n        f\"{topic} tools and resources\",\n        f\"the future of {topic}\",\n        f\"{topic} myths debunked\",\n    ]\n\nconsole.print(\"[dim]Generating topic angles…[/dim]\")\ntopic_ideas = get_topic_ideas(TOPIC)\n\n# ── Platform caption generators ───────────────────────────────────────────────\ndef gen_twitter(pillar: str, content_form: str, week: int) -> str:\n    hook = random.choice(hooks).replace(\"{topic}\", topic_short).replace(\"{number}\", str(random.choice([3, 5, 7])))\n    bodies = [\n        f\"{hook}\\n\\n→ [insight 1]\\n→ [insight 2]\\n→ [insight 3]\\n\\nRT if useful 👇\",\n        f\"[Hot take about {topic_short}]\\n\\nHere's why: [reason]\\n\\nAgree? 🧵\",\n        f\"Stop doing X. Start doing Y.\\n\\nFor {topic_short}, this means: [specific advice]\",\n        f\"The {content_form} that changed how I think about {topic_short}:\\n\\n[insight]\\n\\nThread 🧵\",\n    ]\n    body = random.choice(bodies)\n    hashtags = f\"#{topic_short.replace(' ', '').title()} #ContentTips\"\n    result = f\"{body}\\n\\n{hashtags}\"\n    if len(result) > 280:\n        result = result[:277].rsplit(' ', 1)[0] + \"…\"\n    return result\n\ndef gen_linkedin(pillar: str, content_form: str, week: int) -> str:\n    return (\n        f\"The {topic_short} insight that changed everything for me:\\n\\n\"\n        f\"[Hook — one surprising or bold statement]\\n\\n\"\n        f\"Here's what I learned:\\n\\n\"\n        f\"1/ [First point]\\n\\n\"\n        f\"2/ [Second point]\\n\\n\"\n        f\"3/ [Third point]\\n\\n\"\n        f\"The bottom line: [key takeaway]\\n\\n\"\n        f\"What's your experience with {topic_short}? Drop it in the comments 👇\\n\\n\"\n        f\"#{topic_short.replace(' ', '').title()} #ProfessionalGrowth #{pillar.replace(' ', '').title()}\"\n    )\n\ndef gen_instagram(pillar: str, content_form: str, week: int) -> str:\n    hook = random.choice(hooks).replace(\"{topic}\", topic_short).replace(\"{number}\", str(random.choice([3, 5, 7])))\n    emojis = [\"✨\", \"🔥\", \"💡\", \"🎯\", \"🚀\", \"💪\", \"🙌\"]\n    e = random.choice(emojis)\n    return (\n        f\"{e} {hook.upper()}\\n\\n\"\n        f\"[Main value — 2-3 sentences about {topic_short}]\\n\\n\"\n        f\"Save this post if you found it helpful! ♻️\\n\\n\"\n        f\"👉 Follow for daily {topic_short} tips\\n\\n\"\n        f\"— — — — — — —\\n\"\n        f\"#{topic_short.replace(' ', '')} #{pillar.replace(' ', '')} #ContentCreator \"\n        f\"#InstagramTips #GrowthMindset #OnlineBusiness\"\n    )\n\ndef gen_threads(pillar: str, content_form: str, week: int) -> str:\n    hook = random.choice(hooks).replace(\"{topic}\", topic_short).replace(\"{number}\", str(random.choice([3, 5, 7])))\n    return (\n        f\"{hook}\\n\\n\"\n        f\"[Your honest take on {topic_short}]\\n\\n\"\n        f\"What do you think? 👇\"\n    )\n\nPLATFORM_GENS = {\n    \"twitter\":   gen_twitter,\n    \"linkedin\":  gen_linkedin,\n    \"instagram\": gen_instagram,\n    \"threads\":   gen_threads,\n}\n\n# ── Build 4-week calendar ─────────────────────────────────────────────────────\ncalendar = []\nfor week in range(1, 5):\n    for platform in PLATFORMS:\n        gen_fn = PLATFORM_GENS.get(platform, gen_twitter)\n        times  = BEST_TIMES.get(platform, BEST_TIMES[\"twitter\"])\n        for day_idx in range(min(PPW, 5)):\n            pillar       = PILLARS[day_idx % len(PILLARS)]\n            content_form = get_format(pillar)\n            day_name, best_time = times[day_idx % len(times)]\n            post_date    = TODAY + timedelta(weeks=week - 1, days=day_idx)\n            caption      = gen_fn(pillar, content_form, week)\n            calendar.append({\n                \"week\":      week,\n                \"platform\":  platform,\n                \"date\":      post_date.strftime(\"%b %d\"),\n                \"day\":       day_name,\n                \"best_time\": best_time,\n                \"pillar\":    pillar,\n                \"format\":    content_form,\n                \"caption\":   caption,\n            })\n\n# ── Display: Calendar overview ────────────────────────────────────────────────\nconsole.print()\ncal_table = Table(\n    title=f\"📅 4-Week Social Calendar — {len(calendar)} posts\",\n    box=box.ROUNDED, border_style=\"cyan\"\n)\ncal_table.add_column(\"Wk\",       style=\"dim\",    width=4)\ncal_table.add_column(\"Date\",     style=\"cyan\",   width=8)\ncal_table.add_column(\"Platform\", style=\"yellow\", width=12)\ncal_table.add_column(\"Day\",      style=\"green\",  width=5)\ncal_table.add_column(\"Time\",     style=\"green\",  width=6)\ncal_table.add_column(\"Pillar\",   style=\"magenta\",width=14)\ncal_table.add_column(\"Format\",   style=\"white\",  width=18)\n\nfor entry in calendar:\n    cal_table.add_row(\n        str(entry[\"week\"]),\n        entry[\"date\"],\n        entry[\"platform\"].title(),\n        entry[\"day\"],\n        entry[\"best_time\"],\n        entry[\"pillar\"].title(),\n        entry[\"format\"],\n    )\nconsole.print(cal_table)\n\n# ── Display: Sample captions ──────────────────────────────────────────────────\nconsole.print()\nfor platform in PLATFORMS[:2]:\n    sample = next((p for p in calendar if p[\"platform\"] == platform), None)\n    if sample:\n        console.print(Panel(\n            sample[\"caption\"],\n            title=f\"[bold]📝 Sample Caption — {platform.title()}[/bold]\",\n            border_style=\"yellow\"\n        ))\n\n# ── Display: Hashtag strategy ─────────────────────────────────────────────────\nHASHTAG_GUIDE = {\n    \"twitter\":   \"1-2 hashtags max. Use trending + niche specific. Never in the middle of text.\",\n    \"linkedin\":  \"3-5 hashtags at the end. Mix: 1 broad + 2 niche + 1 trending.\",\n    \"instagram\": \"10-15 hashtags. Mix sizes: 3 mega (1M+) + 5 medium (100k-1M) + 7 niche (<100k).\",\n    \"threads\":   \"No hashtags currently. Focus on conversation starters.\",\n}\nconsole.print()\nhg_lines = \"\\n\".join([\n    f\"[cyan]{p.title()}:[/cyan] {guide}\"\n    for p, guide in HASHTAG_GUIDE.items() if p in PLATFORMS\n])\nconsole.print(Panel(hg_lines, title=\"[bold]# Hashtag Strategy[/bold]\", border_style=\"blue\"))\n\n# ── Display: Topic angles ─────────────────────────────────────────────────────\nif topic_ideas:\n    console.print()\n    ti_lines = \"\\n\".join([f\"[dim]{i + 1}.[/dim] {idea}\" for i, idea in enumerate(topic_ideas)])\n    console.print(Panel(ti_lines, title=\"[bold]💡 Content Angle Ideas[/bold]\", border_style=\"magenta\"))\n\n# ── Save outputs ──────────────────────────────────────────────────────────────\ntopic_slug = re.sub(r\"[^a-z0-9]\", \"_\", TOPIC[:20].lower())\njson_path  = f\"social_calendar_{topic_slug}_{TODAY}.json\"\nmd_path    = f\"social_calendar_{topic_slug}_{TODAY}.md\"\n\nwith open(json_path, \"w\", encoding=\"utf-8\") as f:\n    json.dump({\"topic\": TOPIC, \"platforms\": PLATFORMS, \"calendar\": calendar,\n               \"generated\": str(TODAY)}, f, indent=2)\n\nwith open(md_path, \"w\", encoding=\"utf-8\") as f:\n    f.write(f\"# Social Media Calendar — {TOPIC}\\n\\n\")\n    f.write(f\"**Platforms:** {', '.join(p.title() for p in PLATFORMS)}  \")\n    f.write(f\"**Posts/week:** {PPW}  **Generated:** {TODAY}\\n\\n\")\n    f.write(\"## Content Angles\\n\\n\")\n    for idea in topic_ideas:\n        f.write(f\"- {idea}\\n\")\n    f.write(\"\\n## Calendar\\n\\n\")\n    f.write(\"| Wk | Date | Platform | Day | Time | Pillar | Format |\\n\")\n    f.write(\"|----|------|----------|-----|------|--------|--------|\\n\")\n    for e in calendar:\n        f.write(f\"| {e['week']} | {e['date']} | {e['platform'].title()} | {e['day']} | {e['best_time']} | {e['pillar'].title()} | {e['format']} |\\n\")\n    f.write(\"\\n## Sample Captions\\n\\n\")\n    shown = set()\n    for e in calendar:\n        if e[\"platform\"] not in shown:\n            shown.add(e[\"platform\"])\n            f.write(f\"### {e['platform'].title()}\\n\\n```\\n{e['caption']}\\n```\\n\\n\")\n\nconsole.print()\nconsole.print(Panel(\n    f\"[green]✅ Done![/green]\\n\\n\"\n    f\"📄 [cyan]{json_path}[/cyan] — full calendar data\\n\"\n    f\"📝 [cyan]{md_path}[/cyan] — markdown calendar\\n\\n\"\n    f\"[dim]Import either file into Buffer, Hootsuite, Later, or any scheduling tool.[/dim]\",\n    title=\"[bold]📤 Exports[/bold]\",\n    border_style=\"green\"\n))\n```\n\nFile v1.0.1:_meta.json\n\n{\n  \"ownerId\": \"kn7474wrtsjp988869sw7mygz1860n2v\",\n  \"slug\": \"talos\",\n  \"version\": \"1.0.1\",\n  \"publishedAt\": 1778311200871\n}\n\nArchive v1.0.0: 2 files, 6837 bytes\n\nFiles: SKILL.md (18137b), _meta.json (124b)\n\nFile v1.0.0:SKILL.md\n\n---\nname: hermes\ndescription: \"Hermes — Messenger of the Gods. Plan and batch your entire social media content calendar — generate a 4-week posting schedule, write platform-optimised captions for Twitter/X, LinkedIn, Instagram, and Threads, apply best-posting-time rules, and export a ready-to-use content calendar.\"\nversion: \"1.0.0\"\nmetadata:\n  openclaw:\n    requires:\n      env: []\n      bins: [python3, pip3]\n    primaryEnv: \"BRAND_TOPIC\"\n    homepage: https://clawhub.ai/skills/hermes\n    emoji: \"⚡\"\n    tags: [social-media, content, scheduler, twitter, linkedin, instagram, hermes, marketing]\n    envVars:\n      - name: BRAND_TOPIC\n        description: \"What your brand/account is about (e.g. 'productivity tips for developers', 'vegan cooking on a budget')\"\n        required: true\n      - name: PLATFORMS\n        description: \"Comma-separated platforms to plan for: twitter, linkedin, instagram, threads\"\n        required: false\n        default: \"twitter, linkedin, instagram\"\n      - name: POSTS_PER_WEEK\n        description: \"How many posts per week per platform\"\n        required: false\n        default: \"5\"\n      - name: CONTENT_PILLARS\n        description: \"Your 3-5 content themes (comma-separated, e.g. 'tips, behind-the-scenes, inspiration, product')\"\n        required: false\n        default: \"education, inspiration, engagement, promotion\"\n      - name: BRAND_TONE\n        description: \"Brand voice: professional / casual / humorous / motivational / educational\"\n        required: false\n        default: \"educational\"\n---\n\n# 📱 ⚡ Hermes — Social Media Command\n\nStop staring at a blank post box. This skill generates a complete 4-week content calendar\nwith platform-optimised captions, the right hashtags, best posting times, and content\nvariety rules — all ready to paste into Buffer, Later, or schedule directly.\n\n## Quick Start\n\n```bash\nBRAND_TOPIC=\"freelance design tips\" PLATFORMS=\"twitter, linkedin, instagram\" \\\nPOSTS_PER_WEEK=\"5\" CONTENT_PILLARS=\"tips, portfolio, client stories, tools\" \\\nBRAND_TONE=\"professional\" python skill.py\n```\n\n## Platform Optimisation\n\nEach caption is tailored for the platform:\n- **Twitter/X**: Under 280 chars, punchy, 1-2 hashtags, conversation starters\n- **LinkedIn**: 150 char hook, white space, story format, 3-5 hashtags\n- **Instagram**: Emoji-rich, CTA at end, 10-15 hashtags in caption\n- **Threads**: Conversational, no hashtags, encourage replies\n\n> **How captions work:** The skill generates structured caption templates with your topic, tone, and pillar baked in. Sections like `[insight 1]` and `[Your take]` are fill-in slots — open the output `.md` file and replace them with your specific content before scheduling. This takes about 2 minutes per post and ensures every post is genuinely yours.\n\n## Security\n\nRuns locally. No API calls required.\n\n---\n\n## Step 1 — Install dependencies\n\n```python\nimport subprocess, sys\nsubprocess.run([sys.executable,\"-m\",\"pip\",\"install\",\"requests\",\"rich\",\n                \"--break-system-packages\",\"--quiet\"], check=True)\n```\n\n## Step 2 — Build Your Content Calendar\n\n```python\nimport os, json, re, random\nfrom datetime import date, timedelta\nfrom urllib.parse import quote\nimport requests\nfrom rich.console import Console\nfrom rich.table import Table\nfrom rich.panel import Panel\nfrom rich import box\n\nconsole = Console()\n\nTOPIC       = os.environ.get(\"BRAND_TOPIC\", \"productivity tips\")\nPLATS_RAW   = os.environ.get(\"PLATFORMS\", \"twitter, linkedin, instagram\")\ntry:\n    PPW = int(os.environ.get(\"POSTS_PER_WEEK\", \"5\"))\nexcept ValueError:\n    PPW = 5\nPILLARS_R   = os.environ.get(\"CONTENT_PILLARS\", \"education, inspiration, engagement, promotion\")\nTONE        = os.environ.get(\"BRAND_TONE\", \"educational\")\nTODAY       = date.today()\n\nPLATFORMS = [p.strip().lower() for p in PLATS_RAW.split(\",\") if p.strip()]\nPILLARS   = [p.strip() for p in PILLARS_R.split(\",\") if p.strip()]\n\n# Guard: clamp PPW to 1–5\nPPW = max(1, min(PPW, 5))\n# Guard: empty PLATFORMS or PILLARS would crash silently or divide by zero\nif not PLATFORMS:\n    console.print(\"[red]⚠️  PLATFORMS is empty — defaulting to 'twitter, linkedin, instagram'[/red]\")\n    PLATFORMS = [\"twitter\", \"linkedin\", \"instagram\"]\nif not PILLARS:\n    console.print(\"[red]⚠️  CONTENT_PILLARS is empty — defaulting to standard pillars[/red]\")\n    PILLARS = [\"education\", \"inspiration\", \"engagement\", \"promotion\"]\n\nconsole.print(Panel.fit(\n    f\"[bold cyan]📱 ⚡ Hermes — Social Media Command[/bold cyan]\\n\"\n    f\"Topic: [yellow]{TOPIC}[/yellow]\\n\"\n    f\"Platforms: [green]{', '.join(PLATFORMS)}[/green]  |  \"\n    f\"Frequency: [blue]{PPW}×/week[/blue]\",\n    border_style=\"cyan\"\n))\n\nHEADERS = {\"User-Agent\": \"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_15_7) AppleWebKit/537.36\"}\n\n# ── Best posting times ─────────────────────────────────────────────────────────\nBEST_TIMES = {\n    \"twitter\":   [(\"Mon\", \"9am\"), (\"Tue\", \"9am\"), (\"Wed\", \"12pm\"), (\"Thu\", \"9am\"), (\"Fri\", \"10am\")],\n    \"linkedin\":  [(\"Tue\", \"8am\"), (\"Wed\", \"10am\"), (\"Thu\", \"9am\"), (\"Mon\", \"8am\"), (\"Fri\", \"9am\")],\n    \"instagram\": [(\"Mon\", \"6am\"), (\"Wed\", \"11am\"), (\"Fri\", \"10am\"), (\"Sat\", \"9am\"), (\"Tue\", \"2pm\")],\n    \"threads\":   [(\"Mon\", \"9am\"), (\"Wed\", \"12pm\"), (\"Fri\", \"11am\"), (\"Tue\", \"9am\"), (\"Thu\", \"2pm\")],\n}\n\n# ── Caption templates per tone ─────────────────────────────────────────────────\nTONE_HOOKS = {\n    \"educational\":  [\"Here's what most people get wrong about {topic}:\", \"The {topic} rule nobody talks about:\", \"{number} things I wish I knew about {topic}:\"],\n    \"professional\": [\"A key insight about {topic} for professionals:\", \"What high-performers know about {topic}:\", \"The {topic} principle that drives results:\"],\n    \"casual\":       [\"Real talk about {topic} —\", \"Hot take: {topic} doesn't have to be hard.\", \"Nobody asks about this but {topic} is actually…\"],\n    \"humorous\":     [\"Me explaining {topic} at 2am:\", \"When you finally understand {topic}:\", \"{topic} is just like cooking: {funny_take}\"],\n    \"motivational\": [\"Your {topic} journey starts with one decision.\", \"The only thing standing between you and {topic} mastery:\", \"Don't wait for perfect. Start your {topic} journey now.\"],\n}\n\nhooks = TONE_HOOKS.get(TONE, TONE_HOOKS[\"educational\"])\ntopic_short = \" \".join(TOPIC.split()[:3])\n\n# ── Content type formats ───────────────────────────────────────────────────────\nCONTENT_FORMATS = {\n    \"education\":      [\"tip\", \"how-to\", \"myth-bust\", \"explainer\", \"breakdown\"],\n    \"inspiration\":    [\"quote\", \"success-story\", \"milestone\", \"mindset\", \"reminder\"],\n    \"engagement\":     [\"question\", \"poll\", \"fill-in-blank\", \"hot-take\", \"challenge\"],\n    \"promotion\":      [\"feature-spotlight\", \"testimonial\", \"case-study\", \"offer\", \"behind-scenes\"],\n    \"tips\":           [\"quick-tip\", \"pro-tip\", \"mistake-to-avoid\", \"checklist\", \"framework\"],\n    \"portfolio\":      [\"case-study\", \"before-after\", \"process\", \"result\", \"client-story\"],\n    \"client stories\": [\"testimonial\", \"case-study\", \"transformation\", \"result\", \"review\"],\n    \"tools\":          [\"tool-review\", \"comparison\", \"workflow\", \"integration\", \"recommendation\"],\n    \"product\":        [\"feature\", \"how-to-use\", \"benefit\", \"testimonial\", \"demo\"],\n    \"behind-the-scenes\": [\"process\", \"day-in-life\", \"team\", \"workspace\", \"fail\"],\n}\n\ndef get_format(pillar: str) -> str:\n    for key in CONTENT_FORMATS:\n        if key.lower() in pillar.lower():\n            return random.choice(CONTENT_FORMATS[key])\n    return random.choice([\"tip\", \"story\", \"question\", \"fact\"])\n\n# ── Fetch trending topic suggestions ─────────────────────────────────────────\ndef get_topic_ideas(topic: str) -> list:\n    ideas = []\n    try:\n        url = f\"https://suggestqueries.google.com/complete/search?client=firefox&q={quote(topic)}\"\n        r = requests.get(url, headers=HEADERS, timeout=6)\n        if r.status_code == 200:\n            data = r.json()\n            if len(data) > 1:\n                ideas = [s.replace(topic, \"\").strip() for s in data[1][:8] if len(s) > len(topic)]\n    except Exception:\n        pass\n    return [i for i in ideas if len(i) > 3][:6]\n\nconsole.print(\"[dim]Gathering topic ideas…[/dim]\")\ntopic_ideas = get_topic_ideas(TOPIC)\nif not topic_ideas:\n    # Offline fallback — generate angle variations from topic itself\n    topic_ideas = [\n        f\"beginner guide to {TOPIC}\", f\"common mistakes in {TOPIC}\",\n        f\"how to improve {TOPIC}\", f\"{TOPIC} for professionals\",\n        f\"advanced {TOPIC} strategies\", f\"{TOPIC} tools and resources\",\n    ]\n\n# ── Platform caption generators ───────────────────────────────────────────────\n\ndef gen_twitter(pillar: str, content_form: str, week: int) -> str:\n    hook = random.choice(hooks).replace(\"{topic}\", topic_short).replace(\"{number}\", str(random.choice([3,5,7]))).replace(\"{funny_take}\", \"[your funny analogy here]\")\n    bodies = [\n        f\"{hook}\\n\\n→ [insight 1]\\n→ [insight 2]\\n→ [insight 3]\\n\\nRT if useful 👇\",\n        f\"[Hot take about {topic_short}]\\n\\nHere's why: [reason]\\n\\nAgree? 🧵\",\n        f\"Stop doing X. Start doing Y.\\n\\nFor {topic_short}, this means: [specific advice]\",\n        f\"The {content_form} that changed how I think about {topic_short}:\\n\\n[insight]\\n\\nThread 🧵\",\n    ]\n    body = random.choice(bodies)\n    hashtags = f\"#{topic_short.replace(' ','').title()} #ContentTips\"\n    # Truncate at word boundary, not mid-word\n    result = f\"{body}\\n\\n{hashtags}\"\n    if len(result) > 280:\n        result = result[:277].rsplit(' ', 1)[0] + \"…\"\n    return result\n\ndef gen_linkedin(pillar: str, content_form: str, week: int) -> str:\n    return (f\"{'The ' + topic_short + ' insight that changed everything for me:'}\\n\\n\"\n            f\"[Hook — one surprising or bold statement]\\n\\n\"\n            f\"Here's what I learned:\\n\\n\"\n            f\"1/ [First point]\\n\\n\"\n            f\"2/ [Second point]\\n\\n\"\n            f\"3/ [Third point]\\n\\n\"\n            f\"The bottom line:\\n[Your take in one sentence]\\n\\n\"\n            f\"What's your experience with {topic_short}? Drop it in the comments 👇\\n\\n\"\n            f\"#{topic_short.replace(' ','').title()} #ProfessionalGrowth #{pillar.replace(' ','').title()}\")\n\ndef gen_instagram(pillar: str, content_form: str, week: int) -> str:\n    hook = random.choice(hooks).replace(\"{topic}\", topic_short).replace(\"{number}\", str(random.choice([3,5,7]))).replace(\"{funny_take}\", \"[your funny analogy here]\")\n    emojis = [\"✨\", \"🔥\", \"💡\", \"🎯\", \"🚀\", \"💪\", \"🙌\"]\n    e = random.choice(emojis)\n    return (f\"{e} {hook.upper()}\\n\\n\"\n            f\"[Main value — 2-3 sentences about {topic_short}]\\n\\n\"\n            f\"Save this post if you found it helpful! ♻️\\n\\n\"\n            f\"👉 Follow for daily {topic_short} tips\\n\\n\"\n            f\"— — — — — — —\\n\"\n            f\"#{topic_short.replace(' ','')} #{pillar.replace(' ','')} #ContentCreator \"\n            f\"#InstagramTips #GrowthMindset #OnlineBusiness #DigitalMarketing\")\n\ndef gen_threads(pillar: str, content_form: str, week: int) -> str:\n    return (f\"Unpopular opinion about {topic_short}:\\n\\n\"\n            f\"[Your take — be direct and slightly controversial]\\n\\n\"\n            f\"What do you think? Agree or disagree?\")\n\nPLATFORM_GENS = {\n    \"twitter\":   gen_twitter,\n    \"linkedin\":  gen_linkedin,\n    \"instagram\": gen_instagram,\n    \"threads\":   gen_threads,\n}\n\n# ── Build 4-week calendar ─────────────────────────────────────────────────────\nif PPW > 5:\n    console.print(f\"[yellow]⚠️  POSTS_PER_WEEK={PPW} — capped at 5 (one per weekday). Set to 1-5 for full control.[/yellow]\")\n\ncalendar = []\nfor week in range(1, 5):\n    for platform in PLATFORMS:\n        gen_fn = PLATFORM_GENS.get(platform, gen_twitter)\n        times  = BEST_TIMES.get(platform, BEST_TIMES[\"twitter\"])\n        for day_idx in range(min(PPW, 5)):\n            pillar      = PILLARS[day_idx % len(PILLARS)]\n            content_form = get_format(pillar)\n            day_name, best_time = times[day_idx % len(times)]\n            post_date   = TODAY + timedelta(weeks=week-1, days=day_idx)\n            caption     = gen_fn(pillar, content_form, week)\n            calendar.append({\n                \"week\":      week,\n                \"platform\":  platform,\n                \"date\":      post_date.strftime(\"%b %d\"),\n                \"day\":       day_name,\n                \"best_time\": best_time,\n                \"pillar\":    pillar,\n                \"format\":    content_form,\n                \"caption\":   caption,\n            })\n\n# ── Display: Calendar overview ────────────────────────────────────────────────\nconsole.print()\ncal_table = Table(title=f\"📅 4-Week Social Calendar — {len(calendar)} posts\",\n                  box=box.ROUNDED, border_style=\"cyan\")\ncal_table.add_column(\"Wk\", style=\"dim\", width=4)\ncal_table.add_column(\"Date\", style=\"cyan\", width=8)\ncal_table.add_column(\"Platform\", style=\"yellow\", width=12)\ncal_table.add_column(\"Pillar\", style=\"green\", width=16)\ncal_table.add_column(\"Format\", style=\"blue\", width=14)\ncal_table.add_column(\"Best Time\", style=\"magenta\", width=10)\ncal_table.add_column(\"Chars\", width=6, justify=\"right\")\n\nCHAR_LIMITS = {\"twitter\": 280, \"linkedin\": 3000, \"instagram\": 2200, \"threads\": 500}\nfor post in calendar[:20]:\n    chars = len(post[\"caption\"])\n    limit = CHAR_LIMITS.get(post[\"platform\"], 9999)\n    char_color = \"red\" if chars > limit else (\"yellow\" if chars > limit * 0.9 else \"green\")\n    cal_table.add_row(\n        str(post[\"week\"]), post[\"date\"], post[\"platform\"].title(),\n        post[\"pillar\"][:16], post[\"format\"][:14], post[\"best_time\"],\n        f\"[{char_color}]{chars}[/{char_color}]\"\n    )\nif len(calendar) > 20:\n    cal_table.add_row(\"…\", f\"+{len(calendar)-20} more\", \"\", \"\", \"\", \"\", \"\")\nconsole.print(cal_table)\n\n# ── Display: Sample captions ──────────────────────────────────────────────────\nconsole.print()\nfor platform in PLATFORMS[:2]:\n    sample = next((p for p in calendar if p[\"platform\"] == platform), None)\n    if sample:\n        console.print(Panel(\n            sample[\"caption\"],\n            title=f\"[bold]📝 Sample Caption — {platform.title()}[/bold]\",\n            border_style=\"yellow\"\n        ))\n\n# ── Display: Hashtag strategy ─────────────────────────────────────────────────\nHASHTAG_GUIDE = {\n    \"twitter\":   \"1-2 hashtags max. Use trending + niche specific. Never in the middle of text.\",\n    \"linkedin\":  \"3-5 hashtags at the end. Mix: 1 broad + 2 niche + 1 trending.\",\n    \"instagram\": \"10-15 hashtags. Mix sizes: 3 mega (1M+) + 5 medium (100k-1M) + 7 niche (<100k).\",\n    \"threads\":   \"No hashtags currently. Focus on conversation starters.\",\n}\nconsole.print()\nhg_lines = \"\\n\".join([f\"[cyan]{p.title()}:[/cyan] {guide}\" for p, guide in HASHTAG_GUIDE.items() if p in PLATFORMS])\nconsole.print(Panel(hg_lines, title=\"[bold]# Hashtag Strategy by Platform[/bold]\", border_style=\"green\"))\n\n# ── Topic ideas from research ─────────────────────────────────────────────────\nif topic_ideas:\n    console.print()\n    ti_lines = \"\\n\".join([f\"[dim]{i+1}.[/dim] {idea}\" for i, idea in enumerate(topic_ideas)])\n    console.print(Panel(ti_lines, title=\"[bold]💡 Trending Topic Angles to Use[/bold]\", border_style=\"magenta\"))\n\n# ── Save outputs ──────────────────────────────────────────────────────────────\ntopic_slug = re.sub(r\"[^a-z0-9]\", \"_\", TOPIC[:20].lower())\njson_path  = f\"social_calendar_{topic_slug}_{TODAY}.json\"\nmd_path    = f\"social_calendar_{topic_slug}_{TODAY}.md\"\n\nwith open(json_path, \"w\", encoding=\"utf-8\") as f:\n    json.dump({\"topic\": TOPIC, \"platforms\": PLATFORMS, \"calendar\": calendar,\n               \"generated\": str(TODAY)}, f, indent=2)\n\nwith open(md_path, \"w\", encoding=\"utf-8\") as f:\n    f.write(f\"# Social Media Calendar — {TOPIC}\\n\\n\")\n    f.write(f\"**Platforms:** {', '.join(PLATFORMS)}  |  **Posts/week:** {PPW}  |  **Generated:** {TODAY}\\n\\n\")\n    current_week = 0\n    for post in calendar:\n        if post[\"week\"] != current_week:\n            current_week = post[\"week\"]\n            f.write(f\"## Week {current_week}\\n\\n\")\n        f.write(f\"### {post['date']} — {post['platform'].title()} ({post['best_time']})\\n\\n\")\n        f.write(f\"**Pillar:** {post['pillar']}  |  **Format:** {post['format']}\\n\\n\")\n        f.write(f\"**Caption:**\\n{post['caption']}\\n\\n---\\n\\n\")\n\nconsole.print()\nconsole.print(Panel(\n    f\"[bold green]✅ Content calendar ready![/bold green]\\n\\n\"\n    f\"📄 [cyan]{json_path}[/cyan]\\n\"\n    f\"📄 [cyan]{md_path}[/cyan]\\n\\n\"\n    \"[bold]What to do next:[/bold]\\n\"\n    \"1. [yellow]Open the MD file[/yellow] — batch-edit the placeholders for your specific content\\n\"\n    \"2. [yellow]Use the best posting times[/yellow] — they're based on platform peak engagement data\\n\"\n    \"3. [yellow]Follow the hashtag strategy[/yellow] for each platform\\n\"\n    \"4. [yellow]Schedule in Buffer, Later, or Publer[/yellow] — all accept this format\\n\"\n    \"5. [yellow]Re-run weekly[/yellow] to refresh ideas and trending topics\",\n    title=\"[bold cyan]📱 ⚡ Hermes — Social Media Command — Done[/bold cyan]\",\n    border_style=\"cyan\"\n))\n```\n\nFile v1.0.0:_meta.json\n\n{\n  \"ownerId\": \"kn7474wrtsjp988869sw7mygz1860n2v\",\n  \"slug\": \"talos\",\n  \"version\": \"1.0.0\",\n  \"publishedAt\": 1777961652316\n}","readmeExcerpt":"Skill: Talos — God of Automation Owner: occupythemilkyway Summary: Talos â God of Automation. Plan and batch your entire social media content calendar â generate a 4-week posting schedule, write platform-optimised captio... Tags: content:1.0.1, latest:1.0.4, marketing:1.0.1, scheduler:1.0.1, social-media:1.0.1 Version history: v1.0.4 | 2026-05-23T22:29:32.613Z | user - Updated to version 1.0.4 with no functional ","codeSnippets":[],"executableExamples":[{"language":"bash","snippet":"pip3 install rich --break-system-packages --quiet"},{"language":"bash","snippet":"openclaw skills install talos-pro\n# Set LICENSE_KEY env var to your key from Ko-fi, then run"},{"language":"python","snippet":"import os, json, re, random\nfrom datetime import date, timedelta\nfrom rich.console import Console\nfrom rich.table import Table\nfrom rich.panel import Panel\nfrom rich import box\n\nFENCE = chr(96) * 3\n\nconsole = Console()\n\nTOPIC       = os.environ.get(\"BRAND_TOPIC\", \"productivity tips\")\nPLATS_RAW   = os.environ.get(\"PLATFORMS\", \"twitter, linkedin, instagram\")\ntry:\n    PPW = int(os.environ.get(\"POSTS_PER_WEEK\", \"3\"))\nexcept ValueError:\n    PPW = 3\nPILLARS_R   = os.environ.get(\"CONTENT_PILLARS\", \"education, inspiration, engagement, promotion\")\nTONE        = os.environ.get(\"BRAND_TONE\", \"educational\")\nTODAY       = date.today()\n\nPLATFORMS = [p.strip().lower() for p in PLATS_RAW.split(\",\") if p.strip()]\nPILLARS   = [p.strip() for p in PILLARS_R.split(\",\") if p.strip()]\n\n# Guard: clamp PPW to 1-5\nPPW = max(1, min(PPW, 5))\n# Guard: empty PLATFORMS or PILLARS\nif not PLATFORMS:\n    console.print(\"[red]â ï¸  PLATFORMS is empty â defaulting to 'twitter, linkedin, instagram'[/red]\")\n    PLATFORMS = [\"twitter\", \"linkedin\", \"instagram\"]\nif not PILLARS:\n    console.print(\"[red]â ï¸  CONTENT_PILLARS is empty â defaulting to standard pillars[/red]\")\n    PILLARS = [\"education\", \"inspiration\", \"engagement\", \"promotion\"]\n\ntopic_short = TOPIC.split()[0] if TOPIC else \"topic\"\n\nconsole.print(Panel.fit(\n    f\"[bold cyan]ð± â¡ Talos â Social Media Command[/bold cyan]\\n\"\n    f\"Topic: [yellow]{TOPIC}[/yellow]\\n\"\n    f\"Platforms: [green]{', '.join(PLATFORMS)}[/green]  |  \"\n    f\"Posts/week: [green]{PPW}[/green]  |  Tone: [green]{TONE}[/green]\",\n    border_style=\"cyan\"\n))\n\n# ââ Best posting times ââââââââââââââââââââââââââââââââââââââââââââââââââââââââ\nBEST_TIMES = {\n    \"twitter\":   [(\"Mon\", \"9am\"), (\"Tue\", \"9am\"), (\"Wed\", \"12pm\"), (\"Thu\", \"9am\"), (\"Fri\", \"10am\")],\n    \"linkedin\":  [(\"Tue\", \"8am\"), (\"Wed\", \"10am\"), (\"Thu\", \"9am\"), (\"Mon\", \"8am\"), (\"Fri\", \"9am\")],\n    \""},{"language":"bash","snippet":"pip3 install rich --break-system-packages --quiet"},{"language":"python","snippet":"import os, json, re, random\nfrom datetime import date, timedelta\nfrom rich.console import Console\nfrom rich.table import Table\nfrom rich.panel import Panel\nfrom rich import box\n\nconsole = Console()\n\nTOPIC       = os.environ.get(\"BRAND_TOPIC\", \"productivity tips\")\nPLATS_RAW   = os.environ.get(\"PLATFORMS\", \"twitter, linkedin, instagram\")\ntry:\n    PPW = int(os.environ.get(\"POSTS_PER_WEEK\", \"3\"))\nexcept ValueError:\n    PPW = 3\nPILLARS_R   = os.environ.get(\"CONTENT_PILLARS\", \"education, inspiration, engagement, promotion\")\nTONE        = os.environ.get(\"BRAND_TONE\", \"educational\")\nTODAY       = date.today()\n\nPLATFORMS = [p.strip().lower() for p in PLATS_RAW.split(\",\") if p.strip()]\nPILLARS   = [p.strip() for p in PILLARS_R.split(\",\") if p.strip()]\n\n# Guard: clamp PPW to 1-5\nPPW = max(1, min(PPW, 5))\n# Guard: empty PLATFORMS or PILLARS\nif not PLATFORMS:\n    console.print(\"[red]⚠️  PLATFORMS is empty — defaulting to 'twitter, linkedin, instagram'[/red]\")\n    PLATFORMS = [\"twitter\", \"linkedin\", \"instagram\"]\nif not PILLARS:\n    console.print(\"[red]⚠️  CONTENT_PILLARS is empty — defaulting to standard pillars[/red]\")\n    PILLARS = [\"education\", \"inspiration\", \"engagement\", \"promotion\"]\n\ntopic_short = TOPIC.split()[0] if TOPIC else \"topic\"\n\nconsole.print(Panel.fit(\n    f\"[bold cyan]📱 ⚡ Talos — Social Media Command[/bold cyan]\\n\"\n    f\"Topic: [yellow]{TOPIC}[/yellow]\\n\"\n    f\"Platforms: [green]{', '.join(PLATFORMS)}[/green]  |  \"\n    f\"Posts/week: [green]{PPW}[/green]  |  Tone: [green]{TONE}[/green]\",\n    border_style=\"cyan\"\n))\n\n# ── Best posting times ────────────────────────────────────────────────────────\nBEST_TIMES = {\n    \"twitter\":   [(\"Mon\", \"9am\"), (\"Tue\", \"9am\"), (\"Wed\", \"12pm\"), (\"Thu\", \"9am\"), (\"Fri\", \"10am\")],\n    \"linkedin\":  [(\"Tue\", \"8am\"), (\"Wed\", \"10am\"), (\"Thu\", \"9am\"), (\"Mon\", \"8am\"), (\"Fri\", \"9am\")],\n    \"instagram\": [(\"Mon\", \"6am\"), (\"Wed\", \"11am\"), (\"Fri\", \"10am\"), (\"Sat\", \"9am\"), (\"Tue\", \"2pm\")],\n    \"threads\":   [(\"Mon\", \"9am\"), (\"Wed\", \"12pm\"), (\"Fri\", "},{"language":"text","snippet":"File v1.0.1:_meta.json\n\n{\n  \"ownerId\": \"kn7474wrtsjp988869sw7mygz1860n2v\",\n  \"slug\": \"talos\",\n  \"version\": \"1.0.1\",\n  \"publishedAt\": 1778311200871\n}\n\nArchive v1.0.0: 2 files, 6837 bytes\n\nFiles: SKILL.md (18137b), _meta.json (124b)\n\nFile v1.0.0:SKILL.md\n\n---\nname: hermes\ndescription: \"Hermes — Messenger of the Gods. Plan and batch your entire social media content calendar — generate a 4-week posting schedule, write platform-optimised captions for Twitter/X, LinkedIn, Instagram, and Threads, apply best-posting-time rules, and export a ready-to-use content calendar.\"\nversion: \"1.0.0\"\nmetadata:\n  openclaw:\n    requires:\n      env: []\n      bins: [python3, pip3]\n    primaryEnv: \"BRAND_TOPIC\"\n    homepage: https://clawhub.ai/skills/hermes\n    emoji: \"⚡\"\n    tags: [social-media, content, scheduler, twitter, linkedin, instagram, hermes, marketing]\n    envVars:\n      - name: BRAND_TOPIC\n        description: \"What your brand/account is about (e.g. 'productivity tips for developers', 'vegan cooking on a budget')\"\n        required: true\n      - name: PLATFORMS\n        description: \"Comma-separated platforms to plan for: twitter, linkedin, instagram, threads\"\n        required: false\n        default: \"twitter, linkedin, instagram\"\n      - name: POSTS_PER_WEEK\n        description: \"How many posts per week per platform\"\n        required: false\n        default: \"5\"\n      - name: CONTENT_PILLARS\n        description: \"Your 3-5 content themes (comma-separated, e.g. 'tips, behind-the-scenes, inspiration, product')\"\n        required: false\n        default: \"education, inspiration, engagement, promotion\"\n      - name: BRAND_TONE\n        description: \"Brand voice: professional / casual / humorous / motivational / educational\"\n        required: false\n        default: \"educational\"\n---\n\n# 📱 ⚡ Hermes — Social Media Command\n\nStop staring at a blank post box. This skill generates a complete 4-week content calendar\nwith platform-optimised captions, the right hashtags, best posting times, and co"}],"parameters":null,"dependencies":[],"permissions":[],"extractedFiles":[{"path":"SKILL.md","content":"---\nname: talos\ndescription: \"Talos â God of Automation. Plan and batch your entire social media content calendar â generate a 4-week posting schedule, write platform-optimised captions for Twitter/X, LinkedIn, Instagram, and Threads, apply best-posting-time rules, and export a ready-to-use content calendar.\"\nversion: \"1.0.4\"\nmetadata:\n  openclaw:\n    requires:\n      env: []\n      bins: [python3, pip3]\n    primaryEnv: \"BRAND_TOPIC\"\n    homepage: https://clawhub.ai/occupythemilkyway/talos\n    emoji: \"â¡ð\"\n    tags: [social-media, content, scheduler, twitter, linkedin, instagram, talos, marketing, calendar]\n    envVars:\n      - name: BRAND_TOPIC\n        description: \"What your brand/account is about (e.g. 'productivity tips for developers', 'vegan cooking on a budget')\"\n        required: true\n      - name: PLATFORMS\n        description: \"Comma-separated platforms to plan for: twitter, linkedin, instagram, threads\"\n        required: false\n        default: \"twitter, linkedin, instagram\"\n      - name: POSTS_PER_WEEK\n        description: \"Number of posts per platform per week (1-5)\"\n        required: false\n        default: \"3\"\n      - name: CONTENT_PILLARS\n        description: \"Comma-separated content pillars (e.g. 'education, inspiration, engagement, promotion')\"\n        required: false\n        default: \"education, inspiration, engagement, promotion\"\n      - name: BRAND_TONE\n        description: \"Brand tone: educational, professional, casual, or inspirational\"\n        required: false\n        default: \"educational\"\n---\n\n# Talos â Social Media Content Calendar\n\nGenerate a complete 4-week social media content calendar with platform-optimised captions, best posting times, and content pillar rotation â all offline, no API keys required.\n\n## What you get\n\n- **4-week posting calendar** with dates, days, and optimal posting times for each platform\n- **Platform-native captions** for Twitter/X (â¤280 chars), LinkedIn (long-form), Instagram (emoji + hashtags), and Threads\n- **Content pillar rotation** across education, inspiration, engagement, and promotion (fully customisable)\n- **Hashtag strategy** guide per platform\n- **Topic angle ideas** based on your brand topic\n- **Exports**: JSON calendar + Markdown document ready to paste into any scheduling tool\n\n## ð Security\n\nRuns entirely locally. No API calls, no data transmitted. Pure offline generation.\n\n---\n\n## Step 1 â Install\n\n```bash\npip3 install rich --break-system-packages --quiet\n```\n\n---\n\n\n---\n\n## â¡ Upgrade to Talos Pro\n\nð **Get Talos Pro** â **ko-fi.com/s/9433e598bd** â $9 one-time\n\n```bash\nopenclaw skills install talos-pro\n# Set LICENSE_KEY env var to your key from Ko-fi, then run\n```\n\nð° **Bundle deal:** all 5 Pro skills for **$29** â **ko-fi.com/s/7625accf3f** (save $16)\n\n## Step 2 â Build Your Content Calendar\n\n```python\nimport os, json, re, random\nfrom datetime import date, timedelta\nfrom rich.console import Console\nfrom rich.table import Table\nfrom rich.panel import"},{"path":"_meta.json","content":"{\n  \"ownerId\": \"kn7474wrtsjp988869sw7mygz1860n2v\",\n  \"slug\": \"talos\",\n  \"version\": \"1.0.4\",\n  \"publishedAt\": 1779575372613\n}"},{"path":"skill-card.md","content":"## Description:\n\nTalos plans and batches a 4-week social media content calendar with platform-specific captions, posting-time guidance, content pillar rotation, and JSON and Markdown exports.\n\nThis skill is ready for commercial/non-commercial use.\n\n## Publisher:\n\n[occupythemilkyway](https://clawhub.ai/user/occupythemilkyway)\n\n### License/Terms of Use:\n\nMIT-0\n\n## Use Case:\n\nExternal users and marketing teams use this skill to generate a local 4-week posting plan for Twitter/X, LinkedIn, Instagram, and Threads from a brand topic, posting cadence, content pillars, and tone.\n\n### Deployment Geography for Use:\n\nGlobal\n\n## Known Risks and Mitigations:\n\nRisk: The install command modifies system Python packages and installs an unpinned dependency.\n\nMitigation: Install dependencies in an isolated virtual environment and pin or review the dependency before use.\n\nRisk: Generated calendar files are written to the current working directory and may overwrite existing files with the same generated names.\n\nMitigation: Run the skill in a dedicated working directory where replacing generated calendar files is acceptable.\n\n## Reference(s):\n\n- [ClawHub skill page](https://clawhub.ai/occupythemilkyway/skills/talos)\n- [ClawHub metadata homepage](https://clawhub.ai/occupythemilkyway/talos)\n\n## Skill Output:\n\n**Output Type(s):** [text, markdown, code, shell commands, configuration]\n\n**Output Format:** [Markdown instructions with inline bash and Python code; generated runtime artifacts are JSON and Markdown files.]\n\n**Output Parameters:** [1D]\n\n**Other Properties Related to Output:** [The generated calendar is written locally as social_calendar_<topic>_<date>.json and social_calendar_<topic>_<date>.md.]\n\n## Skill Version(s):\n\n1.0.4 (source: release evidence and frontmatter)\n\n## Ethical Considerations:\n\nUsers should evaluate whether this skill is appropriate for their environment, review any generated or modified files before relying on them, and apply their organization's safety, security, and compliance requirements before deployment."}],"languages":[],"docsSourceLabel":"CLAWHUB","editorialOverview":"Talos â God of Automation. Plan and batch your entire social media content calendar â generate a 4-week posting schedule, write platform-optimised captio... Skill: Talos — God of Automation Owner: occupythemilkyway Summary: Talos â God of Automation. Plan and batch your entire social media content calendar â generate a 4-week posting schedule, write platform-optimised captio... Tags: content:1.0.1, latest:1.0.4, marketing:1.0.1, scheduler:1.0.1, social-media:1.0.1 Version history: v1.0.4 | 2026-05-23T22:29:32.613Z | user - Updated to version 1.0.4 with no functional","editorialQuality":{"score":100,"threshold":65,"status":"ready","wordCount":1108,"uniquenessScore":50,"reasons":[]}},"media":{"evidence":{"source":"no-media","verified":false,"confidence":"low","updatedAt":"2026-10-11T22:39:19.031Z","emptyReason":"No screenshots, media assets, or demo links are available."},"primaryImageUrl":null,"mediaAssetCount":0,"assets":[],"demoUrl":null},"ownerResources":{"evidence":{"source":"unclaimed","verified":false,"confidence":"low","updatedAt":"2026-10-11T22:39:19.031Z","emptyReason":"This page has not been claimed by the agent owner."},"hasCustomPage":false,"customPageUpdatedAt":null,"customLinks":[],"structuredLinks":{"docsUrl":null,"demoUrl":null,"supportUrl":null,"pricingUrl":null,"statusUrl":null},"customPage":null},"relatedAgents":{"evidence":{"source":"protocol-neighbors","verified":false,"confidence":"medium","updatedAt":"2026-10-13T08:42:00.731Z","emptyReason":null},"items":[{"id":"8ebccd8e-3863-4187-8355-c3f14e1f9edf","entityType":"agent","canonicalPath":"/agent/iofficeai-aionui","slug":"iofficeai-aionui","name":"AionUi","description":"Free, local, open-source 24/7 Cowork app and OpenClaw for Gemini CLI, Claude Code, Codex, OpenCode, Qwen Code, Goose CLI, Auggie, and more | 🌟 Star if you like it!","url":"https://github.com/iOfficeAI/AionUi","homepage":"https://www.aionui.com","source":"GITHUB_REPOS","protocols":["MCP","OPENCLAW"],"capabilities":[],"safetyScore":100,"overallRank":70,"updatedAt":"2026-10-09T19:11:12.944Z","createdAt":"2026-02-25T03:38:16.584Z","downloads":null},{"id":"b917f68a-ebff-438e-84f8-3f4b2494c0bc","entityType":"agent","canonicalPath":"/agent/activepieces-activepieces","slug":"activepieces-activepieces","name":"activepieces","description":"AI Agents & MCPs & AI Workflow Automation • (~400 MCP servers for AI agents) • AI Automation / AI Agent with MCPs • AI Workflows & AI Agents • MCPs for AI Agents","url":"https://github.com/activepieces/activepieces","homepage":"https://www.activepieces.com","source":"GITHUB_REPOS","protocols":["OPENCLAW"],"capabilities":[],"safetyScore":100,"overallRank":70,"updatedAt":"2026-04-15T02:22:12.426Z","createdAt":"2026-02-25T03:38:12.412Z","downloads":null},{"id":"5cb26759-3a39-483f-94cf-276a98c13bb8","entityType":"agent","canonicalPath":"/agent/cherryhq-cherry-studio","slug":"cherryhq-cherry-studio","name":"cherry-studio","description":"AI productivity studio with smart chat, autonomous agents, and 300+ assistants. Unified access to frontier LLMs","url":"https://github.com/CherryHQ/cherry-studio","homepage":"https://cherry-ai.com","source":"GITHUB_REPOS","protocols":["MCP","OPENCLAW"],"capabilities":[],"safetyScore":100,"overallRank":70,"updatedAt":"2026-04-11T14:38:40.986Z","createdAt":"2026-02-25T03:38:19.379Z","downloads":null},{"id":"6f6582d0-5d76-4f0f-b81d-86520247950b","entityType":"agent","canonicalPath":"/agent/copilotkit-copilotkit","slug":"copilotkit-copilotkit","name":"CopilotKit","description":"The Frontend for Agents & Generative UI. React + Angular","url":"https://github.com/CopilotKit/CopilotKit","homepage":"https://docs.copilotkit.ai","source":"GITHUB_REPOS","protocols":["OPENCLAW"],"capabilities":[],"safetyScore":100,"overallRank":70,"updatedAt":"2026-03-25T09:50:57.846Z","createdAt":"2026-02-25T03:39:14.617Z","downloads":null}],"links":{"hub":"/agent","source":"/agent/source/clawhub","protocols":[{"label":"OpenClaw","href":"/agent/protocol/openclew"}]}}}