[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"skill:01M7CA9C2YR3CMMYCJC3CTBE0N":3,"skill-same:01M7CA9C2YR3CMMYCJC3CTBE0N":46},{"skillNo":4,"name":5,"nameZh":6,"description":7,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":16,"categories":17,"keywords":18,"publishedAt":19,"linkOnly":20,"markdownContent":21,"markdownBody":22,"frontMatter":23,"refName":24,"commitSha":25,"skillDirectory":26,"forksCount":27,"repositoryHtmlUrl":28,"repositoryHomepageUrl":6,"ownerHtmlUrl":29,"ownerBlogUrl":6,"ownerDescription":30,"updatedAt":31,"install":32,"resources":45},"01M7CA9C2YR3CMMYCJC3CTBE0N","verify",null,"Run full verification pipeline (lint, format, test, security) before committing","Pu11en\u002Febi-agent-chat-relay","Pu11en","https:\u002F\u002Favatars.githubusercontent.com\u002Fu\u002F111389815?v=4","01M7CA7FFK3WN6Y7CFYQ3TX73Q","Drew Pullen","01M7CA7FG6W1N47BR1D5HTT53G",1,"MIT","https:\u002F\u002Fgithub.com\u002FPu11en\u002Febi-agent-chat-relay\u002Fblob\u002Fmain\u002F.agents\u002Fskills\u002Fverify\u002FSKILL.md",[],[],"2026-11-15 14:19:17",false,"---\nname: verify\ndescription: Run full verification pipeline (lint, format, test, security) before committing\n---\n\n# Verify — Pre-Commit Quality Gate\n\nRun this **before every commit** to ensure code quality and security.\n\n## When to Activate\n\n- Before creating a commit\n- Before pushing to remote\n- After making significant code changes\n- When asked to \"verify\", \"check\", or \"validate\" the code\n\n## Verification Pipeline\n\nRun all steps in order. **Stop on first failure.**\n\n### Step 1: Lint\n\n```bash\nuv run ruff check claude_discord\u002F\n```\n\nIf there are auto-fixable issues:\n\n```bash\nuv run ruff check --fix claude_discord\u002F\n```\n\n### Step 2: Format\n\n```bash\nuv run ruff format --check claude_discord\u002F\n```\n\nIf formatting is needed:\n\n```bash\nuv run ruff format claude_discord\u002F\n```\n\n### Step 3: Tests\n\n```bash\nuv run pytest tests\u002F -v --cov=claude_discord --cov-report=term-missing\n```\n\nAll tests must pass. Review coverage for newly added code.\n\n### Step 4: Security Audit\n\nBefore committing, check for these security concerns specific to this project:\n\n1. **No shell=True**: Search for `shell=True` in any subprocess call — this is forbidden\n2. **No hardcoded secrets**: Search for patterns like `token`, `secret`, `password`, `api_key` with string literal values\n3. **Session ID validation**: Any new code accepting session IDs must validate with `^[a-f0-9\\-]+$`\n4. **Subprocess arguments**: All user input passed to Claude CLI must use `--` separator\n5. **Environment stripping**: `_STRIPPED_ENV_KEYS` must include any new secret env vars\n\n```bash\n# Quick security grep\nuv run ruff check claude_discord\u002F --select S  # bandit rules via ruff\n```\n\n### Step 5: Import Check\n\nVerify the public API still works:\n\n```python\npython -c \"from claude_discord import ClaudeRunner, ClaudeChatCog, SkillCommandCog, SessionRepository\"\n```\n\n## Failure Protocol\n\n- **Lint\u002FFormat failures**: Fix automatically, re-run\n- **Test failures**: Fix the code (not the test, unless the test is wrong)\n- **Security failures**: STOP. Do not commit. Fix the vulnerability first\n- **Import failures**: Check `__init__.py` exports match actual module structure\n","# Verify — Pre-Commit Quality Gate\n\nRun this **before every commit** to ensure code quality and security.\n\n## When to Activate\n\n- Before creating a commit\n- Before pushing to remote\n- After making significant code changes\n- When asked to \"verify\", \"check\", or \"validate\" the code\n\n## Verification Pipeline\n\nRun all steps in order. **Stop on first failure.**\n\n### Step 1: Lint\n\n```bash\nuv run ruff check claude_discord\u002F\n```\n\nIf there are auto-fixable issues:\n\n```bash\nuv run ruff check --fix claude_discord\u002F\n```\n\n### Step 2: Format\n\n```bash\nuv run ruff format --check claude_discord\u002F\n```\n\nIf formatting is needed:\n\n```bash\nuv run ruff format claude_discord\u002F\n```\n\n### Step 3: Tests\n\n```bash\nuv run pytest tests\u002F -v --cov=claude_discord --cov-report=term-missing\n```\n\nAll tests must pass. Review coverage for newly added code.\n\n### Step 4: Security Audit\n\nBefore committing, check for these security concerns specific to this project:\n\n1. **No shell=True**: Search for `shell=True` in any subprocess call — this is forbidden\n2. **No hardcoded secrets**: Search for patterns like `token`, `secret`, `password`, `api_key` with string literal values\n3. **Session ID validation**: Any new code accepting session IDs must validate with `^[a-f0-9\\-]+$`\n4. **Subprocess arguments**: All user input passed to Claude CLI must use `--` separator\n5. **Environment stripping**: `_STRIPPED_ENV_KEYS` must include any new secret env vars\n\n```bash\n# Quick security grep\nuv run ruff check claude_discord\u002F --select S  # bandit rules via ruff\n```\n\n### Step 5: Import Check\n\nVerify the public API still works:\n\n```python\npython -c \"from claude_discord import ClaudeRunner, ClaudeChatCog, SkillCommandCog, SessionRepository\"\n```\n\n## Failure Protocol\n\n- **Lint\u002FFormat failures**: Fix automatically, re-run\n- **Test failures**: Fix the code (not the test, unless the test is wrong)\n- **Security failures**: STOP. Do not commit. Fix the vulnerability first\n- **Import failures**: Check `__init__.py` exports match actual module structure\n",{"name":5,"description":7},"main","1514f26de05c299ab3e67d8d34e3974fb1caad16",".agents\u002Fskills\u002Fverify",0,"https:\u002F\u002Fgithub.com\u002FPu11en\u002Febi-agent-chat-relay","https:\u002F\u002Fgithub.com\u002FPu11en","na","2026-11-02 10:19:54",{"source":8,"skillName":5,"commands":33,"prompt":43,"zipAvailable":44},[34,37,40],{"tool":35,"command":36},"npx","npx skills add Pu11en\u002Febi-agent-chat-relay --skill verify",{"tool":38,"command":39},"bunx","bunx skills add Pu11en\u002Febi-agent-chat-relay --skill verify",{"tool":41,"command":42},"pnpm","pnpm dlx skills add Pu11en\u002Febi-agent-chat-relay --skill verify","安装技能，技能地址：https:\u002F\u002Fgithub.com\u002FPu11en\u002Febi-agent-chat-relay\u002Fblob\u002Fmain\u002F.agents\u002Fskills\u002Fverify\u002FSKILL.md",true,[],[47,54,61,66,71,78],{"skillNo":48,"name":49,"nameZh":6,"description":50,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":51,"categories":52,"keywords":53,"publishedAt":19},"01M7CA9RN8X1AQA6NCMF5HTM70","release","Cut a release","https:\u002F\u002Fgithub.com\u002FPu11en\u002Febi-agent-chat-relay\u002Fblob\u002Fmain\u002Ftests\u002Ffixtures\u002Fharness_audit\u002Fimac\u002Fhome\u002F.codex\u002Fskills\u002Frelease\u002FSKILL.md",[],[],{"skillNo":55,"name":56,"nameZh":6,"description":57,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":58,"categories":59,"keywords":60,"publishedAt":19},"01M7CA9QPA81A7X517Z0TV8JP6","deploy","Deploy the bot","https:\u002F\u002Fgithub.com\u002FPu11en\u002Febi-agent-chat-relay\u002Fblob\u002Fmain\u002Ftests\u002Ffixtures\u002Fharness_audit\u002Fimac\u002Fhome\u002F.claude\u002Fskills\u002Fdeploy\u002FSKILL.md",[],[],{"skillNo":62,"name":49,"nameZh":6,"description":50,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":63,"categories":64,"keywords":65,"publishedAt":19},"01M7CA9PQNYWC52KPANCHESMR4","https:\u002F\u002Fgithub.com\u002FPu11en\u002Febi-agent-chat-relay\u002Fblob\u002Fmain\u002Ftests\u002Ffixtures\u002Fharness_audit\u002Fdrewai\u002Fhome\u002F.codex\u002Fskills\u002Frelease\u002FSKILL.md",[],[],{"skillNo":67,"name":56,"nameZh":6,"description":57,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":68,"categories":69,"keywords":70,"publishedAt":19},"01M7CA9NFB9PAPRP4RDNT6RE12","https:\u002F\u002Fgithub.com\u002FPu11en\u002Febi-agent-chat-relay\u002Fblob\u002Fmain\u002Ftests\u002Ffixtures\u002Fharness_audit\u002Fdrewai\u002Fhome\u002F.claude\u002Fskills\u002Fdeploy\u002FSKILL.md",[],[],{"skillNo":72,"name":73,"nameZh":6,"description":74,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":75,"categories":76,"keywords":77,"publishedAt":19},"01M7CA9HYXBKV4GGD372K0QWX8","lockin-feature-workflow","Plan distinct features with OpenSpec in Lockin AI Discord conversations, split clearly independent builds into linked child planning threads, or dispatch every approved dependency-ready task to visible Ebi workers and integrate their results through one owner. Use for feature planning, approved parallel builds, and resuming a coordinated build.","https:\u002F\u002Fgithub.com\u002FPu11en\u002Febi-agent-chat-relay\u002Fblob\u002Fmain\u002Fextensions\u002Ffeature_workflow\u002Fskill\u002FSKILL.md",[],[],{"skillNo":79,"name":80,"nameZh":6,"description":81,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":82,"categories":83,"keywords":84,"publishedAt":19},"01M7CA9DWY01WPNSKG9ZM0T4E2","master-planning","Guide project brainstorming, clarify requirements through short questions, and turn agreed decisions into coordinated plans for fresh-session builders. Use for planning a project, business, feature, or several related build lanes; resume when the user answers an active planning question. Do not invoke for an already scoped small fix, a factual question, or executing an existing plan.","https:\u002F\u002Fgithub.com\u002FPu11en\u002Febi-agent-chat-relay\u002Fblob\u002Fmain\u002F.planning\u002Fgowork-flow\u002Fplanner-skill-draft\u002FSKILL.md",[],[]]