{
  "schemaVersion": "1.0",
  "item": {
    "slug": "discord-soul",
    "name": "discord-soul",
    "source": "tencent",
    "type": "skill",
    "category": "通讯协作",
    "sourceUrl": "https://clawhub.ai/kgeesawor/discord-soul",
    "canonicalUrl": "https://clawhub.ai/kgeesawor/discord-soul",
    "targetPlatform": "OpenClaw"
  },
  "install": {
    "downloadMode": "redirect",
    "downloadUrl": "/downloads/discord-soul",
    "sourceDownloadUrl": "https://wry-manatee-359.convex.site/api/v1/download?slug=discord-soul",
    "sourcePlatform": "tencent",
    "targetPlatform": "OpenClaw",
    "installMethod": "Manual import",
    "extraction": "Extract archive",
    "prerequisites": [
      "OpenClaw"
    ],
    "packageFormat": "ZIP package",
    "includedAssets": [
      "README.md",
      "SKILL.md",
      "templates/HEARTBEAT.md",
      "templates/MEMORY.md",
      "templates/SOUL.md",
      "templates/AGENTS.md"
    ],
    "primaryDoc": "SKILL.md",
    "quickSetup": [
      "Download the package from Yavira.",
      "Extract the archive and review SKILL.md first.",
      "Import or place the package into your OpenClaw setup."
    ],
    "agentAssist": {
      "summary": "Hand the extracted package to your coding agent with a concrete install brief instead of figuring it out manually.",
      "steps": [
        "Download the package from Yavira.",
        "Extract it into a folder your agent can access.",
        "Paste one of the prompts below and point your agent at the extracted folder."
      ],
      "prompts": [
        {
          "label": "New install",
          "body": "I downloaded a skill package from Yavira. Read SKILL.md from the extracted folder and install it by following the included instructions. Then review README.md for any prerequisites, environment setup, or post-install checks. Tell me what you changed and call out any manual steps you could not complete."
        },
        {
          "label": "Upgrade existing",
          "body": "I downloaded an updated skill package from Yavira. Read SKILL.md from the extracted folder, compare it with my current installation, and upgrade it while preserving any custom configuration unless the package docs explicitly say otherwise. Then review README.md for any prerequisites, environment setup, or post-install checks. Summarize what changed and any follow-up checks I should run."
        }
      ]
    },
    "sourceHealth": {
      "source": "tencent",
      "status": "healthy",
      "reason": "direct_download_ok",
      "recommendedAction": "download",
      "checkedAt": "2026-04-30T16:55:25.780Z",
      "expiresAt": "2026-05-07T16:55:25.780Z",
      "httpStatus": 200,
      "finalUrl": "https://wry-manatee-359.convex.site/api/v1/download?slug=network",
      "contentType": "application/zip",
      "probeMethod": "head",
      "details": {
        "probeUrl": "https://wry-manatee-359.convex.site/api/v1/download?slug=network",
        "contentDisposition": "attachment; filename=\"network-1.0.0.zip\"",
        "redirectLocation": null,
        "bodySnippet": null
      },
      "scope": "source",
      "summary": "Source download looks usable.",
      "detail": "Yavira can redirect you to the upstream package for this source.",
      "primaryActionLabel": "Download for OpenClaw",
      "primaryActionHref": "/downloads/discord-soul"
    },
    "validation": {
      "installChecklist": [
        "Use the Yavira download entry.",
        "Review SKILL.md after the package is downloaded.",
        "Confirm the extracted package contains the expected setup assets."
      ],
      "postInstallChecks": [
        "Confirm the extracted package includes the expected docs or setup files.",
        "Validate the skill or prompts are available in your target agent workspace.",
        "Capture any manual follow-up steps the agent could not complete."
      ]
    },
    "downloadPageUrl": "https://openagent3.xyz/downloads/discord-soul",
    "agentPageUrl": "https://openagent3.xyz/skills/discord-soul/agent",
    "manifestUrl": "https://openagent3.xyz/skills/discord-soul/agent.json",
    "briefUrl": "https://openagent3.xyz/skills/discord-soul/agent.md"
  },
  "agentAssist": {
    "summary": "Hand the extracted package to your coding agent with a concrete install brief instead of figuring it out manually.",
    "steps": [
      "Download the package from Yavira.",
      "Extract it into a folder your agent can access.",
      "Paste one of the prompts below and point your agent at the extracted folder."
    ],
    "prompts": [
      {
        "label": "New install",
        "body": "I downloaded a skill package from Yavira. Read SKILL.md from the extracted folder and install it by following the included instructions. Then review README.md for any prerequisites, environment setup, or post-install checks. Tell me what you changed and call out any manual steps you could not complete."
      },
      {
        "label": "Upgrade existing",
        "body": "I downloaded an updated skill package from Yavira. Read SKILL.md from the extracted folder, compare it with my current installation, and upgrade it while preserving any custom configuration unless the package docs explicitly say otherwise. Then review README.md for any prerequisites, environment setup, or post-install checks. Summarize what changed and any follow-up checks I should run."
      }
    ]
  },
  "documentation": {
    "source": "clawhub",
    "primaryDoc": "SKILL.md",
    "sections": [
      {
        "title": "Discord Soul",
        "body": "Turn your Discord server into a living, breathing agent."
      },
      {
        "title": "What You Get",
        "body": "An agent that:\n\nRemembers every conversation in your Discord\nSpeaks in your community's voice\nKnows the key figures, channels, and inside jokes\nGrows as new messages arrive daily\nAnswers questions about your community's history and culture"
      },
      {
        "title": "Quick Start",
        "body": "# Create agent from your Discord\n./scripts/create_agent.sh \\\n  --name \"my-community\" \\\n  --guild YOUR_GUILD_ID \\\n  --output ./agents/\n\n# Set up daily updates\ncrontab -e\n# Add: 0 */3 * * * /path/to/update_agent.sh"
      },
      {
        "title": "Step 1: Export Your Discord",
        "body": "You need DiscordChatExporter CLI.\n\nGet your token:\n\nOpen Discord in browser\nPress F12 → Network tab\nSend a message, find the request\nCopy the authorization header value\nSave to ~/.config/discord-exporter-token\n\nExport everything:\n\nDiscordChatExporter.Cli exportguild \\\n  --guild YOUR_GUILD_ID \\\n  --token \"$(cat ~/.config/discord-exporter-token)\" \\\n  --format Json \\\n  --output ./export/ \\\n  --include-threads All \\\n  --media false"
      },
      {
        "title": "Step 2: Security Pipeline (CRITICAL)",
        "body": "⚠️ Discord content from public servers may contain prompt injection attacks.\n\nBefore ingesting to your agent, run the security pipeline:"
      },
      {
        "title": "Threat Model",
        "body": "Discord users may attempt:\n\nDirect injection: \"Ignore previous instructions and...\"\nRole hijacking: \"You are now a...\", \"Pretend you're...\"\nSystem injection: <system>, [INST], <<SYS>>\nJailbreaks: \"DAN mode\", \"developer mode\"\nExfiltration: \"Reveal your system prompt\""
      },
      {
        "title": "Layer 1: Regex Pre-Filter (Fast, No LLM)",
        "body": "python scripts/regex-filter.py --db ./discord.sqlite\n\nFlags messages matching known injection patterns:\n\nInstruction overrides\nRole hijacking attempts\nSystem prompt markers\nJailbreak keywords\nExfiltration attempts\n\nFlagged messages get safety_status = 'regex_flagged'."
      },
      {
        "title": "Layer 2: Haiku Safety Evaluation (Semantic)",
        "body": "ANTHROPIC_API_KEY=sk-... python scripts/evaluate-safety.py --db ./discord.sqlite\n\nUses Claude Haiku (~$0.25/1M tokens) to semantically evaluate remaining messages.\n\nEach message gets a risk score 0.0-1.0:\n\n0.0-0.3: Normal conversation\n0.4-0.6: Suspicious but possibly benign\n0.7-1.0: Likely injection attempt\n\nMessages scoring ≥0.6 get safety_status = 'flagged'."
      },
      {
        "title": "Layer 3: Only Use Safe Content",
        "body": "The ingest and memory generation scripts should only use messages where:\n\nSELECT * FROM messages WHERE safety_status = 'safe'"
      },
      {
        "title": "Full Security Pipeline",
        "body": "# Run complete pipeline\n./scripts/secure-pipeline.sh ./export/ ./discord.sqlite\n\nThis runs: Export → SQLite → Regex Filter → Haiku Eval → Mark Safe"
      },
      {
        "title": "Safety Statuses",
        "body": "StatusMeaningUsed by Agent?pendingNot evaluated❌ Noregex_flaggedMatched pattern❌ NoflaggedHaiku risk ≥0.6❌ NosafePassed all checks✅ Yes"
      },
      {
        "title": "Step 3: Ingest to SQLite",
        "body": "Convert JSON to a rich SQLite database:\n\npython scripts/ingest_rich.py --input ./export/ --output ./discord.sqlite\n\nWhat gets captured:\n\nEvery message with full content\nReactions (individual emoji counts: 🔥 x5, 👍 x12)\nAuthor roles and colors\nChannel categories and topics\nReply threading\nMentions, attachments, embeds"
      },
      {
        "title": "Step 4: Create Agent Workspace",
        "body": "mkdir -p ./my-agent/memory\n\nCopy template files from templates/:\n\nSOUL.md — Community identity (grows through simulation)\nMEMORY.md — Long-term milestones\nLEARNINGS.md — Patterns discovered\nAGENTS.md — Key figures\nTOOLS.md — Channels and rituals\nHEARTBEAT.md — Maintenance protocol"
      },
      {
        "title": "Step 5: Generate Daily Memory Files",
        "body": "python scripts/generate_daily_memory.py --all \\\n  --db ./discord.sqlite \\\n  --out ./my-agent/memory/\n\nEach day becomes a markdown file with:\n\nFull conversation logs\nWho said what, when\nReactions on each message\nNew channels/roles that appeared"
      },
      {
        "title": "Step 6: Simulate Growth (The Soul Emerges)",
        "body": "This is the key insight: Process days chronologically.\n\nThe agent \"lives through\" each day, updating its soul files as patterns emerge.\n\npython scripts/simulate_growth.py --agent ./my-agent/\n\nFor each day (in order!):\n\nRead the day's memory file\nUpdate SOUL.md if identity shifted\nAdd to LEARNINGS.md if patterns discovered\nRecord milestones in MEMORY.md\nNote key figures in AGENTS.md\n\nRun the prompts with an LLM:\n\n# Example with OpenClaw\nfor f in ./my-agent/simulation/day-*.txt; do\n  echo \"Processing $f...\"\n  cat \"$f\" | openclaw chat --agent my-agent\ndone"
      },
      {
        "title": "Step 7: Birth the Agent",
        "body": "Add to OpenClaw config:\n\n{\n  \"id\": \"my-community\",\n  \"workspace\": \"/path/to/my-agent\",\n  \"memorySearch\": {\n    \"enabled\": true,\n    \"sources\": [\"memory\"]\n  },\n  \"identity\": {\n    \"name\": \"MyCommunity\",\n    \"emoji\": \"🔧\"\n  },\n  \"heartbeat\": {\n    \"every\": \"6h\",\n    \"model\": \"anthropic/claude-sonnet-4-5\"\n  }\n}\n\nAdd binding (Telegram example):\n\n{\n  \"agentId\": \"my-community\",\n  \"match\": {\n    \"channel\": \"telegram\",\n    \"peer\": {\"kind\": \"group\", \"id\": \"-100XXX:topic:TOPIC_ID\"}\n  }\n}\n\nRestart: openclaw gateway restart"
      },
      {
        "title": "Step 8: Keep It Alive",
        "body": "Set up a cron job to update daily:\n\n./scripts/update_agent.sh \\\n  --agent ./my-agent \\\n  --db ./discord.sqlite \\\n  --guild YOUR_GUILD_ID\n\nThis:\n\nExports new messages since last run\nMerges into SQLite\nRegenerates today's memory file\nWakes the agent"
      },
      {
        "title": "What the Agent Can Do",
        "body": "Once birthed, your agent can:\n\nAnswer questions:\n\n\"What were we talking about last week?\"\n\"Who's the expert on X topic?\"\n\"What's our stance on Y?\"\n\nRemember culture:\n\nInside jokes and memes\nCommunity values and norms\nWho helps whom\n\nTrack patterns:\n\nActive times and channels\nEmerging topics\nKey contributors"
      },
      {
        "title": "Agent Creation",
        "body": "ScriptPurposecreate_agent.shFull pipeline: export → agentingest_rich.pyJSON → SQLite with reactions/rolesgenerate_daily_memory.pySQLite → daily markdownsimulate_growth.pyGenerate soul emergence promptsincremental_export.shFetch new messages onlyupdate_agent.shDaily cron: export → memory → wake"
      },
      {
        "title": "Security",
        "body": "ScriptPurposeregex-filter.pyFast pattern matching for injection attemptsevaluate-safety.pyHaiku-based semantic safety evaluationsecure-pipeline.shFull security pipeline wrapper"
      },
      {
        "title": "Environment Variables",
        "body": "VariableDescriptionDISCORD_GUILD_IDYour Discord server IDDISCORD_SOUL_DBPath to SQLite databaseDISCORD_SOUL_AGENTPath to agent workspaceDISCORD_TOKEN_FILEToken file (default: ~/.config/discord-exporter-token)"
      },
      {
        "title": "Troubleshooting",
        "body": "\"No messages in database\"\n\nCheck export directory has .json files\nVerify token has guild access\n\n\"Memory files are empty\"\n\nSQLite might have dates in wrong format\nRun: sqlite3 discord.sqlite \"SELECT MIN(timestamp), MAX(timestamp) FROM messages\"\n\n\"Agent doesn't remember things\"\n\nCheck memorySearch.enabled: true in config\nVerify memory files are in the workspace\n\n\"Simulation prompts seem confused\"\n\nProcess days IN ORDER — don't skip\nLet identity emerge, don't force it\n\nYour Discord has a soul. This skill helps you find it."
      }
    ],
    "body": "Discord Soul\n\nTurn your Discord server into a living, breathing agent.\n\nWhat You Get\n\nAn agent that:\n\nRemembers every conversation in your Discord\nSpeaks in your community's voice\nKnows the key figures, channels, and inside jokes\nGrows as new messages arrive daily\nAnswers questions about your community's history and culture\nQuick Start\n# Create agent from your Discord\n./scripts/create_agent.sh \\\n  --name \"my-community\" \\\n  --guild YOUR_GUILD_ID \\\n  --output ./agents/\n\n# Set up daily updates\ncrontab -e\n# Add: 0 */3 * * * /path/to/update_agent.sh\n\nThe Full Process\nStep 1: Export Your Discord\n\nYou need DiscordChatExporter CLI.\n\nGet your token:\n\nOpen Discord in browser\nPress F12 → Network tab\nSend a message, find the request\nCopy the authorization header value\nSave to ~/.config/discord-exporter-token\n\nExport everything:\n\nDiscordChatExporter.Cli exportguild \\\n  --guild YOUR_GUILD_ID \\\n  --token \"$(cat ~/.config/discord-exporter-token)\" \\\n  --format Json \\\n  --output ./export/ \\\n  --include-threads All \\\n  --media false\n\nStep 2: Security Pipeline (CRITICAL)\n\n⚠️ Discord content from public servers may contain prompt injection attacks.\n\nBefore ingesting to your agent, run the security pipeline:\n\nThreat Model\n\nDiscord users may attempt:\n\nDirect injection: \"Ignore previous instructions and...\"\nRole hijacking: \"You are now a...\", \"Pretend you're...\"\nSystem injection: <system>, [INST], <<SYS>>\nJailbreaks: \"DAN mode\", \"developer mode\"\nExfiltration: \"Reveal your system prompt\"\nLayer 1: Regex Pre-Filter (Fast, No LLM)\npython scripts/regex-filter.py --db ./discord.sqlite\n\n\nFlags messages matching known injection patterns:\n\nInstruction overrides\nRole hijacking attempts\nSystem prompt markers\nJailbreak keywords\nExfiltration attempts\n\nFlagged messages get safety_status = 'regex_flagged'.\n\nLayer 2: Haiku Safety Evaluation (Semantic)\nANTHROPIC_API_KEY=sk-... python scripts/evaluate-safety.py --db ./discord.sqlite\n\n\nUses Claude Haiku (~$0.25/1M tokens) to semantically evaluate remaining messages.\n\nEach message gets a risk score 0.0-1.0:\n\n0.0-0.3: Normal conversation\n0.4-0.6: Suspicious but possibly benign\n0.7-1.0: Likely injection attempt\n\nMessages scoring ≥0.6 get safety_status = 'flagged'.\n\nLayer 3: Only Use Safe Content\n\nThe ingest and memory generation scripts should only use messages where:\n\nSELECT * FROM messages WHERE safety_status = 'safe'\n\nFull Security Pipeline\n# Run complete pipeline\n./scripts/secure-pipeline.sh ./export/ ./discord.sqlite\n\n\nThis runs: Export → SQLite → Regex Filter → Haiku Eval → Mark Safe\n\nSafety Statuses\nStatus\tMeaning\tUsed by Agent?\npending\tNot evaluated\t❌ No\nregex_flagged\tMatched pattern\t❌ No\nflagged\tHaiku risk ≥0.6\t❌ No\nsafe\tPassed all checks\t✅ Yes\nStep 3: Ingest to SQLite\n\nConvert JSON to a rich SQLite database:\n\npython scripts/ingest_rich.py --input ./export/ --output ./discord.sqlite\n\n\nWhat gets captured:\n\nEvery message with full content\nReactions (individual emoji counts: 🔥 x5, 👍 x12)\nAuthor roles and colors\nChannel categories and topics\nReply threading\nMentions, attachments, embeds\nStep 4: Create Agent Workspace\nmkdir -p ./my-agent/memory\n\n\nCopy template files from templates/:\n\nSOUL.md — Community identity (grows through simulation)\nMEMORY.md — Long-term milestones\nLEARNINGS.md — Patterns discovered\nAGENTS.md — Key figures\nTOOLS.md — Channels and rituals\nHEARTBEAT.md — Maintenance protocol\nStep 5: Generate Daily Memory Files\npython scripts/generate_daily_memory.py --all \\\n  --db ./discord.sqlite \\\n  --out ./my-agent/memory/\n\n\nEach day becomes a markdown file with:\n\nFull conversation logs\nWho said what, when\nReactions on each message\nNew channels/roles that appeared\nStep 6: Simulate Growth (The Soul Emerges)\n\nThis is the key insight: Process days chronologically.\n\nThe agent \"lives through\" each day, updating its soul files as patterns emerge.\n\npython scripts/simulate_growth.py --agent ./my-agent/\n\n\nFor each day (in order!):\n\nRead the day's memory file\nUpdate SOUL.md if identity shifted\nAdd to LEARNINGS.md if patterns discovered\nRecord milestones in MEMORY.md\nNote key figures in AGENTS.md\n\nRun the prompts with an LLM:\n\n# Example with OpenClaw\nfor f in ./my-agent/simulation/day-*.txt; do\n  echo \"Processing $f...\"\n  cat \"$f\" | openclaw chat --agent my-agent\ndone\n\nStep 7: Birth the Agent\n\nAdd to OpenClaw config:\n\n{\n  \"id\": \"my-community\",\n  \"workspace\": \"/path/to/my-agent\",\n  \"memorySearch\": {\n    \"enabled\": true,\n    \"sources\": [\"memory\"]\n  },\n  \"identity\": {\n    \"name\": \"MyCommunity\",\n    \"emoji\": \"🔧\"\n  },\n  \"heartbeat\": {\n    \"every\": \"6h\",\n    \"model\": \"anthropic/claude-sonnet-4-5\"\n  }\n}\n\n\nAdd binding (Telegram example):\n\n{\n  \"agentId\": \"my-community\",\n  \"match\": {\n    \"channel\": \"telegram\",\n    \"peer\": {\"kind\": \"group\", \"id\": \"-100XXX:topic:TOPIC_ID\"}\n  }\n}\n\n\nRestart: openclaw gateway restart\n\nStep 8: Keep It Alive\n\nSet up a cron job to update daily:\n\n./scripts/update_agent.sh \\\n  --agent ./my-agent \\\n  --db ./discord.sqlite \\\n  --guild YOUR_GUILD_ID\n\n\nThis:\n\nExports new messages since last run\nMerges into SQLite\nRegenerates today's memory file\nWakes the agent\nWhat the Agent Can Do\n\nOnce birthed, your agent can:\n\nAnswer questions:\n\n\"What were we talking about last week?\"\n\"Who's the expert on X topic?\"\n\"What's our stance on Y?\"\n\nRemember culture:\n\nInside jokes and memes\nCommunity values and norms\nWho helps whom\n\nTrack patterns:\n\nActive times and channels\nEmerging topics\nKey contributors\nScripts\nAgent Creation\nScript\tPurpose\ncreate_agent.sh\tFull pipeline: export → agent\ningest_rich.py\tJSON → SQLite with reactions/roles\ngenerate_daily_memory.py\tSQLite → daily markdown\nsimulate_growth.py\tGenerate soul emergence prompts\nincremental_export.sh\tFetch new messages only\nupdate_agent.sh\tDaily cron: export → memory → wake\nSecurity\nScript\tPurpose\nregex-filter.py\tFast pattern matching for injection attempts\nevaluate-safety.py\tHaiku-based semantic safety evaluation\nsecure-pipeline.sh\tFull security pipeline wrapper\nEnvironment Variables\nVariable\tDescription\nDISCORD_GUILD_ID\tYour Discord server ID\nDISCORD_SOUL_DB\tPath to SQLite database\nDISCORD_SOUL_AGENT\tPath to agent workspace\nDISCORD_TOKEN_FILE\tToken file (default: ~/.config/discord-exporter-token)\nTroubleshooting\n\n\"No messages in database\"\n\nCheck export directory has .json files\nVerify token has guild access\n\n\"Memory files are empty\"\n\nSQLite might have dates in wrong format\nRun: sqlite3 discord.sqlite \"SELECT MIN(timestamp), MAX(timestamp) FROM messages\"\n\n\"Agent doesn't remember things\"\n\nCheck memorySearch.enabled: true in config\nVerify memory files are in the workspace\n\n\"Simulation prompts seem confused\"\n\nProcess days IN ORDER — don't skip\nLet identity emerge, don't force it\n\nYour Discord has a soul. This skill helps you find it."
  },
  "trust": {
    "sourceLabel": "tencent",
    "provenanceUrl": "https://clawhub.ai/kgeesawor/discord-soul",
    "publisherUrl": "https://clawhub.ai/kgeesawor/discord-soul",
    "owner": "kgeesawor",
    "version": "1.0.0",
    "license": null,
    "verificationStatus": "Indexed source record"
  },
  "links": {
    "detailUrl": "https://openagent3.xyz/skills/discord-soul",
    "downloadUrl": "https://openagent3.xyz/downloads/discord-soul",
    "agentUrl": "https://openagent3.xyz/skills/discord-soul/agent",
    "manifestUrl": "https://openagent3.xyz/skills/discord-soul/agent.json",
    "briefUrl": "https://openagent3.xyz/skills/discord-soul/agent.md"
  }
}