[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"skill:01M6RVGA9B9JSYGM80YKMWYF8E":3,"skill-same:01M6RVGA9B9JSYGM80YKMWYF8E":88},{"skillNo":4,"name":5,"nameZh":6,"description":7,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":6,"repositoryNo":12,"starsCount":13,"licenseSpdxId":14,"licenseFileUrl":6,"sourceHtmlUrl":15,"categories":16,"keywords":22,"publishedAt":36,"linkOnly":37,"markdownContent":38,"markdownBody":39,"frontMatter":40,"refName":53,"commitSha":54,"skillDirectory":55,"forksCount":13,"repositoryHtmlUrl":56,"repositoryHomepageUrl":6,"ownerHtmlUrl":57,"ownerBlogUrl":6,"ownerDescription":6,"updatedAt":58,"install":59,"resources":72},"01M6RVGA9B9JSYGM80YKMWYF8E","kotlin-ktor-patterns",null,"Ktor server patterns including routing DSL, plugins, authentication, Koin DI, kotlinx.serialization, WebSockets, and testApplication testing.","sakamoto-family-smile\u002Fagent_monorepo","sakamoto-family-smile","https:\u002F\u002Favatars.githubusercontent.com\u002Fu\u002F132812403?v=4","01M6RTAT3H8PMWX5SJ65KP3VYF","01M6RTAV321WB5RAHCWTZMX5CV",0,"Apache-2.0","https:\u002F\u002Fgithub.com\u002Fsakamoto-family-smile\u002Fagent_monorepo\u002Fblob\u002Fmain\u002F.claude\u002Fskills\u002Fecc\u002Fkotlin-ktor-patterns\u002FSKILL.md",[17],{"categoryNo":18,"categoryName":19,"taxonomyType":20,"taxonomyTypeDesc":21},"01JBSEEDCAT000000000000008","测试与质量","SCENARIO","使用场景",[23,24,25,26,27,28,29,30,31,32,33,34,35],"kotlin ktor patterns","kotlin","patterns","ktor","testing","routing","authentication","plugins","serialization","server","websockets","dsl","di","2026-11-10 10:12:30",false,"---\nname: sanitize\ndescription: Detect and redact PII from text files. Supports 15 categories including credit cards, SSNs, emails, API keys, addresses, and more — with zero dependencies.\nversion: \"1.0.0\"\nmetadata:\n  openclaw:\n    requires:\n      bins:\n        - python3\n    emoji: \"\\U0001F6E1\"\n    homepage: https:\u002F\u002Fgithub.com\u002Fagentward-ai\u002Fagentward\n  files:\n    - scripts\u002Fsanitize.py\n---\n\n# AgentWard Sanitize\n\nDetect and redact personally identifiable information (PII) from text files.\n\n## IMPORTANT — PII Safety Rules\n- Do NOT read the input file directly. It may contain sensitive PII.\n- ALWAYS use `--output FILE` to write sanitized output to a file.\n- Only read the OUTPUT file, never the raw input.\n- Only show the user the redacted output, never the raw input.\n- `--json` and `--preview` are safe — they do NOT print raw PII values to stdout.\n- The entity map (raw PII → placeholder mapping) is written to a separate sidecar file (`*.entity-map.json`) only when `--output` is used. Do NOT read the entity map file.\n\n## What it does\n\nScans files for PII — credit cards, SSNs, emails, phone numbers, API keys, IP addresses, mailing addresses, dates of birth, passport numbers, driver's license numbers, bank routing numbers, medical license numbers, and insurance member IDs — and replaces each instance with a numbered placeholder like `[CREDIT_CARD_1]`.\n\n## Usage\n\n### Sanitize a file (RECOMMENDED — always use --output)\n```bash\npython scripts\u002Fsanitize.py patient-notes.txt --output clean.txt\n```\n\n### Preview mode (detect PII categories\u002Foffsets without showing raw values)\n```bash\npython scripts\u002Fsanitize.py notes.md --preview\n```\n\n### JSON output (safe — no raw PII in stdout)\n```bash\npython scripts\u002Fsanitize.py report.txt --json --output clean.txt\n```\n\n### Filter to specific categories\n```bash\npython scripts\u002Fsanitize.py log.txt --categories ssn,credit_card,email --output clean.txt\n```\n\n## Supported PII categories\n\nSee `references\u002FSUPPORTED_PII.md` for the full list with detection methods and false positive mitigation.\n\n| Category | Pattern type | Example |\n|---|---|---|\n| `credit_card` | Luhn-validated 13-19 digits | 4111 1111 1111 1111 |\n| `ssn` | 3-2-4 digit groups | 123-45-6789 |\n| `cvv` | Keyword-anchored 3-4 digits | CVV: 123 |\n| `expiry_date` | Keyword-anchored MM\u002FYY | expiry 01\u002F30 |\n| `api_key` | Provider prefix patterns | sk-abc..., ghp_..., AKIA... |\n| `email` | Standard email format | user@example.com |\n| `phone` | US\u002Fintl phone numbers | +1 (555) 123-4567 |\n| `ip_address` | IPv4 addresses | 192.168.1.100 |\n| `date_of_birth` | Keyword-anchored dates | DOB: 03\u002F15\u002F1985 |\n| `passport` | Keyword-anchored alphanumeric | Passport: AB1234567 |\n| `drivers_license` | Keyword-anchored alphanumeric | DL: D12345678 |\n| `bank_routing` | Keyword-anchored 9 digits | routing: 021000021 |\n| `address` | Street + city\u002Fstate\u002Fzip | 742 Evergreen Terrace Dr, Springfield, IL 62704 |\n| `medical_license` | Keyword-anchored license ID | License: CA-MD-8827341 |\n| `insurance_id` | Keyword-anchored member\u002Fpolicy ID | Member ID: BCB-2847193 |\n\n## Security and Privacy\n\n- **All processing is local.** The script makes zero network calls. No data leaves your machine.\n- **Zero dependencies.** Uses only Python standard library — no third-party packages to audit.\n- **PII never reaches stdout.** The `--json` and `--preview` modes strip raw PII values from output. The entity map (containing raw PII to placeholder mappings) is only written to a sidecar file on disk when `--output` is used.\n- **Designed for agent safety.** The skill instructions above tell the agent to never read the raw input file or the entity map file — only the sanitized output.\n\n## Requirements\n\n- Python 3.11+\n- No external dependencies (stdlib only)\n\n## About\n\nBuilt by [AgentWard](https:\u002F\u002Fagentward.ai) — the open-source permission control plane for AI agents.\n","# AgentWard Sanitize\n\nDetect and redact personally identifiable information (PII) from text files.\n\n## IMPORTANT — PII Safety Rules\n- Do NOT read the input file directly. It may contain sensitive PII.\n- ALWAYS use `--output FILE` to write sanitized output to a file.\n- Only read the OUTPUT file, never the raw input.\n- Only show the user the redacted output, never the raw input.\n- `--json` and `--preview` are safe — they do NOT print raw PII values to stdout.\n- The entity map (raw PII → placeholder mapping) is written to a separate sidecar file (`*.entity-map.json`) only when `--output` is used. Do NOT read the entity map file.\n\n## What it does\n\nScans files for PII — credit cards, SSNs, emails, phone numbers, API keys, IP addresses, mailing addresses, dates of birth, passport numbers, driver's license numbers, bank routing numbers, medical license numbers, and insurance member IDs — and replaces each instance with a numbered placeholder like `[CREDIT_CARD_1]`.\n\n## Usage\n\n### Sanitize a file (RECOMMENDED — always use --output)\n```bash\npython scripts\u002Fsanitize.py patient-notes.txt --output clean.txt\n```\n\n### Preview mode (detect PII categories\u002Foffsets without showing raw values)\n```bash\npython scripts\u002Fsanitize.py notes.md --preview\n```\n\n### JSON output (safe — no raw PII in stdout)\n```bash\npython scripts\u002Fsanitize.py report.txt --json --output clean.txt\n```\n\n### Filter to specific categories\n```bash\npython scripts\u002Fsanitize.py log.txt --categories ssn,credit_card,email --output clean.txt\n```\n\n## Supported PII categories\n\nSee `references\u002FSUPPORTED_PII.md` for the full list with detection methods and false positive mitigation.\n\n| Category | Pattern type | Example |\n|---|---|---|\n| `credit_card` | Luhn-validated 13-19 digits | 4111 1111 1111 1111 |\n| `ssn` | 3-2-4 digit groups | 123-45-6789 |\n| `cvv` | Keyword-anchored 3-4 digits | CVV: 123 |\n| `expiry_date` | Keyword-anchored MM\u002FYY | expiry 01\u002F30 |\n| `api_key` | Provider prefix patterns | sk-abc..., ghp_..., AKIA... |\n| `email` | Standard email format | user@example.com |\n| `phone` | US\u002Fintl phone numbers | +1 (555) 123-4567 |\n| `ip_address` | IPv4 addresses | 192.168.1.100 |\n| `date_of_birth` | Keyword-anchored dates | DOB: 03\u002F15\u002F1985 |\n| `passport` | Keyword-anchored alphanumeric | Passport: AB1234567 |\n| `drivers_license` | Keyword-anchored alphanumeric | DL: D12345678 |\n| `bank_routing` | Keyword-anchored 9 digits | routing: 021000021 |\n| `address` | Street + city\u002Fstate\u002Fzip | 742 Evergreen Terrace Dr, Springfield, IL 62704 |\n| `medical_license` | Keyword-anchored license ID | License: CA-MD-8827341 |\n| `insurance_id` | Keyword-anchored member\u002Fpolicy ID | Member ID: BCB-2847193 |\n\n## Security and Privacy\n\n- **All processing is local.** The script makes zero network calls. No data leaves your machine.\n- **Zero dependencies.** Uses only Python standard library — no third-party packages to audit.\n- **PII never reaches stdout.** The `--json` and `--preview` modes strip raw PII values from output. The entity map (containing raw PII to placeholder mappings) is only written to a sidecar file on disk when `--output` is used.\n- **Designed for agent safety.** The skill instructions above tell the agent to never read the raw input file or the entity map file — only the sanitized output.\n\n## Requirements\n\n- Python 3.11+\n- No external dependencies (stdlib only)\n\n## About\n\nBuilt by [AgentWard](https:\u002F\u002Fagentward.ai) — the open-source permission control plane for AI agents.\n",{"name":41,"version":42,"metadata":43,"description":52},"sanitize","1.0.0",{"files":44,"openclaw":46},[45],"scripts\u002Fsanitize.py",{"emoji":47,"homepage":48,"requires":49},"?","https:\u002F\u002Fgithub.com\u002Fagentward-ai\u002Fagentward",{"bins":50},[51],"python3","Detect and redact PII from text files. Supports 15 categories including credit cards, SSNs, emails, API keys, addresses, and more — with zero dependencies.","main","0e049066a8f4b48196803e330bc2f0a54bb2eda4",".claude\u002Fskills\u002Fecc\u002Fkotlin-ktor-patterns","https:\u002F\u002Fgithub.com\u002Fsakamoto-family-smile\u002Fagent_monorepo","https:\u002F\u002Fgithub.com\u002Fsakamoto-family-smile","2026-11-08 20:29:14",{"source":8,"skillName":41,"commands":60,"prompt":70,"zipAvailable":71},[61,64,67],{"tool":62,"command":63},"npx","npx skills add sakamoto-family-smile\u002Fagent_monorepo --skill sanitize",{"tool":65,"command":66},"bunx","bunx skills add sakamoto-family-smile\u002Fagent_monorepo --skill sanitize",{"tool":68,"command":69},"pnpm","pnpm dlx skills add sakamoto-family-smile\u002Fagent_monorepo --skill sanitize","安装技能，技能地址：https:\u002F\u002Fgithub.com\u002Fsakamoto-family-smile\u002Fagent_monorepo\u002Fblob\u002Fmain\u002F.claude\u002Fskills\u002Fecc\u002Fkotlin-ktor-patterns\u002FSKILL.md",true,[73,79,83],{"path":74,"resourceType":75,"resourceTypeDesc":76,"sizeBytes":77,"sourceHtmlUrl":78},"clawhub.json","REFERENCE","参考文档",879,"https:\u002F\u002Fgithub.com\u002Fagentward-ai\u002Fagentward\u002Fblob\u002Fmain\u002Fagentward-sanitize-skill\u002Fclawhub.json",{"path":80,"resourceType":75,"resourceTypeDesc":76,"sizeBytes":81,"sourceHtmlUrl":82},"references\u002FSUPPORTED_PII.md",2717,"https:\u002F\u002Fgithub.com\u002Fagentward-ai\u002Fagentward\u002Fblob\u002Fmain\u002Fagentward-sanitize-skill\u002Freferences\u002FSUPPORTED_PII.md",{"path":45,"resourceType":84,"resourceTypeDesc":85,"sizeBytes":86,"sourceHtmlUrl":87},"SCRIPT","脚本",17594,"https:\u002F\u002Fgithub.com\u002Fagentward-ai\u002Fagentward\u002Fblob\u002Fmain\u002Fagentward-sanitize-skill\u002Fscripts\u002Fsanitize.py",[89,122,130,150,173,201],{"skillNo":90,"name":91,"nameZh":6,"description":92,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":6,"repositoryNo":12,"starsCount":13,"licenseSpdxId":14,"licenseFileUrl":6,"sourceHtmlUrl":93,"categories":94,"keywords":101,"publishedAt":36},"01M6RW50THEFSKK42YNR8XFZA1","remotion-video-creation","Best practices for Remotion - Video creation in React. 29 domain-specific rules covering 3D, animations, audio, captions, charts, transitions, and more.","https:\u002F\u002Fgithub.com\u002Fsakamoto-family-smile\u002Fagent_monorepo\u002Fblob\u002Fmain\u002F.claude\u002Fskills\u002Fecc\u002Fremotion-video-creation\u002FSKILL.md",[95,98],{"categoryNo":96,"categoryName":97,"taxonomyType":20,"taxonomyTypeDesc":21},"01JBSEEDCAT000000000000009","前端开发",{"categoryNo":99,"categoryName":100,"taxonomyType":20,"taxonomyTypeDesc":21},"01JBSEEDCAT000000000000016","图像与多媒体",[102,103,104,105,106,107,108,109,110,111,112,113,114,115,116,117,118,119,120,121],"Video","remotion video","remotion video creation","creation","Remotion","Charts","Captions","Audio","3D","Composition","Animation","best practices","more","animations","domain-specific","domain","three","Rules","Lottie","for",{"skillNo":123,"name":124,"nameZh":6,"description":6,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":6,"repositoryNo":12,"starsCount":13,"licenseSpdxId":14,"licenseFileUrl":6,"sourceHtmlUrl":125,"categories":126,"keywords":127,"publishedAt":36},"01M6VCJ23NPECPSZJKGY691F75","hotcook-recipes","https:\u002F\u002Fgithub.com\u002Fsakamoto-family-smile\u002Fagent_monorepo\u002Fblob\u002Fmain\u002Fhotcook-agent\u002Fdata\u002Fskills\u002Fhotcook-recipes\u002FSKILL.md",[],[128,129],"hotcook recipes","recipes",{"skillNo":131,"name":132,"nameZh":6,"description":133,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":6,"repositoryNo":12,"starsCount":13,"licenseSpdxId":14,"licenseFileUrl":6,"sourceHtmlUrl":134,"categories":135,"keywords":144,"publishedAt":36},"01M6VCHHE00X5XHSDRD1KH1BW2","code-helper","Code review and assistance skill","https:\u002F\u002Fgithub.com\u002Fsakamoto-family-smile\u002Fagent_monorepo\u002Fblob\u002Fmain\u002Fagent-system-2\u002Fskills\u002Fcode-helper\u002Fskill.md",[136,139],{"categoryNo":137,"categoryName":138,"taxonomyType":20,"taxonomyTypeDesc":21},"01JBSEEDCAT000000000000007","代码审查",{"categoryNo":140,"categoryName":141,"taxonomyType":142,"taxonomyTypeDesc":143},"01JBSEEDCAT000000000000030","开发工程师","PROFESSION","适用职业",[145,146,147,148,149],"code helper","helper","code","code review","review",{"skillNo":151,"name":152,"nameZh":6,"description":153,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":6,"repositoryNo":12,"starsCount":13,"licenseSpdxId":14,"licenseFileUrl":6,"sourceHtmlUrl":154,"categories":155,"keywords":162,"publishedAt":36},"01M6VCH3Q31A20H6SQ1H0J7JB2","research-assistant","Web research assistant skill using Brave Search MCP","https:\u002F\u002Fgithub.com\u002Fsakamoto-family-smile\u002Fagent_monorepo\u002Fblob\u002Fmain\u002Fagent-system-1\u002Fskills\u002Fresearch-assistant\u002Fskill.md",[156,159],{"categoryNo":157,"categoryName":158,"taxonomyType":20,"taxonomyTypeDesc":21},"01JBSEEDCAT000000000000021","资料检索与研究",{"categoryNo":160,"categoryName":161,"taxonomyType":20,"taxonomyTypeDesc":21},"01JBSEEDCAT000000000000023","Skill与智能体开发",[163,164,165,166,167,168,169,170,171,172],"research assistant","research","assistant","MCP","web","search","brave search","web research","brave","web research assistant",{"skillNo":174,"name":175,"nameZh":6,"description":176,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":6,"repositoryNo":12,"starsCount":13,"licenseSpdxId":14,"licenseFileUrl":6,"sourceHtmlUrl":177,"categories":178,"keywords":183,"publishedAt":36},"01M6VCGZZGPNVJSCZ1JTMNZAHY","x-api","X\u002FTwitter API integration for posting tweets, threads, reading timelines, search, and analytics. Covers OAuth auth patterns, rate limits, and platform-native content posting. Use when the user wants to interact with X programmatically.","https:\u002F\u002Fgithub.com\u002Fsakamoto-family-smile\u002Fagent_monorepo\u002Fblob\u002Fmain\u002F.claude\u002Fskills\u002Fecc\u002Fx-api\u002FSKILL.md",[179,182],{"categoryNo":180,"categoryName":181,"taxonomyType":20,"taxonomyTypeDesc":21},"01JBSEEDCAT000000000000010","后端与接口",{"categoryNo":140,"categoryName":141,"taxonomyType":142,"taxonomyTypeDesc":143},[184,185,186,187,188,189,121,190,191,192,193,194,25,195,196,197,198,199,168,200],"x api","api","with","when","limits","rate","threads","reading","native","posting","platform","api integration","twitter","use","auth","analytics","OAuth",{"skillNo":202,"name":203,"nameZh":6,"description":204,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":6,"repositoryNo":12,"starsCount":13,"licenseSpdxId":14,"licenseFileUrl":6,"sourceHtmlUrl":205,"categories":206,"keywords":208,"publishedAt":36},"01M6VCGVX6DGB1FKTA53QBBCQB","workspace-surface-audit","Audit the active repo, MCP servers, plugins, connectors, env surfaces, and harness setup, then recommend the highest-value ECC-native skills, hooks, agents, and operator workflows. Use when the user wants help setting up Claude Code or understanding what capabilities are actually available in their environment.","https:\u002F\u002Fgithub.com\u002Fsakamoto-family-smile\u002Fagent_monorepo\u002Fblob\u002Fmain\u002F.claude\u002Fskills\u002Fecc\u002Fworkspace-surface-audit\u002FSKILL.md",[207],{"categoryNo":160,"categoryName":161,"taxonomyType":20,"taxonomyTypeDesc":21},[209,210,211,212,166,213,214,147,215,216,217,218,197,219,220,221,222,192,223,187],"workspace surface audit","workspace","audit","hooks","workflows","connectors","capabilities","harness","repo","environment","up","harness setup","active","env","value"]