[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"skill:01M71NJBQJY5SVMYA1WGVEBJWZ":3,"skill-same:01M71NJBQJY5SVMYA1WGVEBJWZ":101},{"skillNo":4,"name":5,"nameZh":6,"description":7,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":9,"repositoryNo":12,"starsCount":13,"licenseSpdxId":14,"licenseFileUrl":15,"sourceHtmlUrl":16,"categories":17,"keywords":34,"publishedAt":55,"linkOnly":56,"markdownContent":57,"markdownBody":58,"frontMatter":59,"refName":67,"commitSha":68,"skillDirectory":69,"forksCount":70,"repositoryHtmlUrl":71,"repositoryHomepageUrl":72,"ownerHtmlUrl":73,"ownerBlogUrl":74,"ownerDescription":6,"updatedAt":75,"install":76,"resources":89},"01M71NJBQJY5SVMYA1WGVEBJWZ","postgresql-table-design",null,"Use when designing or reviewing a PostgreSQL schema: column types, primary and foreign keys, constraints, indexes, partitioning and JSONB. Covers PostgreSQL gotchas, types to avoid, EXCLUDE constraints and zero-downtime schema change. For a quick query and index cheat sheet, use postgres-patterns.","monoes\u002Fmonomind","monoes","https:\u002F\u002Favatars.githubusercontent.com\u002Fu\u002F276744696?v=4","01M71KWF37AJ2NJBP3KWBVSDGT","01M71KWF4CSF8ADH0M6HA09VD2",23,"MIT","https:\u002F\u002Fgithub.com\u002Fmonoes\u002Fmonomind\u002Fblob\u002Fmain\u002Fpackages\u002F@monomind\u002Fcli\u002Forg-skills\u002Fpostgresql-table-design\u002FLICENSE.txt","https:\u002F\u002Fgithub.com\u002Fmonoes\u002Fmonomind\u002Fblob\u002Fmain\u002Fpackages\u002F@monomind\u002Fcli\u002Forg-skills\u002Fpostgresql-table-design\u002FSKILL.md",[18,23,26,31],{"categoryNo":19,"categoryName":20,"taxonomyType":21,"taxonomyTypeDesc":22},"01JBSEEDCAT000000000000010","后端与接口","SCENARIO","使用场景",{"categoryNo":24,"categoryName":25,"taxonomyType":21,"taxonomyTypeDesc":22},"01JBSEEDCAT000000000000015","视觉设计",{"categoryNo":27,"categoryName":28,"taxonomyType":29,"taxonomyTypeDesc":30},"01JBSEEDCAT000000000000032","设计师","PROFESSION","适用职业",{"categoryNo":32,"categoryName":33,"taxonomyType":29,"taxonomyTypeDesc":30},"01JBSEEDCAT000000000000033","数据分析师",[35,36,37,38,39,40,41,42,43,44,45,46,47,48,49,50,51,52,53,54],"design","postgresql","table","postgresql table design","keys","backend","github","change","cheat","query","when","database","use","schema","zero-downtime","for","ZeRO","postgres","types","quick","2026-11-10 10:56:23",false,"---\nname: postgresql-table-design\ndescription: \"Use when designing or reviewing a PostgreSQL schema: column types, primary and foreign keys, constraints, indexes, partitioning and JSONB. Covers PostgreSQL gotchas, types to avoid, EXCLUDE constraints and zero-downtime schema change. For a quick query and index cheat sheet, use postgres-patterns.\"\ntags: [\"data\",\"backend\",\"postgres\",\"database\",\"sql\"]\ntools: []\nlicense: MIT\nsource: https:\u002F\u002Fgithub.com\u002Fwshobson\u002Fagents\nsource_path: \"plugins\u002Fdatabase-design\u002Fskills\u002Fpostgresql-table-design\"\nsource_commit: 4236bb91f8395b0435f1d8b8baf9e8e4c69a8620\n---\n# PostgreSQL Table Design\n\n## When to Use\n\n- Designing a new PostgreSQL schema, or reviewing one before it ships.\n- Choosing column types, keys, constraints, or indexes for PostgreSQL specifically.\n- Deciding whether and how to partition a large table, or how to store semi-structured data.\n- Planning a schema change on a live database without downtime.\n\nThe rules and decision points for a PostgreSQL schema. The full data-type catalog, workload\npatterns (update-heavy, insert-heavy, upsert, schema evolution), extensions, JSONB indexing,\nand worked DDL examples are in `references\u002Fdetails.md`; open it when a section below points there.\n\n## Core Rules\n\n- Define a **PRIMARY KEY** for reference tables (users, orders, etc.). Not always needed for time-series\u002Fevent\u002Flog data. When used, prefer `BIGINT GENERATED ALWAYS AS IDENTITY`; use `UUID` only when global uniqueness\u002Fopacity is needed.\n- **Normalize first (to 3NF)** to eliminate data redundancy and update anomalies; denormalize **only** for measured, high-ROI reads where join performance is proven problematic.\n- Add **NOT NULL** everywhere it is semantically required; use **DEFAULT**s for common values.\n- Create **indexes for access paths you actually query**: PK\u002Funique (auto), **FK columns (manual!)**, frequent filters\u002Fsorts, and join keys.\n- Prefer **TIMESTAMPTZ** for event time; **NUMERIC** for money; **TEXT** for strings; **BIGINT** for integers; **DOUBLE PRECISION** for floats (or `NUMERIC` for exact decimal arithmetic).\n\n## PostgreSQL Gotchas\n\n- **Identifiers**: unquoted → lowercased. Avoid quoted\u002Fmixed-case names; use `snake_case`.\n- **Unique + NULLs**: UNIQUE allows multiple NULLs. Use `UNIQUE NULLS NOT DISTINCT (...)` (PG15+) to restrict to one NULL.\n- **FK indexes**: PostgreSQL **does not** auto-index FK columns. Add them.\n- **No silent coercions**: length\u002Fprecision overflows error out (no truncation). Inserting 999 into `NUMERIC(2,0)` fails, unlike databases that silently truncate or round.\n- **Sequences\u002Fidentity have gaps** (normal; don't \"fix\"). Rollbacks, crashes, and concurrent transactions leave gaps (1, 2, 5, 6...).\n- **Heap storage**: no clustered PK by default; `CLUSTER` is a one-off reorganization, not maintained on later inserts.\n- **MVCC**: updates\u002Fdeletes leave dead tuples; vacuum handles them—design to avoid hot wide-row churn.\n\n## Data Types\n\n- **IDs**: `BIGINT GENERATED ALWAYS AS IDENTITY`; `UUID` for distributed or opaque IDs, generated with `uuidv7()` (PG18+) or `gen_random_uuid()`.\n- **Numbers**: `BIGINT` unless storage is critical; `DOUBLE PRECISION` over `REAL`; `NUMERIC(p,s)` for money and exact decimals.\n- **Strings**: `TEXT`, with `CHECK (LENGTH(col) \u003C= n)` when a limit is needed; `BYTEA` for binary. Case-insensitive lookups: expression index on `LOWER(col)`, or `CITEXT` when a constraint must be case-insensitive.\n- **Time**: `TIMESTAMPTZ`, `DATE`, `INTERVAL`. `now()` is transaction start; `clock_timestamp()` is wall clock.\n- **Booleans**: `BOOLEAN NOT NULL` unless tri-state is required.\n- **Enums**: `CREATE TYPE ... AS ENUM` only for small, stable sets; evolving business values get `TEXT` + `CHECK` or a lookup table.\n- **JSONB** over JSON, indexed with GIN, for optional\u002Fsemi-structured attributes only.\n- Arrays, ranges, network, geometric, full-text, domain, composite, and vector types, plus TOAST storage and collation control: see `references\u002Fdetails.md`.\n\n### Types to avoid\n\n| Avoid | Use instead |\n|---|---|\n| `timestamp` (without time zone) | `timestamptz` |\n| `char(n)`, `varchar(n)` | `text` (+ `CHECK` on length if needed) |\n| `money` | `numeric` |\n| `timetz` | `timestamptz` |\n| `timestamptz(0)` or any precision | `timestamptz` |\n| `serial` | `generated always as identity` |\n\n## Constraints\n\n- **PK**: implicit UNIQUE + NOT NULL; creates a B-tree index.\n- **FK**: specify `ON DELETE\u002FUPDATE` (`CASCADE`, `RESTRICT`, `SET NULL`, `SET DEFAULT`). Index the referencing column. Use `DEFERRABLE INITIALLY DEFERRED` for circular dependencies checked at commit.\n- **UNIQUE**: creates a B-tree index; allows multiple NULLs unless `NULLS NOT DISTINCT` (PG15+). Prefer `NULLS NOT DISTINCT` unless duplicate NULLs are wanted.\n- **CHECK**: row-local; NULL passes (three-valued logic). Combine with `NOT NULL`: `price NUMERIC NOT NULL CHECK (price > 0)`.\n- **EXCLUDE**: prevents overlaps with operators, e.g. `EXCLUDE USING gist (room_id WITH =, booking_period WITH &&)` stops double-booking. Needs a GiST-capable type.\n\n## Indexing\n\n- **B-tree**: default for equality\u002Frange (`=`, `\u003C`, `>`, `BETWEEN`, `ORDER BY`).\n- **Composite**: leftmost-prefix rule (`WHERE a = ? AND b > ?` uses `(a,b)`; `WHERE b = ?` does not). Most selective columns first.\n- **Covering**: `CREATE INDEX ON tbl (id) INCLUDE (name, email)` for index-only scans.\n- **Partial**: hot subsets, `CREATE INDEX ON tbl (user_id) WHERE status = 'active'`.\n- **Expression**: `CREATE INDEX ON tbl (LOWER(email))`; the query must use the same expression.\n- **GIN**: JSONB containment\u002Fexistence, arrays, full-text search. **GiST**: ranges, geometry, exclusion constraints.\n- **BRIN**: large, naturally ordered data (time-series) at minimal storage cost; effective when disk order correlates with the indexed column.\n\n## Partitioning\n\n- Use for large tables (>100M rows) whose queries consistently filter on the partition key, or where maintenance (pruning, bulk replacement) follows a key.\n- **RANGE** for time-series (`PARTITION BY RANGE (created_at)`; **TimescaleDB** automates it with retention and compression), **LIST** for discrete values, **HASH** for even distribution without a natural key.\n- **Constraint exclusion**: the planner prunes partitions through their `CHECK` constraints; declarative partitioning (PG10+) creates them for you.\n- Prefer declarative partitioning or hypertables. Do NOT use table inheritance.\n- **Limitations**: no global UNIQUE constraints—include the partition key in PK\u002FUNIQUE. FKs from partitioned tables need PG11+, FKs referencing a partitioned table need PG12+; on older versions, use triggers.\n\n## Examples\n\n```sql\nCREATE TABLE users (\n  user_id BIGINT GENERATED ALWAYS AS IDENTITY PRIMARY KEY,\n  email TEXT NOT NULL UNIQUE,\n  name TEXT NOT NULL,\n  created_at TIMESTAMPTZ NOT NULL DEFAULT now()\n);\nCREATE UNIQUE INDEX ON users (LOWER(email));\nCREATE INDEX ON users (created_at);\n```\n\n```sql\nCREATE TABLE orders (\n  order_id BIGINT GENERATED ALWAYS AS IDENTITY PRIMARY KEY,\n  user_id BIGINT NOT NULL REFERENCES users(user_id),\n  status TEXT NOT NULL DEFAULT 'PENDING' CHECK (status IN ('PENDING','PAID','CANCELED')),\n  total NUMERIC(10,2) NOT NULL CHECK (total > 0),\n  created_at TIMESTAMPTZ NOT NULL DEFAULT now()\n);\nCREATE INDEX ON orders (user_id);\nCREATE INDEX ON orders (created_at);\n```\n\n```sql\n-- JSONB attributes with a generated, indexable scalar\nCREATE TABLE profiles (\n  user_id BIGINT PRIMARY KEY REFERENCES users(user_id),\n  attrs JSONB NOT NULL DEFAULT '{}',\n  theme TEXT GENERATED ALWAYS AS (attrs->>'theme') STORED\n);\nCREATE INDEX profiles_attrs_gin ON profiles USING GIN (attrs);\n```\n\n## Going deeper\n\n`references\u002Fdetails.md` holds the material this file only names:\n\n- The full data-type catalog: TOAST storage, collations, arrays, ranges, network, geometric, text search, domains, composites, vectors.\n- Table types (`TEMPORARY`, `UNLOGGED`) and row-level security.\n- Constraint and index notes, and partitioning DDL for RANGE, LIST, and HASH.\n- Workload patterns: update-heavy, insert-heavy, upsert design, safe schema evolution.\n- Generated columns and extensions (`pg_trgm`, `citext`, `timescaledb`, `postgis`, `pgvector`, and more).\n- JSONB indexing strategies, including `jsonb_path_ops` and extracted B-tree columns.\n","# PostgreSQL Table Design\n\n## When to Use\n\n- Designing a new PostgreSQL schema, or reviewing one before it ships.\n- Choosing column types, keys, constraints, or indexes for PostgreSQL specifically.\n- Deciding whether and how to partition a large table, or how to store semi-structured data.\n- Planning a schema change on a live database without downtime.\n\nThe rules and decision points for a PostgreSQL schema. The full data-type catalog, workload\npatterns (update-heavy, insert-heavy, upsert, schema evolution), extensions, JSONB indexing,\nand worked DDL examples are in `references\u002Fdetails.md`; open it when a section below points there.\n\n## Core Rules\n\n- Define a **PRIMARY KEY** for reference tables (users, orders, etc.). Not always needed for time-series\u002Fevent\u002Flog data. When used, prefer `BIGINT GENERATED ALWAYS AS IDENTITY`; use `UUID` only when global uniqueness\u002Fopacity is needed.\n- **Normalize first (to 3NF)** to eliminate data redundancy and update anomalies; denormalize **only** for measured, high-ROI reads where join performance is proven problematic.\n- Add **NOT NULL** everywhere it is semantically required; use **DEFAULT**s for common values.\n- Create **indexes for access paths you actually query**: PK\u002Funique (auto), **FK columns (manual!)**, frequent filters\u002Fsorts, and join keys.\n- Prefer **TIMESTAMPTZ** for event time; **NUMERIC** for money; **TEXT** for strings; **BIGINT** for integers; **DOUBLE PRECISION** for floats (or `NUMERIC` for exact decimal arithmetic).\n\n## PostgreSQL Gotchas\n\n- **Identifiers**: unquoted → lowercased. Avoid quoted\u002Fmixed-case names; use `snake_case`.\n- **Unique + NULLs**: UNIQUE allows multiple NULLs. Use `UNIQUE NULLS NOT DISTINCT (...)` (PG15+) to restrict to one NULL.\n- **FK indexes**: PostgreSQL **does not** auto-index FK columns. Add them.\n- **No silent coercions**: length\u002Fprecision overflows error out (no truncation). Inserting 999 into `NUMERIC(2,0)` fails, unlike databases that silently truncate or round.\n- **Sequences\u002Fidentity have gaps** (normal; don't \"fix\"). Rollbacks, crashes, and concurrent transactions leave gaps (1, 2, 5, 6...).\n- **Heap storage**: no clustered PK by default; `CLUSTER` is a one-off reorganization, not maintained on later inserts.\n- **MVCC**: updates\u002Fdeletes leave dead tuples; vacuum handles them—design to avoid hot wide-row churn.\n\n## Data Types\n\n- **IDs**: `BIGINT GENERATED ALWAYS AS IDENTITY`; `UUID` for distributed or opaque IDs, generated with `uuidv7()` (PG18+) or `gen_random_uuid()`.\n- **Numbers**: `BIGINT` unless storage is critical; `DOUBLE PRECISION` over `REAL`; `NUMERIC(p,s)` for money and exact decimals.\n- **Strings**: `TEXT`, with `CHECK (LENGTH(col) \u003C= n)` when a limit is needed; `BYTEA` for binary. Case-insensitive lookups: expression index on `LOWER(col)`, or `CITEXT` when a constraint must be case-insensitive.\n- **Time**: `TIMESTAMPTZ`, `DATE`, `INTERVAL`. `now()` is transaction start; `clock_timestamp()` is wall clock.\n- **Booleans**: `BOOLEAN NOT NULL` unless tri-state is required.\n- **Enums**: `CREATE TYPE ... AS ENUM` only for small, stable sets; evolving business values get `TEXT` + `CHECK` or a lookup table.\n- **JSONB** over JSON, indexed with GIN, for optional\u002Fsemi-structured attributes only.\n- Arrays, ranges, network, geometric, full-text, domain, composite, and vector types, plus TOAST storage and collation control: see `references\u002Fdetails.md`.\n\n### Types to avoid\n\n| Avoid | Use instead |\n|---|---|\n| `timestamp` (without time zone) | `timestamptz` |\n| `char(n)`, `varchar(n)` | `text` (+ `CHECK` on length if needed) |\n| `money` | `numeric` |\n| `timetz` | `timestamptz` |\n| `timestamptz(0)` or any precision | `timestamptz` |\n| `serial` | `generated always as identity` |\n\n## Constraints\n\n- **PK**: implicit UNIQUE + NOT NULL; creates a B-tree index.\n- **FK**: specify `ON DELETE\u002FUPDATE` (`CASCADE`, `RESTRICT`, `SET NULL`, `SET DEFAULT`). Index the referencing column. Use `DEFERRABLE INITIALLY DEFERRED` for circular dependencies checked at commit.\n- **UNIQUE**: creates a B-tree index; allows multiple NULLs unless `NULLS NOT DISTINCT` (PG15+). Prefer `NULLS NOT DISTINCT` unless duplicate NULLs are wanted.\n- **CHECK**: row-local; NULL passes (three-valued logic). Combine with `NOT NULL`: `price NUMERIC NOT NULL CHECK (price > 0)`.\n- **EXCLUDE**: prevents overlaps with operators, e.g. `EXCLUDE USING gist (room_id WITH =, booking_period WITH &&)` stops double-booking. Needs a GiST-capable type.\n\n## Indexing\n\n- **B-tree**: default for equality\u002Frange (`=`, `\u003C`, `>`, `BETWEEN`, `ORDER BY`).\n- **Composite**: leftmost-prefix rule (`WHERE a = ? AND b > ?` uses `(a,b)`; `WHERE b = ?` does not). Most selective columns first.\n- **Covering**: `CREATE INDEX ON tbl (id) INCLUDE (name, email)` for index-only scans.\n- **Partial**: hot subsets, `CREATE INDEX ON tbl (user_id) WHERE status = 'active'`.\n- **Expression**: `CREATE INDEX ON tbl (LOWER(email))`; the query must use the same expression.\n- **GIN**: JSONB containment\u002Fexistence, arrays, full-text search. **GiST**: ranges, geometry, exclusion constraints.\n- **BRIN**: large, naturally ordered data (time-series) at minimal storage cost; effective when disk order correlates with the indexed column.\n\n## Partitioning\n\n- Use for large tables (>100M rows) whose queries consistently filter on the partition key, or where maintenance (pruning, bulk replacement) follows a key.\n- **RANGE** for time-series (`PARTITION BY RANGE (created_at)`; **TimescaleDB** automates it with retention and compression), **LIST** for discrete values, **HASH** for even distribution without a natural key.\n- **Constraint exclusion**: the planner prunes partitions through their `CHECK` constraints; declarative partitioning (PG10+) creates them for you.\n- Prefer declarative partitioning or hypertables. Do NOT use table inheritance.\n- **Limitations**: no global UNIQUE constraints—include the partition key in PK\u002FUNIQUE. FKs from partitioned tables need PG11+, FKs referencing a partitioned table need PG12+; on older versions, use triggers.\n\n## Examples\n\n```sql\nCREATE TABLE users (\n  user_id BIGINT GENERATED ALWAYS AS IDENTITY PRIMARY KEY,\n  email TEXT NOT NULL UNIQUE,\n  name TEXT NOT NULL,\n  created_at TIMESTAMPTZ NOT NULL DEFAULT now()\n);\nCREATE UNIQUE INDEX ON users (LOWER(email));\nCREATE INDEX ON users (created_at);\n```\n\n```sql\nCREATE TABLE orders (\n  order_id BIGINT GENERATED ALWAYS AS IDENTITY PRIMARY KEY,\n  user_id BIGINT NOT NULL REFERENCES users(user_id),\n  status TEXT NOT NULL DEFAULT 'PENDING' CHECK (status IN ('PENDING','PAID','CANCELED')),\n  total NUMERIC(10,2) NOT NULL CHECK (total > 0),\n  created_at TIMESTAMPTZ NOT NULL DEFAULT now()\n);\nCREATE INDEX ON orders (user_id);\nCREATE INDEX ON orders (created_at);\n```\n\n```sql\n-- JSONB attributes with a generated, indexable scalar\nCREATE TABLE profiles (\n  user_id BIGINT PRIMARY KEY REFERENCES users(user_id),\n  attrs JSONB NOT NULL DEFAULT '{}',\n  theme TEXT GENERATED ALWAYS AS (attrs->>'theme') STORED\n);\nCREATE INDEX profiles_attrs_gin ON profiles USING GIN (attrs);\n```\n\n## Going deeper\n\n`references\u002Fdetails.md` holds the material this file only names:\n\n- The full data-type catalog: TOAST storage, collations, arrays, ranges, network, geometric, text search, domains, composites, vectors.\n- Table types (`TEMPORARY`, `UNLOGGED`) and row-level security.\n- Constraint and index notes, and partitioning DDL for RANGE, LIST, and HASH.\n- Workload patterns: update-heavy, insert-heavy, upsert design, safe schema evolution.\n- Generated columns and extensions (`pg_trgm`, `citext`, `timescaledb`, `postgis`, `pgvector`, and more).\n- JSONB indexing strategies, including `jsonb_path_ops` and extracted B-tree columns.\n",{"name":5,"tags":60,"tools":63,"source":64,"license":14,"description":7,"source_path":65,"source_commit":66},[61,40,52,46,62],"data","sql",[],"https:\u002F\u002Fgithub.com\u002Fwshobson\u002Fagents","plugins\u002Fdatabase-design\u002Fskills\u002Fpostgresql-table-design","4236bb91f8395b0435f1d8b8baf9e8e4c69a8620","main","f7cd4595d0f8959822163e14f9787117765c931a","packages\u002F@monomind\u002Fcli\u002Forg-skills\u002Fpostgresql-table-design",2,"https:\u002F\u002Fgithub.com\u002Fmonoes\u002Fmonomind","https:\u002F\u002Fmonoes.github.io\u002Fmonomind\u002F","https:\u002F\u002Fgithub.com\u002Fmonoes","https:\u002F\u002Fmonoes.me","2026-11-14 03:30:52",{"source":8,"skillName":5,"commands":77,"prompt":87,"zipAvailable":88},[78,81,84],{"tool":79,"command":80},"npx","npx skills add monoes\u002Fmonomind --skill postgresql-table-design",{"tool":82,"command":83},"bunx","bunx skills add monoes\u002Fmonomind --skill postgresql-table-design",{"tool":85,"command":86},"pnpm","pnpm dlx skills add monoes\u002Fmonomind --skill postgresql-table-design","安装技能，技能地址：https:\u002F\u002Fgithub.com\u002Fmonoes\u002Fmonomind\u002Fblob\u002Fmain\u002Fpackages\u002F@monomind\u002Fcli\u002Forg-skills\u002Fpostgresql-table-design\u002FSKILL.md",true,[90,95],{"path":91,"resourceType":92,"resourceTypeDesc":93,"sizeBytes":94,"sourceHtmlUrl":15},"LICENSE.txt","LICENSE","许可证",1068,{"path":96,"resourceType":97,"resourceTypeDesc":98,"sizeBytes":99,"sourceHtmlUrl":100},"references\u002Fdetails.md","REFERENCE","参考文档",12094,"https:\u002F\u002Fgithub.com\u002Fmonoes\u002Fmonomind\u002Fblob\u002Fmain\u002Fpackages\u002F@monomind\u002Fcli\u002Forg-skills\u002Fpostgresql-table-design\u002Freferences\u002Fdetails.md",[102,129,159,185,203,230],{"skillNo":103,"name":104,"nameZh":6,"description":105,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":9,"repositoryNo":12,"starsCount":13,"licenseSpdxId":106,"licenseFileUrl":6,"sourceHtmlUrl":107,"categories":108,"keywords":109,"publishedAt":128},"01M71PB3SHWKMNJM6MD65VX8D6","zk-steward","Org role guidance for a ZK steward: engineer zero-knowledge proof systems with circuit design, SNARK vs STARK choice and security review. This is zero-knowledge cryptography, not Zettelkasten note-taking.","Apache-2.0","https:\u002F\u002Fgithub.com\u002Fmonoes\u002Fmonomind\u002Fblob\u002Fmain\u002Fpackages\u002F@monomind\u002Fcli\u002Forg-skills\u002Fzk-steward\u002FSKILL.md",[],[110,111,112,113,114,115,35,116,117,44,118,119,120,121,122,123,124,125,126,127],"zk","zk steward","steward","zero-knowledge","engineer","choice","knowledge","impact","snark","review","monomind","security review","stark","zettelkasten","cryptography","security","org","blockchain","2026-11-10 13:02:02",{"skillNo":130,"name":131,"nameZh":6,"description":132,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":9,"repositoryNo":12,"starsCount":13,"licenseSpdxId":14,"licenseFileUrl":133,"sourceHtmlUrl":134,"categories":135,"keywords":142,"publishedAt":128},"01M71PB18SDG28WBKPKJNB814K","writing-plans","Use when you have a spec or requirements for a multi-step coding task and must write an implementation plan before touching code. Produces bite-sized TDD tasks with exact file paths, code and commands for an engineer with zero context.","https:\u002F\u002Fgithub.com\u002Fmonoes\u002Fmonomind\u002Fblob\u002Fmain\u002Fpackages\u002F@monomind\u002Fcli\u002Forg-skills\u002Fwriting-plans\u002FLICENSE.txt","https:\u002F\u002Fgithub.com\u002Fmonoes\u002Fmonomind\u002Fblob\u002Fmain\u002Fpackages\u002F@monomind\u002Fcli\u002Forg-skills\u002Fwriting-plans\u002FSKILL.md",[136,139],{"categoryNo":137,"categoryName":138,"taxonomyType":21,"taxonomyTypeDesc":22},"01JBSEEDCAT000000000000018","写作与文案",{"categoryNo":140,"categoryName":141,"taxonomyType":29,"taxonomyTypeDesc":30},"01JBSEEDCAT000000000000036","内容创作者",[143,144,145,114,146,147,45,148,44,149,150,151,152,153,154,155,156,157,158,51],"writing","writing plans","plans","superpowers","implementation plan","you","code","tasks","plan","product","write","commands","paths","suggest","coding","context",{"skillNo":160,"name":161,"nameZh":6,"description":162,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":9,"repositoryNo":12,"starsCount":13,"licenseSpdxId":106,"licenseFileUrl":163,"sourceHtmlUrl":164,"categories":165,"keywords":169,"publishedAt":128},"01M71PAXFM488X9ARXK0T04TF5","write-spec","Write a feature spec or PRD from a problem statement or feature idea. Use when turning a vague idea or user request into a structured document, scoping a feature with goals and non-goals, defining success metrics and acceptance criteria, or breaking a big ask into a phased spec.","https:\u002F\u002Fgithub.com\u002Fmonoes\u002Fmonomind\u002Fblob\u002Fmain\u002Fpackages\u002F@monomind\u002Fcli\u002Forg-skills\u002Fwrite-spec\u002FLICENSE.txt","https:\u002F\u002Fgithub.com\u002Fmonoes\u002Fmonomind\u002Fblob\u002Fmain\u002Fpackages\u002F@monomind\u002Fcli\u002Forg-skills\u002Fwrite-spec\u002FSKILL.md",[166],{"categoryNo":167,"categoryName":168,"taxonomyType":29,"taxonomyTypeDesc":30},"01JBSEEDCAT000000000000031","产品经理",[153,170,171,172,173,116,174,45,175,176,177,152,178,179,180,181,182,183,47,184],"write spec","spec","user request","problem","acceptance","ask","vague","work","request","scoping","idea","metrics","feature","problem statement","document",{"skillNo":186,"name":187,"nameZh":6,"description":188,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":9,"repositoryNo":12,"starsCount":13,"licenseSpdxId":106,"licenseFileUrl":189,"sourceHtmlUrl":190,"categories":191,"keywords":193,"publishedAt":128},"01M71PASSZY800C0RPEARBS918","write-query","Write optimized SQL for your dialect with best practices. Use when translating a natural-language data need into SQL, building a multi-CTE query with joins and aggregations, optimizing a query against a large partitioned table, or getting dialect-specific syntax for Snowflake, BigQuery, Postgres, etc.","https:\u002F\u002Fgithub.com\u002Fmonoes\u002Fmonomind\u002Fblob\u002Fmain\u002Fpackages\u002F@monomind\u002Fcli\u002Forg-skills\u002Fwrite-query\u002FLICENSE.txt","https:\u002F\u002Fgithub.com\u002Fmonoes\u002Fmonomind\u002Fblob\u002Fmain\u002Fpackages\u002F@monomind\u002Fcli\u002Forg-skills\u002Fwrite-query\u002FSKILL.md",[192],{"categoryNo":32,"categoryName":33,"taxonomyType":29,"taxonomyTypeDesc":30},[44,153,194,52,50,195,116,47,45,196,197,198,199,177,41,62,200,201,202,61],"write query","snowflake","best practices","natural-language","with","multi","https","syntax","plugins",{"skillNo":204,"name":205,"nameZh":6,"description":206,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":9,"repositoryNo":12,"starsCount":13,"licenseSpdxId":106,"licenseFileUrl":6,"sourceHtmlUrl":207,"categories":208,"keywords":215,"publishedAt":128},"01M71PAPTX0T3PF6ETFVR96SJJ","workflow-automation","Org role guidance for workflow automation: build and maintain CI\u002FCD definitions in GitHub Actions or equivalent: triggers, jobs, matrices, caching. Covers path filters, dependency caching, parallel jobs, timeouts and fail-fast ordering.","https:\u002F\u002Fgithub.com\u002Fmonoes\u002Fmonomind\u002Fblob\u002Fmain\u002Fpackages\u002F@monomind\u002Fcli\u002Forg-skills\u002Fworkflow-automation\u002FSKILL.md",[209,212],{"categoryNo":210,"categoryName":211,"taxonomyType":21,"taxonomyTypeDesc":22},"01JBSEEDCAT000000000000011","运维与部署",{"categoryNo":213,"categoryName":214,"taxonomyType":21,"taxonomyTypeDesc":22},"01JBSEEDCAT000000000000023","Skill与智能体开发",[216,217,218,219,50,220,221,222,223,117,224,225,226,44,120,41,227,228,229,200],"Workflow Automation","automation","workflow","parallel","actions","ci","triggers","github actions","maintain","filters","caching","build","dependency","devops",{"skillNo":231,"name":232,"nameZh":6,"description":233,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":9,"repositoryNo":12,"starsCount":13,"licenseSpdxId":106,"licenseFileUrl":6,"sourceHtmlUrl":234,"categories":235,"keywords":237,"publishedAt":128},"01M71PAM19Z1XTV9NPCFSE2MY8","workflow-architect","Org role guidance for a workflow architect: map full workflow trees for systems, user journeys and agents, covering every branch and failure. Covers discovering workflows from code, handoff contracts, timeouts, recovery paths and observable state.","https:\u002F\u002Fgithub.com\u002Fmonoes\u002Fmonomind\u002Fblob\u002Fmain\u002Fpackages\u002F@monomind\u002Fcli\u002Forg-skills\u002Fworkflow-architect\u002FSKILL.md",[236],{"categoryNo":213,"categoryName":214,"taxonomyType":21,"taxonomyTypeDesc":22},[218,238,239,240,241,242,243,50,244,245,149,246,247,248,120,41,249,250,200,251],"workflow architect","architect","trees","user journeys","branch","planning","map","workflows","architecture","state","leadership","recovery","operations","systems"]