[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"skill:01M6HC3W7VSGDPE5WR47ZNH04M":3,"skill-same:01M6HC3W7VSGDPE5WR47ZNH04M":80},{"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":23,"publishedAt":39,"linkOnly":40,"markdownContent":41,"markdownBody":42,"frontMatter":43,"refName":34,"commitSha":45,"skillDirectory":46,"forksCount":47,"repositoryHtmlUrl":48,"repositoryHomepageUrl":49,"ownerHtmlUrl":50,"ownerBlogUrl":51,"ownerDescription":52,"updatedAt":53,"install":54,"resources":67},"01M6HC3W7VSGDPE5WR47ZNH04M","codeguard",null,"Security-aware code generation — teaches the agent CodeGuard rules to write secure code by default","cisco-ai-defense\u002Fdefenseclaw","cisco-ai-defense","https:\u002F\u002Favatars.githubusercontent.com\u002Fu\u002F220944709?v=4","01M6HC38HDCQK9FGE6GXJ4H2ZT","Cisco AI Defense","01M6HC38NKX5MMEWMQXCXGP498",911,"Apache-2.0","https:\u002F\u002Fgithub.com\u002Fcisco-ai-defense\u002Fdefenseclaw\u002Fblob\u002Fmain\u002Fskills\u002Fcodeguard\u002FSKILL.md",[18],{"categoryNo":19,"categoryName":20,"taxonomyType":21,"taxonomyTypeDesc":22},"01JBSEEDCAT000000000000030","开发工程师","PROFESSION","适用职业",[5,24,25,26,27,28,29,30,31,32,33,34,35,36,37,38],"security","secure","code","gateway","Code Generation","network","Rules","check","write","default","main","self","local","generation","calls","2026-11-10 10:12:30",false,"---\nname: codeguard\ndescription: \"Security-aware code generation — teaches the agent CodeGuard rules to write secure code by default\"\nlicense: Apache-2.0\ncompatibility: \"Optional self-check (main.py) calls the local DefenseClaw gateway over the loopback network\"\n---\n\n# CodeGuard: Secure Code Generation Rules\n\nYou MUST follow these security rules when writing code. Code that violates these\nrules will be **blocked** by the DefenseClaw CodeGuard scanner before it reaches\ndisk. Write it correctly the first time.\n\n---\n\n## Credentials — all languages\n\n### CG-CRED-001: Never hardcode API keys or secrets\n\nAssigning API keys, secret keys, access tokens, or private keys directly in\nsource code exposes them in version control and build artifacts.\n\n~~~python\n# Load the value at runtime from an approved secret source.\nimport os\napi_key = os.environ[\"API_KEY\"]\n~~~\n\n~~~javascript\n\u002F\u002F Load the value at runtime from the process environment.\nconst accessToken = process.env.ACCESS_TOKEN;\n~~~\n\nDo not place realistic credential-shaped examples in documentation or test data.\nUse descriptive placeholders containing spaces when an example value is needed,\nsuch as `\"provided by the secret store\"`.\n\n### CG-CRED-002: Never include AWS access key IDs\n\nAWS access key IDs have a distinctive four-letter prefix followed by a fixed\nlength of uppercase letters and digits. Treat any value with that shape as a\nreal credential, including examples in comments or documentation.\n\n~~~python\nimport boto3\nsession = boto3.Session()  # uses the standard SDK credential chain\n~~~\n\n### CG-CRED-003: Never embed private keys (CRITICAL)\n\nPEM-encoded private keys use a five-hyphen marker, a `BEGIN` label, a key-type\nlabel, and a matching end marker. That structure is the highest-severity\nfinding because it grants authentication as the key holder.\n\n~~~python\n# Load key material from a protected file or secrets manager at runtime.\nwith open(\"\u002Fetc\u002Fssl\u002Fprivate\u002Fserver.key\") as f:\n    key = f.read()\n~~~\n\n---\n\n## Command Execution — Python, JavaScript, TypeScript, Ruby, PHP\n\n### CG-EXEC-001: Never pass untrusted strings to command or code interpreters\n\nAPIs that pass one string to an operating-system command interpreter, or that\ndynamically evaluate source text, enable injection when any part comes from\nuser input or external data. Invoke a fixed executable with a separate argument\nlist instead.\n\n~~~python\nimport subprocess\nsubprocess.run([\"grep\", \"--\", user_input, \"\u002Fvar\u002Flog\u002Fapp.log\"], check=True)\n~~~\n\n~~~javascript\nconst { execFile } = require(\"child_process\");\nexecFile(\"ls\", [\"--\", userDir], callback);\n~~~\n\n~~~python\nimport json\nresult = json.loads(user_document)\n~~~\n\n### CG-EXEC-002: Never enable shell interpretation in subprocess APIs\n\nEven with a subprocess library, enabling its shell mode re-introduces command\ninjection risk. Keep shell mode disabled and pass an argument list.\n\n~~~python\nsubprocess.run([\"convert\", infile, outfile], check=True)\n~~~\n\n---\n\n## SQL — Python, JavaScript, TypeScript, Ruby, PHP, Java\n\n### CG-SQL-001: Never format strings into SQL queries\n\nString interpolation in SQL enables SQL injection. Always use parameterized\nqueries with bind variables.\n\n~~~python\ncursor.execute(\"SELECT * FROM users WHERE name = ?\", (username,))\ncursor.execute(\"SELECT * FROM users WHERE name = %s\", (username,))\n~~~\n\n~~~javascript\ndb.query(\"SELECT * FROM users WHERE id = ?\", [userId]);\n~~~\n\n~~~java\nPreparedStatement ps = conn.prepareStatement(\"SELECT * FROM users WHERE id = ?\");\nps.setInt(1, userId);\n~~~\n\n---\n\n## Deserialization — Python\n\n### CG-DESER-001: Never use executable object formats for untrusted data\n\nPython-native object deserialization can execute arbitrary code. A generic YAML\nloader can construct unsafe objects too. Prefer JSON, or use the YAML library's\nexplicit safe loader.\n\n~~~python\nimport json\nobj = json.loads(request.data)\n\nimport yaml\nconfig = yaml.safe_load(user_yaml)\n~~~\n\n---\n\n## Cryptography — Python, JavaScript, TypeScript, Java, Go, Ruby\n\n### CG-CRYPTO-001: Never use MD5 or SHA1\n\nMD5 and SHA1 are cryptographically broken. Use SHA-256 or stronger.\n\n~~~python\nimport hashlib\nh = hashlib.sha256(data)\n~~~\n\n~~~javascript\ncrypto.createHash(\"sha256\").update(data);\n~~~\n\n---\n\n## Network — Python, JavaScript, TypeScript, Go\n\n### CG-NET-001: Validate outbound URLs\n\nHTTP requests to URLs constructed from variables can enable SSRF (Server-Side\nRequest Forgery). Validate the scheme and require an exact host from an\napplication-owned allowlist before making a request.\n\n~~~python\nALLOWED_HOSTS = {\"api.example.com\", \"cdn.example.com\"}\nparsed = urllib.parse.urlsplit(user_url)\nif parsed.scheme != \"https\" or parsed.hostname not in ALLOWED_HOSTS:\n    raise ValueError(\"URL not allowed\")\nresponse = approved_client.get(user_url)\n~~~\n\n---\n\n## Path Safety — all languages\n\n### CG-PATH-001: Reject parent-directory traversal\n\nParent-directory segments can escape an intended directory and expose arbitrary\nfiles. Resolve both paths and require the candidate to remain under the trusted\nroot.\n\n~~~python\nfrom pathlib import Path\n\nroot = Path(upload_dir).resolve(strict=True)\ncandidate = (root \u002F filename).resolve(strict=False)\ntry:\n    candidate.relative_to(root)\nexcept ValueError as exc:\n    raise ValueError(\"path escapes the upload directory\") from exc\n~~~\n\n---\n\n## Quick Reference\n\n| Rule | Severity | Languages | Instead of | Use |\n|------|----------|-----------|-----------|-----|\n| CG-CRED-001 | HIGH | all | Embedded credential values | Environment or secrets manager |\n| CG-CRED-002 | HIGH | all | Cloud access IDs in source | Standard SDK credential chain |\n| CG-CRED-003 | CRITICAL | all | Embedded key material | Protected file or secrets manager |\n| CG-EXEC-001 | HIGH | py,js,ts,rb,php | Command or code strings | Fixed executable plus argument list |\n| CG-EXEC-002 | MEDIUM | py | Subprocess shell mode | Argument-list subprocess call |\n| CG-SQL-001 | HIGH | py,js,ts,rb,php,java | SQL string interpolation | Parameterized queries |\n| CG-DESER-001 | HIGH | py | Executable object formats | JSON or an explicit safe loader |\n| CG-CRYPTO-001 | MEDIUM | py,js,ts,java,go,rb | Broken legacy digests | SHA-256 or stronger |\n| CG-NET-001 | MEDIUM | py,js,ts,go | Unvalidated variable URL | Scheme and exact-host validation |\n| CG-PATH-001 | MEDIUM | all | Unchecked path joining | Resolve and enforce trusted root |\n","# CodeGuard: Secure Code Generation Rules\n\nYou MUST follow these security rules when writing code. Code that violates these\nrules will be **blocked** by the DefenseClaw CodeGuard scanner before it reaches\ndisk. Write it correctly the first time.\n\n---\n\n## Credentials — all languages\n\n### CG-CRED-001: Never hardcode API keys or secrets\n\nAssigning API keys, secret keys, access tokens, or private keys directly in\nsource code exposes them in version control and build artifacts.\n\n~~~python\n# Load the value at runtime from an approved secret source.\nimport os\napi_key = os.environ[\"API_KEY\"]\n~~~\n\n~~~javascript\n\u002F\u002F Load the value at runtime from the process environment.\nconst accessToken = process.env.ACCESS_TOKEN;\n~~~\n\nDo not place realistic credential-shaped examples in documentation or test data.\nUse descriptive placeholders containing spaces when an example value is needed,\nsuch as `\"provided by the secret store\"`.\n\n### CG-CRED-002: Never include AWS access key IDs\n\nAWS access key IDs have a distinctive four-letter prefix followed by a fixed\nlength of uppercase letters and digits. Treat any value with that shape as a\nreal credential, including examples in comments or documentation.\n\n~~~python\nimport boto3\nsession = boto3.Session()  # uses the standard SDK credential chain\n~~~\n\n### CG-CRED-003: Never embed private keys (CRITICAL)\n\nPEM-encoded private keys use a five-hyphen marker, a `BEGIN` label, a key-type\nlabel, and a matching end marker. That structure is the highest-severity\nfinding because it grants authentication as the key holder.\n\n~~~python\n# Load key material from a protected file or secrets manager at runtime.\nwith open(\"\u002Fetc\u002Fssl\u002Fprivate\u002Fserver.key\") as f:\n    key = f.read()\n~~~\n\n---\n\n## Command Execution — Python, JavaScript, TypeScript, Ruby, PHP\n\n### CG-EXEC-001: Never pass untrusted strings to command or code interpreters\n\nAPIs that pass one string to an operating-system command interpreter, or that\ndynamically evaluate source text, enable injection when any part comes from\nuser input or external data. Invoke a fixed executable with a separate argument\nlist instead.\n\n~~~python\nimport subprocess\nsubprocess.run([\"grep\", \"--\", user_input, \"\u002Fvar\u002Flog\u002Fapp.log\"], check=True)\n~~~\n\n~~~javascript\nconst { execFile } = require(\"child_process\");\nexecFile(\"ls\", [\"--\", userDir], callback);\n~~~\n\n~~~python\nimport json\nresult = json.loads(user_document)\n~~~\n\n### CG-EXEC-002: Never enable shell interpretation in subprocess APIs\n\nEven with a subprocess library, enabling its shell mode re-introduces command\ninjection risk. Keep shell mode disabled and pass an argument list.\n\n~~~python\nsubprocess.run([\"convert\", infile, outfile], check=True)\n~~~\n\n---\n\n## SQL — Python, JavaScript, TypeScript, Ruby, PHP, Java\n\n### CG-SQL-001: Never format strings into SQL queries\n\nString interpolation in SQL enables SQL injection. Always use parameterized\nqueries with bind variables.\n\n~~~python\ncursor.execute(\"SELECT * FROM users WHERE name = ?\", (username,))\ncursor.execute(\"SELECT * FROM users WHERE name = %s\", (username,))\n~~~\n\n~~~javascript\ndb.query(\"SELECT * FROM users WHERE id = ?\", [userId]);\n~~~\n\n~~~java\nPreparedStatement ps = conn.prepareStatement(\"SELECT * FROM users WHERE id = ?\");\nps.setInt(1, userId);\n~~~\n\n---\n\n## Deserialization — Python\n\n### CG-DESER-001: Never use executable object formats for untrusted data\n\nPython-native object deserialization can execute arbitrary code. A generic YAML\nloader can construct unsafe objects too. Prefer JSON, or use the YAML library's\nexplicit safe loader.\n\n~~~python\nimport json\nobj = json.loads(request.data)\n\nimport yaml\nconfig = yaml.safe_load(user_yaml)\n~~~\n\n---\n\n## Cryptography — Python, JavaScript, TypeScript, Java, Go, Ruby\n\n### CG-CRYPTO-001: Never use MD5 or SHA1\n\nMD5 and SHA1 are cryptographically broken. Use SHA-256 or stronger.\n\n~~~python\nimport hashlib\nh = hashlib.sha256(data)\n~~~\n\n~~~javascript\ncrypto.createHash(\"sha256\").update(data);\n~~~\n\n---\n\n## Network — Python, JavaScript, TypeScript, Go\n\n### CG-NET-001: Validate outbound URLs\n\nHTTP requests to URLs constructed from variables can enable SSRF (Server-Side\nRequest Forgery). Validate the scheme and require an exact host from an\napplication-owned allowlist before making a request.\n\n~~~python\nALLOWED_HOSTS = {\"api.example.com\", \"cdn.example.com\"}\nparsed = urllib.parse.urlsplit(user_url)\nif parsed.scheme != \"https\" or parsed.hostname not in ALLOWED_HOSTS:\n    raise ValueError(\"URL not allowed\")\nresponse = approved_client.get(user_url)\n~~~\n\n---\n\n## Path Safety — all languages\n\n### CG-PATH-001: Reject parent-directory traversal\n\nParent-directory segments can escape an intended directory and expose arbitrary\nfiles. Resolve both paths and require the candidate to remain under the trusted\nroot.\n\n~~~python\nfrom pathlib import Path\n\nroot = Path(upload_dir).resolve(strict=True)\ncandidate = (root \u002F filename).resolve(strict=False)\ntry:\n    candidate.relative_to(root)\nexcept ValueError as exc:\n    raise ValueError(\"path escapes the upload directory\") from exc\n~~~\n\n---\n\n## Quick Reference\n\n| Rule | Severity | Languages | Instead of | Use |\n|------|----------|-----------|-----------|-----|\n| CG-CRED-001 | HIGH | all | Embedded credential values | Environment or secrets manager |\n| CG-CRED-002 | HIGH | all | Cloud access IDs in source | Standard SDK credential chain |\n| CG-CRED-003 | CRITICAL | all | Embedded key material | Protected file or secrets manager |\n| CG-EXEC-001 | HIGH | py,js,ts,rb,php | Command or code strings | Fixed executable plus argument list |\n| CG-EXEC-002 | MEDIUM | py | Subprocess shell mode | Argument-list subprocess call |\n| CG-SQL-001 | HIGH | py,js,ts,rb,php,java | SQL string interpolation | Parameterized queries |\n| CG-DESER-001 | HIGH | py | Executable object formats | JSON or an explicit safe loader |\n| CG-CRYPTO-001 | MEDIUM | py,js,ts,java,go,rb | Broken legacy digests | SHA-256 or stronger |\n| CG-NET-001 | MEDIUM | py,js,ts,go | Unvalidated variable URL | Scheme and exact-host validation |\n| CG-PATH-001 | MEDIUM | all | Unchecked path joining | Resolve and enforce trusted root |\n",{"name":5,"license":15,"description":7,"compatibility":44},"Optional self-check (main.py) calls the local DefenseClaw gateway over the loopback network","574fc32c036341868e691e24980566946b6fd642","skills\u002Fcodeguard",167,"https:\u002F\u002Fgithub.com\u002Fcisco-ai-defense\u002Fdefenseclaw","https:\u002F\u002Fcisco-ai-defense.github.io\u002Fdefenseclaw\u002F","https:\u002F\u002Fgithub.com\u002Fcisco-ai-defense","https:\u002F\u002Fcisco-ai-defense.github.io\u002F","Open Source projects for the Cisco AI Defense community","2026-11-14 03:56:14",{"source":8,"skillName":5,"commands":55,"prompt":65,"zipAvailable":66},[56,59,62],{"tool":57,"command":58},"npx","npx skills add cisco-ai-defense\u002Fdefenseclaw --skill codeguard",{"tool":60,"command":61},"bunx","bunx skills add cisco-ai-defense\u002Fdefenseclaw --skill codeguard",{"tool":63,"command":64},"pnpm","pnpm dlx skills add cisco-ai-defense\u002Fdefenseclaw --skill codeguard","安装技能，技能地址：https:\u002F\u002Fgithub.com\u002Fcisco-ai-defense\u002Fdefenseclaw\u002Fblob\u002Fmain\u002Fskills\u002Fcodeguard\u002FSKILL.md",true,[68,74],{"path":69,"resourceType":70,"resourceTypeDesc":71,"sizeBytes":72,"sourceHtmlUrl":73},"main.py","SCRIPT","脚本",4848,"https:\u002F\u002Fgithub.com\u002Fcisco-ai-defense\u002Fdefenseclaw\u002Fblob\u002Fmain\u002Fskills\u002Fcodeguard\u002Fmain.py",{"path":75,"resourceType":76,"resourceTypeDesc":77,"sizeBytes":78,"sourceHtmlUrl":79},"skill.yaml","REFERENCE","参考文档",250,"https:\u002F\u002Fgithub.com\u002Fcisco-ai-defense\u002Fdefenseclaw\u002Fblob\u002Fmain\u002Fskills\u002Fcodeguard\u002Fskill.yaml",[81,97,110,119,133,163],{"skillNo":82,"name":83,"nameZh":6,"description":84,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":85,"categories":86,"keywords":87,"publishedAt":39},"01M6HC44X1K8NMF6YBHDZHS9PB","parity-fixture","Fixture for the rule-pack parity test of install admission and skill scan.","https:\u002F\u002Fgithub.com\u002Fcisco-ai-defense\u002Fdefenseclaw\u002Fblob\u002Fmain\u002Ftestdata\u002Frulepack_artifact_parity\u002Fskill\u002FSKILL.md",[],[88,89,90,91,92,93,94,95,96],"parity fixture","fixture","for","pack","skill scan","rule","scan","install","test",{"skillNo":98,"name":99,"nameZh":6,"description":6,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":100,"categories":101,"keywords":107,"publishedAt":39},"01M6HC43H8K4P02PSEJ6R1DCAE","malicious-skill","https:\u002F\u002Fgithub.com\u002Fcisco-ai-defense\u002Fdefenseclaw\u002Fblob\u002Fmain\u002Ftest\u002Ffixtures\u002Fskills\u002Fmalicious-skill\u002FSKILL.md",[102],{"categoryNo":103,"categoryName":104,"taxonomyType":105,"taxonomyTypeDesc":106},"01JBSEEDCAT000000000000023","Skill与智能体开发","SCENARIO","使用场景",[108,109],"malicious skill","malicious",{"skillNo":111,"name":112,"nameZh":6,"description":6,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":113,"categories":114,"keywords":116,"publishedAt":39},"01M6HC425BT2XS2J16M5PBE6YX","clean-skill","https:\u002F\u002Fgithub.com\u002Fcisco-ai-defense\u002Fdefenseclaw\u002Fblob\u002Fmain\u002Ftest\u002Ffixtures\u002Fskills\u002Fclean-skill\u002FSKILL.md",[115],{"categoryNo":103,"categoryName":104,"taxonomyType":105,"taxonomyTypeDesc":106},[117,118],"clean skill","clean",{"skillNo":120,"name":121,"nameZh":6,"description":122,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":123,"categories":124,"keywords":125,"publishedAt":39},"01M6HC3SGQQZQZHNBF80QNTZNE","perf-hello","Prints a friendly greeting when the user asks to say hello.","https:\u002F\u002Fgithub.com\u002Fcisco-ai-defense\u002Fdefenseclaw\u002Fblob\u002Fmain\u002Fscripts\u002Fperf\u002Ffixtures\u002Fbenign-skill\u002FSKILL.md",[],[126,127,128,129,130,131,132],"perf hello","perf","hello","say","greeting","user","say hello",{"skillNo":134,"name":135,"nameZh":6,"description":136,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":137,"categories":138,"keywords":142,"publishedAt":39},"01M6HC3KVG7M9ENR2EGZSXF05T","defenseclaw-tui","Improve the DefenseClaw Textual TUI (cli\u002Fdefenseclaw\u002Ftui) consistently. Use it for any TUI work - adding or changing panels, picker and consequence modals, Setup wizards and the config editor, the hint bar and help overlay, command-palette rows, TUI tests, and TUI UX reviews or render checks. It holds the golden rules, the file map, recipes, the 80x24 layout budget, the test budget, and scripts that render the screen headlessly, run a fake-data demo, audit CLI coverage and list a panel's touchpoints. Don't use it for live certification on the Windows\u002FmacOS\u002FLinux test hosts (use defenseclaw-live-testing) or for EC2 dev-host operations (use defenseclaw-dev-host).","https:\u002F\u002Fgithub.com\u002Fcisco-ai-defense\u002Fdefenseclaw\u002Fblob\u002Fmain\u002F.claude\u002Fskills\u002Fdefenseclaw-tui\u002FSKILL.md",[139],{"categoryNo":140,"categoryName":141,"taxonomyType":105,"taxonomyTypeDesc":106},"01JBSEEDCAT000000000000008","测试与质量",[143,144,145,146,147,148,149,150,151,152,153,154,155,156,157,158,159,160,161,162],"defenseclaw tui","tui","testing","cli","run","ux","audit","improve","coverage","work","command","hosts","reviews","render","palette","consequence","panels","host","layout","map",{"skillNo":164,"name":165,"nameZh":6,"description":6,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":166,"categories":167,"keywords":168,"publishedAt":39},"01M6HC3GGVDDJNY36YJBVPXXWX","defenseclaw-develop","https:\u002F\u002Fgithub.com\u002Fcisco-ai-defense\u002Fdefenseclaw\u002Fblob\u002Fmain\u002F.claude\u002Fskills\u002Fdefenseclaw-develop\u002FSKILL.md",[],[169,170],"develop","defenseclaw develop"]