[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"skill:01M6GXNFBZFTF44YCRAKZCFPY7":3,"skill-same:01M6GXNFBZFTF44YCRAKZCFPY7":78},{"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":44,"linkOnly":45,"markdownContent":46,"markdownBody":47,"frontMatter":48,"refName":56,"commitSha":57,"skillDirectory":58,"forksCount":59,"repositoryHtmlUrl":60,"repositoryHomepageUrl":61,"ownerHtmlUrl":62,"ownerBlogUrl":61,"ownerDescription":63,"updatedAt":64,"install":65,"resources":77},"01M6GXNFBZFTF44YCRAKZCFPY7","infra-audit",null,"Reads docker-compose, env files, ORM configs, and connection strings to map current infrastructure. Flags missing layers (cache, queue, analytics) based on observed access patterns. Outputs a structured infrastructure manifest.","SethGammon\u002FCitadel","SethGammon","https:\u002F\u002Favatars.githubusercontent.com\u002Fu\u002F5523585?v=4","01M6GXJ90FD2CE9QF5GQERWN06","Seth Gammon","01M6GXJ94VXYGK5KAW14EYE901",929,"MIT","https:\u002F\u002Fgithub.com\u002FSethGammon\u002FCitadel\u002Fblob\u002Fmain\u002Fskills\u002Finfra-audit\u002FSKILL.md",[18],{"categoryNo":19,"categoryName":20,"taxonomyType":21,"taxonomyTypeDesc":22},"01JBSEEDCAT000000000000011","运维与部署","SCENARIO","使用场景",[24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43],"infra audit","audit","infra","flags","layers","strings","missing","false","docker-compose","map","patterns","docker","files","databases","compose","orm","access","connect","infrastructure","analytics","2026-11-10 10:12:30",false,"---\nname: infra-audit\nlicense: MIT\ndescription: >-\n  Reads docker-compose, env files, ORM configs, and connection strings to map\n  current infrastructure. Flags missing layers (cache, queue, analytics) based\n  on observed access patterns. Outputs a structured infrastructure manifest.\nuser-invocable: true\nauto-trigger: false\ntrigger_keywords:\n  - infra\n  - infrastructure\n  - what databases\n  - what systems\n  - docker-compose\n  - infra audit\n  - map infrastructure\n  - what does this connect to\nlast-updated: 2026-03-29\n---\n\n# \u002Finfra-audit -- Infrastructure Auditor\n\n## When to Use\n\n- Before adding a new database, cache, or queue to a project\n- When onboarding to an unfamiliar codebase and need to understand its infra\n- Before planning a workspace campaign that spans multiple services\n- When someone asks \"what systems does this project talk to?\"\n\n**Do not use when:**\n- The user already knows the infra and just wants to wire something up (use `\u002Farchitect`)\n- The question is about code architecture, not infrastructure (use `\u002Fresearch`)\n\n## Protocol\n\n### Step 1: DISCOVER\n\nScan the project for infrastructure configuration files. Check each category:\n\n**Container orchestration:**\n- `docker-compose.yml`, `docker-compose.*.yml`\n- `Dockerfile`, `*.dockerfile`\n- `k8s\u002F`, `kubernetes\u002F`, `helm\u002F`, `charts\u002F`\n\n**Environment and secrets:**\n- `.env`, `.env.*`, `.env.example`, `.env.local`\n- `*.env` files in config directories\n\n**Database and ORM:**\n- Prisma: `prisma\u002Fschema.prisma`\n- Drizzle: `drizzle.config.ts`, `drizzle\u002F`\n- TypeORM: `ormconfig.*`, `data-source.ts`\n- Sequelize: `.sequelizerc`, `config\u002Fdatabase.*`\n- Knex: `knexfile.*`\n- SQLAlchemy: `alembic.ini`, `alembic\u002F`\n- Django: `settings.py` (DATABASES section)\n- Rails: `config\u002Fdatabase.yml`\n- Go: look for `pgx`, `gorm`, `sqlx` in go.mod\n\n**Message queues and event streaming:**\n- Redis: connection strings, `ioredis`, `redis` in package.json\u002Frequirements.txt\u002Fgo.mod\n- RabbitMQ: `amqplib`, `pika`, `amqp` imports\n- Kafka: `kafkajs`, `confluent-kafka`, `sarama` imports\n- NATS: `nats`, `nats.go` imports\n- SQS\u002FSNS: `@aws-sdk\u002Fclient-sqs`, `boto3` sqs references\n\n**Cache:**\n- Redis (dual-use -- note if used as cache vs. pub\u002Fsub vs. primary store)\n- Memcached: `memcached`, `pylibmc` imports\n\n**Search:**\n- Elasticsearch: `@elastic\u002Felasticsearch`, `elasticsearch-py`\n- Meilisearch, Typesense, Algolia client libraries\n\n**Object storage:**\n- S3: `@aws-sdk\u002Fclient-s3`, `boto3` s3 references\n- MinIO, GCS, Azure Blob client libraries\n\n**External APIs:**\n- Stripe, Twilio, SendGrid, Auth0, Firebase, Supabase client libraries\n- Any `NEXT_PUBLIC_*` or `VITE_*` env vars pointing to external services\n\n**CI\u002FCD:**\n- `.github\u002Fworkflows\u002F`, `.gitlab-ci.yml`, `Jenkinsfile`, `bitbucket-pipelines.yml`\n\nFor each discovered item, record:\n- **What**: the system (e.g., \"PostgreSQL 15\")\n- **Where**: config file path and line\n- **How**: connection method (direct, pooled, ORM, SDK)\n- **Role**: primary store, cache, queue, search, auth, etc.\n\n### Step 2: TRACE CONNECTIONS\n\nFor each discovered system, trace how the application connects:\n\n1. Find connection strings in env files or config\n2. Find the client initialization code (imports, `new Client()`, `createPool()`)\n3. Identify which modules\u002Fservices use this connection\n4. Note connection pooling, retry logic, health checks if present\n\nBuild a connection graph:\n```\nApp --> [pool: 10] --> PostgreSQL (primary store)\nApp --> [ioredis]  --> Redis (cache + pub\u002Fsub)\nApp --> [SDK]      --> Stripe (payments)\n```\n\n### Step 3: ANALYZE PATTERNS\n\nBased on what's connected and how it's used, identify:\n\n**Access patterns:**\n- Read-heavy vs. write-heavy (look at query patterns in ORM usage)\n- Real-time vs. batch (WebSocket\u002FSSE presence, cron jobs)\n- Request\u002Fresponse vs. event-driven (queue usage, webhook handlers)\n\n**Missing layers** (flag only when evidence supports the need):\n\n| Signal | Likely Missing | Evidence Required |\n|---|---|---|\n| Repeated identical DB queries in hot paths | Cache layer (Redis\u002FMemcached) | Same query in 3+ request handlers |\n| `setTimeout`\u002F`setInterval` for deferred work | Job queue (Bull\u002FBullMQ\u002FCelery) | Processing that doesn't need to block the response |\n| Full-text search via `LIKE '%term%'` | Search engine (Elasticsearch\u002FMeilisearch) | Text search on >10K rows |\n| Large file uploads stored in DB or local disk | Object storage (S3\u002FMinIO) | Binary columns or `fs.writeFile` for user content |\n| Analytics queries on production tables | Analytics DB (Snowflake\u002FBigQuery\u002FClickHouse) | Aggregation queries mixed with OLTP |\n| Multiple services sharing one DB | Event bus or API gateway | 2+ repos writing to same schema |\n| No connection pooling | Connection pooler (PgBouncer) | Direct connections in serverless\u002Fhigh-concurrency |\n\n**Do not flag something as missing unless the evidence is in the code.**\n\n### Step 4: WRITE MANIFEST\n\nOutput the infrastructure manifest to `.planning\u002Finfra-manifest.md`:\n\n```markdown\n# Infrastructure Manifest\n\n> Generated: {ISO date}\n> Project: {project name from package.json or repo name}\n\n## Current Systems\n\n### {System Name} -- {Role}\n- **Type**: {database|cache|queue|search|storage|auth|payments|...}\n- **Product**: {PostgreSQL 15|Redis 7|Stripe SDK|...}\n- **Config**: `{file path}`\n- **Connection**: {method -- pooled, direct, SDK, ORM}\n- **Used by**: {modules\u002Fservices that import the client}\n\n(repeat for each system)\n\n## Connection Graph\n\n{ASCII diagram of connections -- use \u002Fascii-diagram conventions}\n\n## Access Patterns\n\n- {Pattern 1}: {evidence}\n- {Pattern 2}: {evidence}\n\n## Opportunities\n\n### {Opportunity Title}\n- **Signal**: {what in the code suggests this}\n- **System**: {what would address it -- e.g., \"Redis as cache layer\"}\n- **Impact**: {what improves -- latency, scalability, separation of concerns}\n- **Effort**: low | medium | high\n\n(repeat for each opportunity)\n\n## Multi-Repo Considerations\n\n{If the project references other repos, APIs, or shared databases, note them here.\nThis section feeds directly into \u002Fworkspace if the user wants to act on opportunities\nthat span repos.}\n```\n\n### Step 5: RETURN\n\nPresent a summary to the user:\n- How many systems found\n- The connection graph (inline, not just in the file)\n- Top opportunities ranked by signal strength\n- Whether any opportunities would require multi-repo coordination (suggest `\u002Fworkspace`)\n\n## Fringe Cases\n\n- **No docker-compose or env files**: Scan for hardcoded connection strings in source code.\n  Many projects connect without formal config files. Check `src\u002F`, `lib\u002F`, `config\u002F` for\n  connection patterns. Note the absence of externalized config as a finding.\n- **Monorepo with multiple services**: Treat each service directory as a separate scan target.\n  Produce one manifest with sections per service. Note shared databases across services.\n- **`.planning\u002F` does not exist**: Create it before writing the manifest.\n- **No infrastructure found**: Report that the project appears to be client-only or has no\n  external dependencies. This is a valid finding, not an error.\n- **Secrets in env files**: Never include actual secret values in the manifest. Record the\n  variable name and which system it connects to, not the value.\n\n## Contextual Gates\n\n**Disclosure:** \"Auditing infrastructure configuration. No files modified.\"\n**Reversibility:** green — read-only audit; only writes `.planning\u002Finfra-manifest.md`; undo with `rm .planning\u002Finfra-manifest.md`.\n**Trust gates:**\n- Any: full audit, manifest generation, opportunity analysis.\n\n## Quality Gates\n\n- [ ] Every discovered system has: type, product, config path, connection method\n- [ ] Connection graph covers all discovered systems\n- [ ] Opportunities cite specific code evidence (file:line), not speculation\n- [ ] No secret values appear in the manifest\n- [ ] Manifest written to `.planning\u002Finfra-manifest.md`\n- [ ] Multi-repo considerations section populated if cross-repo signals exist\n\n## Exit Protocol\n\n```\n---HANDOFF---\n- Scanned {N} config files, found {M} external systems\n- Key systems: {list top 3-4}\n- Top opportunity: {highest-signal opportunity}\n- Multi-repo scope: {yes\u002Fno -- if yes, suggest \u002Fworkspace}\n- Reversibility: green — delete .planning\u002Finfra-manifest.md to undo\n---\n```\n","# \u002Finfra-audit -- Infrastructure Auditor\n\n## When to Use\n\n- Before adding a new database, cache, or queue to a project\n- When onboarding to an unfamiliar codebase and need to understand its infra\n- Before planning a workspace campaign that spans multiple services\n- When someone asks \"what systems does this project talk to?\"\n\n**Do not use when:**\n- The user already knows the infra and just wants to wire something up (use `\u002Farchitect`)\n- The question is about code architecture, not infrastructure (use `\u002Fresearch`)\n\n## Protocol\n\n### Step 1: DISCOVER\n\nScan the project for infrastructure configuration files. Check each category:\n\n**Container orchestration:**\n- `docker-compose.yml`, `docker-compose.*.yml`\n- `Dockerfile`, `*.dockerfile`\n- `k8s\u002F`, `kubernetes\u002F`, `helm\u002F`, `charts\u002F`\n\n**Environment and secrets:**\n- `.env`, `.env.*`, `.env.example`, `.env.local`\n- `*.env` files in config directories\n\n**Database and ORM:**\n- Prisma: `prisma\u002Fschema.prisma`\n- Drizzle: `drizzle.config.ts`, `drizzle\u002F`\n- TypeORM: `ormconfig.*`, `data-source.ts`\n- Sequelize: `.sequelizerc`, `config\u002Fdatabase.*`\n- Knex: `knexfile.*`\n- SQLAlchemy: `alembic.ini`, `alembic\u002F`\n- Django: `settings.py` (DATABASES section)\n- Rails: `config\u002Fdatabase.yml`\n- Go: look for `pgx`, `gorm`, `sqlx` in go.mod\n\n**Message queues and event streaming:**\n- Redis: connection strings, `ioredis`, `redis` in package.json\u002Frequirements.txt\u002Fgo.mod\n- RabbitMQ: `amqplib`, `pika`, `amqp` imports\n- Kafka: `kafkajs`, `confluent-kafka`, `sarama` imports\n- NATS: `nats`, `nats.go` imports\n- SQS\u002FSNS: `@aws-sdk\u002Fclient-sqs`, `boto3` sqs references\n\n**Cache:**\n- Redis (dual-use -- note if used as cache vs. pub\u002Fsub vs. primary store)\n- Memcached: `memcached`, `pylibmc` imports\n\n**Search:**\n- Elasticsearch: `@elastic\u002Felasticsearch`, `elasticsearch-py`\n- Meilisearch, Typesense, Algolia client libraries\n\n**Object storage:**\n- S3: `@aws-sdk\u002Fclient-s3`, `boto3` s3 references\n- MinIO, GCS, Azure Blob client libraries\n\n**External APIs:**\n- Stripe, Twilio, SendGrid, Auth0, Firebase, Supabase client libraries\n- Any `NEXT_PUBLIC_*` or `VITE_*` env vars pointing to external services\n\n**CI\u002FCD:**\n- `.github\u002Fworkflows\u002F`, `.gitlab-ci.yml`, `Jenkinsfile`, `bitbucket-pipelines.yml`\n\nFor each discovered item, record:\n- **What**: the system (e.g., \"PostgreSQL 15\")\n- **Where**: config file path and line\n- **How**: connection method (direct, pooled, ORM, SDK)\n- **Role**: primary store, cache, queue, search, auth, etc.\n\n### Step 2: TRACE CONNECTIONS\n\nFor each discovered system, trace how the application connects:\n\n1. Find connection strings in env files or config\n2. Find the client initialization code (imports, `new Client()`, `createPool()`)\n3. Identify which modules\u002Fservices use this connection\n4. Note connection pooling, retry logic, health checks if present\n\nBuild a connection graph:\n```\nApp --> [pool: 10] --> PostgreSQL (primary store)\nApp --> [ioredis]  --> Redis (cache + pub\u002Fsub)\nApp --> [SDK]      --> Stripe (payments)\n```\n\n### Step 3: ANALYZE PATTERNS\n\nBased on what's connected and how it's used, identify:\n\n**Access patterns:**\n- Read-heavy vs. write-heavy (look at query patterns in ORM usage)\n- Real-time vs. batch (WebSocket\u002FSSE presence, cron jobs)\n- Request\u002Fresponse vs. event-driven (queue usage, webhook handlers)\n\n**Missing layers** (flag only when evidence supports the need):\n\n| Signal | Likely Missing | Evidence Required |\n|---|---|---|\n| Repeated identical DB queries in hot paths | Cache layer (Redis\u002FMemcached) | Same query in 3+ request handlers |\n| `setTimeout`\u002F`setInterval` for deferred work | Job queue (Bull\u002FBullMQ\u002FCelery) | Processing that doesn't need to block the response |\n| Full-text search via `LIKE '%term%'` | Search engine (Elasticsearch\u002FMeilisearch) | Text search on >10K rows |\n| Large file uploads stored in DB or local disk | Object storage (S3\u002FMinIO) | Binary columns or `fs.writeFile` for user content |\n| Analytics queries on production tables | Analytics DB (Snowflake\u002FBigQuery\u002FClickHouse) | Aggregation queries mixed with OLTP |\n| Multiple services sharing one DB | Event bus or API gateway | 2+ repos writing to same schema |\n| No connection pooling | Connection pooler (PgBouncer) | Direct connections in serverless\u002Fhigh-concurrency |\n\n**Do not flag something as missing unless the evidence is in the code.**\n\n### Step 4: WRITE MANIFEST\n\nOutput the infrastructure manifest to `.planning\u002Finfra-manifest.md`:\n\n```markdown\n# Infrastructure Manifest\n\n> Generated: {ISO date}\n> Project: {project name from package.json or repo name}\n\n## Current Systems\n\n### {System Name} -- {Role}\n- **Type**: {database|cache|queue|search|storage|auth|payments|...}\n- **Product**: {PostgreSQL 15|Redis 7|Stripe SDK|...}\n- **Config**: `{file path}`\n- **Connection**: {method -- pooled, direct, SDK, ORM}\n- **Used by**: {modules\u002Fservices that import the client}\n\n(repeat for each system)\n\n## Connection Graph\n\n{ASCII diagram of connections -- use \u002Fascii-diagram conventions}\n\n## Access Patterns\n\n- {Pattern 1}: {evidence}\n- {Pattern 2}: {evidence}\n\n## Opportunities\n\n### {Opportunity Title}\n- **Signal**: {what in the code suggests this}\n- **System**: {what would address it -- e.g., \"Redis as cache layer\"}\n- **Impact**: {what improves -- latency, scalability, separation of concerns}\n- **Effort**: low | medium | high\n\n(repeat for each opportunity)\n\n## Multi-Repo Considerations\n\n{If the project references other repos, APIs, or shared databases, note them here.\nThis section feeds directly into \u002Fworkspace if the user wants to act on opportunities\nthat span repos.}\n```\n\n### Step 5: RETURN\n\nPresent a summary to the user:\n- How many systems found\n- The connection graph (inline, not just in the file)\n- Top opportunities ranked by signal strength\n- Whether any opportunities would require multi-repo coordination (suggest `\u002Fworkspace`)\n\n## Fringe Cases\n\n- **No docker-compose or env files**: Scan for hardcoded connection strings in source code.\n  Many projects connect without formal config files. Check `src\u002F`, `lib\u002F`, `config\u002F` for\n  connection patterns. Note the absence of externalized config as a finding.\n- **Monorepo with multiple services**: Treat each service directory as a separate scan target.\n  Produce one manifest with sections per service. Note shared databases across services.\n- **`.planning\u002F` does not exist**: Create it before writing the manifest.\n- **No infrastructure found**: Report that the project appears to be client-only or has no\n  external dependencies. This is a valid finding, not an error.\n- **Secrets in env files**: Never include actual secret values in the manifest. Record the\n  variable name and which system it connects to, not the value.\n\n## Contextual Gates\n\n**Disclosure:** \"Auditing infrastructure configuration. No files modified.\"\n**Reversibility:** green — read-only audit; only writes `.planning\u002Finfra-manifest.md`; undo with `rm .planning\u002Finfra-manifest.md`.\n**Trust gates:**\n- Any: full audit, manifest generation, opportunity analysis.\n\n## Quality Gates\n\n- [ ] Every discovered system has: type, product, config path, connection method\n- [ ] Connection graph covers all discovered systems\n- [ ] Opportunities cite specific code evidence (file:line), not speculation\n- [ ] No secret values appear in the manifest\n- [ ] Manifest written to `.planning\u002Finfra-manifest.md`\n- [ ] Multi-repo considerations section populated if cross-repo signals exist\n\n## Exit Protocol\n\n```\n---HANDOFF---\n- Scanned {N} config files, found {M} external systems\n- Key systems: {list top 3-4}\n- Top opportunity: {highest-signal opportunity}\n- Multi-repo scope: {yes\u002Fno -- if yes, suggest \u002Fworkspace}\n- Reversibility: green — delete .planning\u002Finfra-manifest.md to undo\n---\n```\n",{"name":5,"license":15,"description":7,"auto-trigger":45,"last-updated":49,"user-invocable":50,"trigger_keywords":51},1774742400000,true,[26,42,52,53,32,24,54,55],"what databases","what systems","map infrastructure","what does this connect to","main","e1a3d45697a0f323aaedcbea0ab6a0387b5fe722","skills\u002Finfra-audit",84,"https:\u002F\u002Fgithub.com\u002FSethGammon\u002FCitadel","https:\u002F\u002Fsethgammon.github.io\u002FCitadel\u002F","https:\u002F\u002Fgithub.com\u002FSethGammon","Building Citadel, the repo-local operating layer for Claude Code and Codex. Persistent work, routing, verification, and coordinated agent fleets.","2026-11-06 02:04:44",{"source":8,"skillName":5,"commands":66,"prompt":76,"zipAvailable":50},[67,70,73],{"tool":68,"command":69},"npx","npx skills add SethGammon\u002FCitadel --skill infra-audit",{"tool":71,"command":72},"bunx","bunx skills add SethGammon\u002FCitadel --skill infra-audit",{"tool":74,"command":75},"pnpm","pnpm dlx skills add SethGammon\u002FCitadel --skill infra-audit","安装技能，技能地址：https:\u002F\u002Fgithub.com\u002FSethGammon\u002FCitadel\u002Fblob\u002Fmain\u002Fskills\u002Finfra-audit\u002FSKILL.md",[],[79,104,130,154,181,200],{"skillNo":80,"name":81,"nameZh":6,"description":82,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":83,"categories":84,"keywords":85,"publishedAt":44},"01M6GXSBKE9A2HQWF8QRAZ4WJ5","workspace","Multi-repo campaign coordinator. Same lifecycle as fleet -- scope claims, discovery relay, wave-based execution -- but the unit of work is a repo, not a file. Coordinates campaigns across repositories with shared context.","https:\u002F\u002Fgithub.com\u002FSethGammon\u002FCitadel\u002Fblob\u002Fmain\u002Fskills\u002Fworkspace\u002FSKILL.md",[],[81,86,87,88,89,90,91,92,93,94,95,96,97,31,98,99,100,101,102,103],"repos","snowflake","multi-repo","work","context","campaign","coordinate","but","across","campaigns","shared","as","scope","add","unit","coordinator","fleet","claims",{"skillNo":105,"name":106,"nameZh":6,"description":107,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":108,"categories":109,"keywords":113,"publishedAt":44},"01M6GXS873AD1Y6RTM6GV47F3E","wiki","Markdown-first knowledge base where the LLM acts as librarian. Ingests raw sources, compiles and interlinks topic files, self-maintains an index. No vector DB or embeddings required -- uses LLM-native navigation over structured markdown up to ~400K words.","https:\u002F\u002Fgithub.com\u002FSethGammon\u002FCitadel\u002Fblob\u002Fmain\u002Fskills\u002Fwiki\u002FSKILL.md",[110],{"categoryNo":111,"categoryName":112,"taxonomyType":21,"taxonomyTypeDesc":22},"01JBSEEDCAT000000000000021","资料检索与研究",[106,114,115,116,117,118,119,120,121,122,36,123,124,125,126,127,97,31,128,129],"vector","embeddings","librarian","markdown","knowledge","karpathy","knowledge management","karpathy wiki","up","maintain","self","knowledge base","project","db","sources","native",{"skillNo":131,"name":132,"nameZh":6,"description":133,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":134,"categories":135,"keywords":136,"publishedAt":44},"01M6GXS2840SJ61285SZ43EJC3","watch","File sentinel that monitors the working directory for changes and marker comments, then auto-triggers appropriate skills. Poll-based via git diff against the last scan commit. Writes intake items for batch processing and routes marker actions through \u002Fdo. Use for automatic reactions to file changes; do NOT use for one-off inspection or tasks needing human judgment per file.","https:\u002F\u002Fgithub.com\u002FSethGammon\u002FCitadel\u002Fblob\u002Fmain\u002Fskills\u002Fwatch\u002FSKILL.md",[],[132,137,138,139,140,141,142,143,144,145,146,147,36,148,149,150,151,152,31,153],"directory","commit","tasks","git","batch","actions","start","sentinel","diff","auto","stop","do","scan","human","judgment","reactions","processing",{"skillNo":155,"name":156,"nameZh":6,"description":157,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":158,"categories":159,"keywords":163,"publishedAt":44},"01M6GXRXHYJ5RD9RZP81S2VFSW","verify","Self-test the Citadel hook pipeline from within a live session. Exercises real tool calls (Write, Edit, Bash, Read) and checks that hooks fired, telemetry accumulated, and no errors occurred. Reports HOOK HEALTH: PASS or HOOK HEALTH: FAIL with a per-hook breakdown.","https:\u002F\u002Fgithub.com\u002FSethGammon\u002FCitadel\u002Fblob\u002Fmain\u002Fskills\u002Fverify\u002FSKILL.md",[160],{"categoryNo":161,"categoryName":162,"taxonomyType":21,"taxonomyTypeDesc":22},"01JBSEEDCAT000000000000008","测试与质量",[156,164,165,166,167,168,169,170,171,172,173,174,175,124,176,31,177,178,179,180],"citadel","telemetry","harness","pipeline","Bash","tool","read","write","edit","session","hooks","reports","live","hook","errors","calls","true",{"skillNo":182,"name":183,"nameZh":6,"description":184,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":185,"categories":186,"keywords":187,"publishedAt":44},"01M6GXRS9MCJFMQZ917H2XH3AC","unharness","Safely leave Citadel using the active adoption receipt. Produces a no-write, reviewable plan, preserves a portable archive, removes only exact owned material, and reports modified or externally registered surfaces as retained or unknown. Legacy installs must be imported before exact leave is claimed.","https:\u002F\u002Fgithub.com\u002FSethGammon\u002FCitadel\u002Fblob\u002Fmain\u002Fskills\u002Funharness\u002FSKILL.md",[],[183,188,164,166,189,190,191,192,193,122,175,194,195,196,197,198,97,31,199,180],"uninstall","adoption","plan","archive","remove","only","Legacy","surfaces","clean","imported","active","material",{"skillNo":201,"name":202,"nameZh":6,"description":203,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":204,"categories":205,"keywords":214,"publishedAt":44},"01M6GXRMEJ2VHD43R9FNPD4910","triage","GitHub issue and PR investigator. Pulls open issues\u002FPRs, classifies them, searches the codebase for root cause or reviews contributed code, proposes fixes with file:line references, and optionally implements fixes. Use for investigating GitHub issues and reviewing PRs; do NOT use for general code review unrelated to GitHub issues.","https:\u002F\u002Fgithub.com\u002FSethGammon\u002FCitadel\u002Fblob\u002Fmain\u002Fskills\u002Ftriage\u002FSKILL.md",[206,209],{"categoryNo":207,"categoryName":208,"taxonomyType":21,"taxonomyTypeDesc":22},"01JBSEEDCAT000000000000007","代码审查",{"categoryNo":210,"categoryName":211,"taxonomyType":212,"taxonomyTypeDesc":213},"01JBSEEDCAT000000000000030","开发工程师","PROFESSION","适用职业",[202,215,216,217,218,219,220,221,222,223,224,225,226,227,148,31,228,229,230,180],"code review","review","review pr","pr","code","github issues","issues","open","use","unrelated","issue","general","references","line","investigator","reviews"]