[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"skill:01M6CVVC9GR1BH5WCHQ2SF2T7C":3,"skill-same:01M6CVVC9GR1BH5WCHQ2SF2T7C":72},{"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":50,"commitSha":51,"skillDirectory":52,"forksCount":53,"repositoryHtmlUrl":54,"repositoryHomepageUrl":54,"ownerHtmlUrl":55,"ownerBlogUrl":6,"ownerDescription":56,"updatedAt":57,"install":58,"resources":71},"01M6CVVC9GR1BH5WCHQ2SF2T7C","snowflake-development",null,"Comprehensive Snowflake development assistant covering SQL best practices, data pipeline design (Dynamic Tables, Streams, Tasks, Snowpipe), Cortex AI functions, Cortex Agents, Snowpark Python, dbt integration, performance tuning, and security hardening.","Sam-06060\u002Fjarvis-assistant","Sam-06060","https:\u002F\u002Favatars.githubusercontent.com\u002Fu\u002F208600848?v=4","01M6CRKT7C7FXD21V6HXF293S0","Samson Frank Ganta","01M6CRKTBEKYFD8YX5Z1GT99EE",6,"Apache-2.0","https:\u002F\u002Fgithub.com\u002FSam-06060\u002Fjarvis-assistant\u002Fblob\u002Fmain\u002Fmodules\u002Fagent_skills\u002Fawesome-skills\u002Fplaybooks\u002Fsnowflake-development\u002FSKILL.md",[18],{"categoryNo":19,"categoryName":20,"taxonomyType":21,"taxonomyTypeDesc":22},"01JBSEEDCAT000000000000033","数据分析师","PROFESSION","适用职业",[24,25,26,27,28,29,30,31,32,33,34,35,36,37,38,39,40,41,42,43],"snowflake development","development","snowflake","data pipeline","community","functions","data-engineering","cortex","tuning","pipeline","data","design","best practices","tasks","sql","performance","security","python","safe","assistant","2026-11-10 10:12:30",false,"---\nname: snowflake-development\ndescription: \"Comprehensive Snowflake development assistant covering SQL best practices, data pipeline design (Dynamic Tables, Streams, Tasks, Snowpipe), Cortex AI functions, Cortex Agents, Snowpark Python, dbt integration, performance tuning, and security hardening.\"\ncategory: data-engineering\nrisk: safe\nsource: community\ndate_added: \"2026-03-24\"\n---\n\n# Snowflake Development\n\nYou are a Snowflake development expert. Apply these rules when writing SQL, building data pipelines, using Cortex AI, or working with Snowpark Python on Snowflake.\n\n## When to Use\n\n- When the user asks for help with Snowflake SQL, data pipelines, Cortex AI, or Snowpark Python.\n- When you need Snowflake-specific guidance for dbt, performance tuning, or security hardening.\n\n## SQL Best Practices\n\n### Naming and Style\n\n- Use `snake_case` for all identifiers. Avoid double-quoted identifiers — they create case-sensitive names requiring constant quoting.\n- Use CTEs (`WITH` clauses) over nested subqueries.\n- Use `CREATE OR REPLACE` for idempotent DDL.\n- Use explicit column lists — never `SELECT *` in production (Snowflake's columnar storage scans only referenced columns).\n\n### Stored Procedures — Colon Prefix Rule\n\nIn SQL stored procedures (BEGIN...END blocks), variables and parameters **must** use the colon `:` prefix inside SQL statements. Without it, Snowflake raises \"invalid identifier\" errors.\n\nBAD:\n```sql\nCREATE PROCEDURE my_proc(p_id INT) RETURNS STRING LANGUAGE SQL AS\nBEGIN\n    LET result STRING;\n    SELECT name INTO result FROM users WHERE id = p_id;\n    RETURN result;\nEND;\n```\n\nGOOD:\n```sql\nCREATE PROCEDURE my_proc(p_id INT) RETURNS STRING LANGUAGE SQL AS\nBEGIN\n    LET result STRING;\n    SELECT name INTO :result FROM users WHERE id = :p_id;\n    RETURN result;\nEND;\n```\n\n### Semi-Structured Data\n\n- VARIANT, OBJECT, ARRAY for JSON\u002FAvro\u002FParquet\u002FORC.\n- Access nested fields: `src:customer.name::STRING`. Always cast: `src:price::NUMBER(10,2)`.\n- VARIANT null vs SQL NULL: JSON `null` is stored as `\"null\"`. Use `STRIP_NULL_VALUE = TRUE` on load.\n- Flatten arrays: `SELECT f.value:name::STRING FROM my_table, LATERAL FLATTEN(input => src:items) f;`\n\n### MERGE for Upserts\n\n```sql\nMERGE INTO target t USING source s ON t.id = s.id\nWHEN MATCHED THEN UPDATE SET t.name = s.name, t.updated_at = CURRENT_TIMESTAMP()\nWHEN NOT MATCHED THEN INSERT (id, name, updated_at) VALUES (s.id, s.name, CURRENT_TIMESTAMP());\n```\n\n## Data Pipelines\n\n### Choosing Your Approach\n\n| Approach | When to Use |\n|----------|-------------|\n| Dynamic Tables | Declarative transformations. **Default choice.** Define the query, Snowflake handles refresh. |\n| Streams + Tasks | Imperative CDC. Use for procedural logic, stored procedure calls. |\n| Snowpipe | Continuous file loading from S3\u002FGCS\u002FAzure. |\n\n### Dynamic Tables\n\n```sql\nCREATE OR REPLACE DYNAMIC TABLE cleaned_events\n    TARGET_LAG = '5 minutes'\n    WAREHOUSE = transform_wh\n    AS\n    SELECT event_id, event_type, user_id, event_timestamp\n    FROM raw_events\n    WHERE event_type IS NOT NULL;\n```\n\nKey rules:\n- Set `TARGET_LAG` progressively: tighter at top, looser at bottom.\n- Incremental DTs **cannot** depend on Full refresh DTs.\n- `SELECT *` breaks on schema changes — use explicit column lists.\n- Change tracking must stay enabled on base tables.\n- Views cannot sit between two Dynamic Tables.\n\n### Streams and Tasks\n\n```sql\nCREATE OR REPLACE STREAM raw_stream ON TABLE raw_events;\n\nCREATE OR REPLACE TASK process_events\n    WAREHOUSE = transform_wh\n    SCHEDULE = 'USING CRON 0 *\u002F1 * * * America\u002FLos_Angeles'\n    WHEN SYSTEM$STREAM_HAS_DATA('raw_stream')\n    AS INSERT INTO cleaned_events SELECT ... FROM raw_stream;\n\n-- Tasks start SUSPENDED — you MUST resume them\nALTER TASK process_events RESUME;\n```\n\n## Cortex AI\n\n### Function Reference\n\n| Function | Purpose |\n|----------|---------|\n| `AI_COMPLETE` | LLM completion (text, images, documents) |\n| `AI_CLASSIFY` | Classify into categories (up to 500 labels) |\n| `AI_FILTER` | Boolean filter on text\u002Fimages |\n| `AI_EXTRACT` | Structured extraction from text\u002Fimages\u002Fdocuments |\n| `AI_SENTIMENT` | Sentiment score (-1 to 1) |\n| `AI_PARSE_DOCUMENT` | OCR or layout extraction |\n| `AI_REDACT` | PII removal |\n\n**Deprecated (do NOT use):** `COMPLETE`, `CLASSIFY_TEXT`, `EXTRACT_ANSWER`, `PARSE_DOCUMENT`, `SUMMARIZE`, `TRANSLATE`, `SENTIMENT`, `EMBED_TEXT_768`.\n\n### TO_FILE — Common Error Source\n\nStage path and filename are **SEPARATE** arguments:\n\n```sql\n-- BAD: TO_FILE('@stage\u002Ffile.pdf')\n-- GOOD:\nTO_FILE('@db.schema.mystage', 'invoice.pdf')\n```\n\n### Use AI_CLASSIFY for Classification (Not AI_COMPLETE)\n\n```sql\nSELECT AI_CLASSIFY(ticket_text,\n    ['billing', 'technical', 'account']):labels[0]::VARCHAR AS category\nFROM tickets;\n```\n\n### Cortex Agents\n\n```sql\nCREATE OR REPLACE AGENT my_db.my_schema.sales_agent\nFROM SPECIFICATION $spec$\n{\n    \"models\": {\"orchestration\": \"auto\"},\n    \"instructions\": {\n        \"orchestration\": \"You are SalesBot...\",\n        \"response\": \"Be concise.\"\n    },\n    \"tools\": [{\"tool_spec\": {\"type\": \"cortex_analyst_text_to_sql\", \"name\": \"Sales\", \"description\": \"Queries sales...\"}}],\n    \"tool_resources\": {\"Sales\": {\"semantic_model_file\": \"@stage\u002Fmodel.yaml\"}}\n}\n$spec$;\n```\n\nAgent rules:\n- Use `$spec$` delimiter (not `$$`).\n- `models` must be an object, not an array.\n- `tool_resources` is a separate top-level object, not nested inside tools.\n- Do NOT include empty\u002Fnull values in edit specs — clears existing values.\n- Tool descriptions are the #1 quality factor.\n- Never modify production agents directly — clone first.\n\n## Snowpark Python\n\n```python\nfrom snowflake.snowpark import Session\nimport os\n\nsession = Session.builder.configs({\n    \"account\": os.environ[\"SNOWFLAKE_ACCOUNT\"],\n    \"user\": os.environ[\"SNOWFLAKE_USER\"],\n    \"password\": os.environ[\"SNOWFLAKE_PASSWORD\"],\n    \"role\": \"my_role\", \"warehouse\": \"my_wh\",\n    \"database\": \"my_db\", \"schema\": \"my_schema\"\n}).create()\n```\n\n- Never hardcode credentials.\n- DataFrames are lazy — executed on `collect()`\u002F`show()`.\n- Do NOT use `collect()` on large DataFrames — process server-side.\n- Use **vectorized UDFs** (10-100x faster) for batch\u002FML workloads instead of scalar UDFs.\n\n## dbt on Snowflake\n\nDynamic table materialization (streaming\u002Fnear-real-time marts):\n```sql\n{{ config(materialized='dynamic_table', snowflake_warehouse='transforming', target_lag='1 hour') }}\n```\n\nIncremental materialization (large fact tables):\n```sql\n{{ config(materialized='incremental', unique_key='event_id') }}\n```\n\nSnowflake-specific configs (combine with any materialization):\n```sql\n{{ config(transient=true, copy_grants=true, query_tag='team_daily') }}\n```\n\n- Do NOT use `{{ this }}` without `{% if is_incremental() %}` guard.\n- Use `dynamic_table` materialization for streaming\u002Fnear-real-time marts.\n\n## Performance\n\n- **Cluster keys**: Only multi-TB tables, on WHERE\u002FJOIN\u002FGROUP BY columns.\n- **Search Optimization**: `ALTER TABLE t ADD SEARCH OPTIMIZATION ON EQUALITY(col);`\n- **Warehouse sizing**: Start X-Small, scale up. `AUTO_SUSPEND = 60`, `AUTO_RESUME = TRUE`.\n- **Separate warehouses** per workload.\n- Estimate AI costs first: `SELECT SUM(AI_COUNT_TOKENS('claude-4-sonnet', text)) FROM table;`\n\n## Security\n\n- Follow least-privilege RBAC. Use database roles for object-level grants.\n- Audit ACCOUNTADMIN regularly: `SHOW GRANTS OF ROLE ACCOUNTADMIN;`\n- Use network policies for IP allowlisting.\n- Use masking policies for PII columns and row access policies for multi-tenant isolation.\n\n## Common Error Patterns\n\n| Error | Cause | Fix |\n|-------|-------|-----|\n| \"Object does not exist\" | Wrong context or missing grants | Fully qualify names, check grants |\n| \"Invalid identifier\" in proc | Missing colon prefix | Use `:variable_name` |\n| \"Numeric value not recognized\" | VARIANT not cast | `src:field::NUMBER(10,2)` |\n| Task not running | Forgot to resume | `ALTER TASK ... RESUME` |\n| DT refresh failing | Schema change or tracking disabled | Use explicit columns, check change tracking |\n","# Snowflake Development\n\nYou are a Snowflake development expert. Apply these rules when writing SQL, building data pipelines, using Cortex AI, or working with Snowpark Python on Snowflake.\n\n## When to Use\n\n- When the user asks for help with Snowflake SQL, data pipelines, Cortex AI, or Snowpark Python.\n- When you need Snowflake-specific guidance for dbt, performance tuning, or security hardening.\n\n## SQL Best Practices\n\n### Naming and Style\n\n- Use `snake_case` for all identifiers. Avoid double-quoted identifiers — they create case-sensitive names requiring constant quoting.\n- Use CTEs (`WITH` clauses) over nested subqueries.\n- Use `CREATE OR REPLACE` for idempotent DDL.\n- Use explicit column lists — never `SELECT *` in production (Snowflake's columnar storage scans only referenced columns).\n\n### Stored Procedures — Colon Prefix Rule\n\nIn SQL stored procedures (BEGIN...END blocks), variables and parameters **must** use the colon `:` prefix inside SQL statements. Without it, Snowflake raises \"invalid identifier\" errors.\n\nBAD:\n```sql\nCREATE PROCEDURE my_proc(p_id INT) RETURNS STRING LANGUAGE SQL AS\nBEGIN\n    LET result STRING;\n    SELECT name INTO result FROM users WHERE id = p_id;\n    RETURN result;\nEND;\n```\n\nGOOD:\n```sql\nCREATE PROCEDURE my_proc(p_id INT) RETURNS STRING LANGUAGE SQL AS\nBEGIN\n    LET result STRING;\n    SELECT name INTO :result FROM users WHERE id = :p_id;\n    RETURN result;\nEND;\n```\n\n### Semi-Structured Data\n\n- VARIANT, OBJECT, ARRAY for JSON\u002FAvro\u002FParquet\u002FORC.\n- Access nested fields: `src:customer.name::STRING`. Always cast: `src:price::NUMBER(10,2)`.\n- VARIANT null vs SQL NULL: JSON `null` is stored as `\"null\"`. Use `STRIP_NULL_VALUE = TRUE` on load.\n- Flatten arrays: `SELECT f.value:name::STRING FROM my_table, LATERAL FLATTEN(input => src:items) f;`\n\n### MERGE for Upserts\n\n```sql\nMERGE INTO target t USING source s ON t.id = s.id\nWHEN MATCHED THEN UPDATE SET t.name = s.name, t.updated_at = CURRENT_TIMESTAMP()\nWHEN NOT MATCHED THEN INSERT (id, name, updated_at) VALUES (s.id, s.name, CURRENT_TIMESTAMP());\n```\n\n## Data Pipelines\n\n### Choosing Your Approach\n\n| Approach | When to Use |\n|----------|-------------|\n| Dynamic Tables | Declarative transformations. **Default choice.** Define the query, Snowflake handles refresh. |\n| Streams + Tasks | Imperative CDC. Use for procedural logic, stored procedure calls. |\n| Snowpipe | Continuous file loading from S3\u002FGCS\u002FAzure. |\n\n### Dynamic Tables\n\n```sql\nCREATE OR REPLACE DYNAMIC TABLE cleaned_events\n    TARGET_LAG = '5 minutes'\n    WAREHOUSE = transform_wh\n    AS\n    SELECT event_id, event_type, user_id, event_timestamp\n    FROM raw_events\n    WHERE event_type IS NOT NULL;\n```\n\nKey rules:\n- Set `TARGET_LAG` progressively: tighter at top, looser at bottom.\n- Incremental DTs **cannot** depend on Full refresh DTs.\n- `SELECT *` breaks on schema changes — use explicit column lists.\n- Change tracking must stay enabled on base tables.\n- Views cannot sit between two Dynamic Tables.\n\n### Streams and Tasks\n\n```sql\nCREATE OR REPLACE STREAM raw_stream ON TABLE raw_events;\n\nCREATE OR REPLACE TASK process_events\n    WAREHOUSE = transform_wh\n    SCHEDULE = 'USING CRON 0 *\u002F1 * * * America\u002FLos_Angeles'\n    WHEN SYSTEM$STREAM_HAS_DATA('raw_stream')\n    AS INSERT INTO cleaned_events SELECT ... FROM raw_stream;\n\n-- Tasks start SUSPENDED — you MUST resume them\nALTER TASK process_events RESUME;\n```\n\n## Cortex AI\n\n### Function Reference\n\n| Function | Purpose |\n|----------|---------|\n| `AI_COMPLETE` | LLM completion (text, images, documents) |\n| `AI_CLASSIFY` | Classify into categories (up to 500 labels) |\n| `AI_FILTER` | Boolean filter on text\u002Fimages |\n| `AI_EXTRACT` | Structured extraction from text\u002Fimages\u002Fdocuments |\n| `AI_SENTIMENT` | Sentiment score (-1 to 1) |\n| `AI_PARSE_DOCUMENT` | OCR or layout extraction |\n| `AI_REDACT` | PII removal |\n\n**Deprecated (do NOT use):** `COMPLETE`, `CLASSIFY_TEXT`, `EXTRACT_ANSWER`, `PARSE_DOCUMENT`, `SUMMARIZE`, `TRANSLATE`, `SENTIMENT`, `EMBED_TEXT_768`.\n\n### TO_FILE — Common Error Source\n\nStage path and filename are **SEPARATE** arguments:\n\n```sql\n-- BAD: TO_FILE('@stage\u002Ffile.pdf')\n-- GOOD:\nTO_FILE('@db.schema.mystage', 'invoice.pdf')\n```\n\n### Use AI_CLASSIFY for Classification (Not AI_COMPLETE)\n\n```sql\nSELECT AI_CLASSIFY(ticket_text,\n    ['billing', 'technical', 'account']):labels[0]::VARCHAR AS category\nFROM tickets;\n```\n\n### Cortex Agents\n\n```sql\nCREATE OR REPLACE AGENT my_db.my_schema.sales_agent\nFROM SPECIFICATION $spec$\n{\n    \"models\": {\"orchestration\": \"auto\"},\n    \"instructions\": {\n        \"orchestration\": \"You are SalesBot...\",\n        \"response\": \"Be concise.\"\n    },\n    \"tools\": [{\"tool_spec\": {\"type\": \"cortex_analyst_text_to_sql\", \"name\": \"Sales\", \"description\": \"Queries sales...\"}}],\n    \"tool_resources\": {\"Sales\": {\"semantic_model_file\": \"@stage\u002Fmodel.yaml\"}}\n}\n$spec$;\n```\n\nAgent rules:\n- Use `$spec$` delimiter (not `$$`).\n- `models` must be an object, not an array.\n- `tool_resources` is a separate top-level object, not nested inside tools.\n- Do NOT include empty\u002Fnull values in edit specs — clears existing values.\n- Tool descriptions are the #1 quality factor.\n- Never modify production agents directly — clone first.\n\n## Snowpark Python\n\n```python\nfrom snowflake.snowpark import Session\nimport os\n\nsession = Session.builder.configs({\n    \"account\": os.environ[\"SNOWFLAKE_ACCOUNT\"],\n    \"user\": os.environ[\"SNOWFLAKE_USER\"],\n    \"password\": os.environ[\"SNOWFLAKE_PASSWORD\"],\n    \"role\": \"my_role\", \"warehouse\": \"my_wh\",\n    \"database\": \"my_db\", \"schema\": \"my_schema\"\n}).create()\n```\n\n- Never hardcode credentials.\n- DataFrames are lazy — executed on `collect()`\u002F`show()`.\n- Do NOT use `collect()` on large DataFrames — process server-side.\n- Use **vectorized UDFs** (10-100x faster) for batch\u002FML workloads instead of scalar UDFs.\n\n## dbt on Snowflake\n\nDynamic table materialization (streaming\u002Fnear-real-time marts):\n```sql\n{{ config(materialized='dynamic_table', snowflake_warehouse='transforming', target_lag='1 hour') }}\n```\n\nIncremental materialization (large fact tables):\n```sql\n{{ config(materialized='incremental', unique_key='event_id') }}\n```\n\nSnowflake-specific configs (combine with any materialization):\n```sql\n{{ config(transient=true, copy_grants=true, query_tag='team_daily') }}\n```\n\n- Do NOT use `{{ this }}` without `{% if is_incremental() %}` guard.\n- Use `dynamic_table` materialization for streaming\u002Fnear-real-time marts.\n\n## Performance\n\n- **Cluster keys**: Only multi-TB tables, on WHERE\u002FJOIN\u002FGROUP BY columns.\n- **Search Optimization**: `ALTER TABLE t ADD SEARCH OPTIMIZATION ON EQUALITY(col);`\n- **Warehouse sizing**: Start X-Small, scale up. `AUTO_SUSPEND = 60`, `AUTO_RESUME = TRUE`.\n- **Separate warehouses** per workload.\n- Estimate AI costs first: `SELECT SUM(AI_COUNT_TOKENS('claude-4-sonnet', text)) FROM table;`\n\n## Security\n\n- Follow least-privilege RBAC. Use database roles for object-level grants.\n- Audit ACCOUNTADMIN regularly: `SHOW GRANTS OF ROLE ACCOUNTADMIN;`\n- Use network policies for IP allowlisting.\n- Use masking policies for PII columns and row access policies for multi-tenant isolation.\n\n## Common Error Patterns\n\n| Error | Cause | Fix |\n|-------|-------|-----|\n| \"Object does not exist\" | Wrong context or missing grants | Fully qualify names, check grants |\n| \"Invalid identifier\" in proc | Missing colon prefix | Use `:variable_name` |\n| \"Numeric value not recognized\" | VARIANT not cast | `src:field::NUMBER(10,2)` |\n| Task not running | Forgot to resume | `ALTER TASK ... RESUME` |\n| DT refresh failing | Schema change or tracking disabled | Use explicit columns, check change tracking |\n",{"name":5,"risk":42,"source":28,"category":30,"date_added":49,"description":7},"2026-03-24","main","a50a3aa6b39fb0e1b7db88bef1bfc9c93606e126","modules\u002Fagent_skills\u002Fawesome-skills\u002Fplaybooks\u002Fsnowflake-development",0,"https:\u002F\u002Fgithub.com\u002FSam-06060\u002Fjarvis-assistant","https:\u002F\u002Fgithub.com\u002FSam-06060","Mobile Application Developer | Kotlin | Flutter, KMP, Swfit, Android,Swift UI | Building at Saar It Resources | Creator of Jarvis (AI Assistant)","2026-06-23 05:13:38",{"source":8,"skillName":5,"commands":59,"prompt":69,"zipAvailable":70},[60,63,66],{"tool":61,"command":62},"npx","npx skills add Sam-06060\u002Fjarvis-assistant --skill snowflake-development",{"tool":64,"command":65},"bunx","bunx skills add Sam-06060\u002Fjarvis-assistant --skill snowflake-development",{"tool":67,"command":68},"pnpm","pnpm dlx skills add Sam-06060\u002Fjarvis-assistant --skill snowflake-development","安装技能，技能地址：https:\u002F\u002Fgithub.com\u002FSam-06060\u002Fjarvis-assistant\u002Fblob\u002Fmain\u002Fmodules\u002Fagent_skills\u002Fawesome-skills\u002Fplaybooks\u002Fsnowflake-development\u002FSKILL.md",true,[],[73,86,102,129,147,173],{"skillNo":74,"name":75,"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":76,"categories":77,"keywords":83,"publishedAt":44},"01M6GDRVS6FXX3ESH0C9DW01C0","test_skill","https:\u002F\u002Fgithub.com\u002FSam-06060\u002Fjarvis-assistant\u002Fblob\u002Fmain\u002Fscratch\u002Ftest_skill\u002FSKILL.md",[78],{"categoryNo":79,"categoryName":80,"taxonomyType":81,"taxonomyTypeDesc":82},"01JBSEEDCAT000000000000008","测试与质量","SCENARIO","使用场景",[84,85],"Test Skill","test",{"skillNo":87,"name":88,"nameZh":6,"description":89,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":90,"categories":91,"keywords":92,"publishedAt":44},"01M6GDRQ40HX22MA6XWC31RHHK","zustand-store-ts","Create Zustand stores following established patterns with proper TypeScript types and middleware.","https:\u002F\u002Fgithub.com\u002FSam-06060\u002Fjarvis-assistant\u002Fblob\u002Fmain\u002Fmodules\u002Fagent_skills\u002Fawesome-skills\u002Fplaybooks\u002Fzustand-store-ts\u002FSKILL.md",[],[93,94,95,96,97,98,99,28,100,101],"zustand store ts","zustand","store","with","types","middleware","patterns","create","typescript",{"skillNo":103,"name":104,"nameZh":6,"description":105,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":106,"categories":107,"keywords":111,"publishedAt":44},"01M6GDRKEA0WE670SPFWX5GKCN","zoom-automation","Automate Zoom meeting creation, management, recordings, webinars, and participant tracking via Rube MCP (Composio). Always search tools first for current schemas.","https:\u002F\u002Fgithub.com\u002FSam-06060\u002Fjarvis-assistant\u002Fblob\u002Fmain\u002Fmodules\u002Fagent_skills\u002Fawesome-skills\u002Fplaybooks\u002Fzoom-automation\u002FSKILL.md",[108],{"categoryNo":109,"categoryName":110,"taxonomyType":81,"taxonomyTypeDesc":82},"01JBSEEDCAT000000000000023","Skill与智能体开发",[112,113,114,115,116,117,118,119,120,121,122,123,124,125,28,126,127,128],"automation","zoom automation","zoom","first","Tools","search","MCP","via","meeting","automate","critical","creation","webinars","composio","recordings","management","tracking",{"skillNo":130,"name":131,"nameZh":6,"description":132,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":133,"categories":134,"keywords":136,"publishedAt":44},"01M6GDRFS1452PC71JQ38S24HR","zoho-crm-automation","Automate Zoho CRM tasks via Rube MCP (Composio): create\u002Fupdate records, search contacts, manage leads, and convert leads. Always search tools first for current schemas.","https:\u002F\u002Fgithub.com\u002FSam-06060\u002Fjarvis-assistant\u002Fblob\u002Fmain\u002Fmodules\u002Fagent_skills\u002Fawesome-skills\u002Fplaybooks\u002Fzoho-crm-automation\u002FSKILL.md",[135],{"categoryNo":109,"categoryName":110,"taxonomyType":81,"taxonomyTypeDesc":82},[137,112,138,139,140,141,142,28,117,143,125,144,122,121,116,145,100,37,118,146],"crm automation","zoho crm","crm","zoho crm automation","zoho","leads","contacts","records","update","manage",{"skillNo":148,"name":149,"nameZh":6,"description":150,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":151,"categories":152,"keywords":156,"publishedAt":44},"01M6GDRCKQBAVTGHX5XBH26KPZ","zod-validation-expert","Expert in Zod — TypeScript-first schema validation. Covers parsing, custom errors, refinements, type inference, and integration with React Hook Form, Next.js, and tRPC.","https:\u002F\u002Fgithub.com\u002FSam-06060\u002Fjarvis-assistant\u002Fblob\u002Fmain\u002Fmodules\u002Fagent_skills\u002Fawesome-skills\u002Fplaybooks\u002Fzod-validation-expert\u002FSKILL.md",[153],{"categoryNo":154,"categoryName":155,"taxonomyType":81,"taxonomyTypeDesc":82},"01JBSEEDCAT000000000000009","前端开发",[157,158,159,160,161,101,42,162,163,164,165,166,96,167,168,169,170,28,171,172],"expert","zod","zod validation expert","validation","react","parsing","errors","schema validation","react hook form","hook","trpc","form","type","next","schema","Next.js",{"skillNo":174,"name":175,"nameZh":6,"description":176,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":177,"categories":178,"keywords":180,"publishedAt":44},"01M6GDR658B08K4MY0RWD4A6EH","zeroize-audit","Detects missing zeroization of sensitive data in source code and identifies zeroization removed by compiler optimizations, with assembly-level analysis, and control-flow verification. Use for auditing C\u002FC++\u002FRust code handling secrets, keys, passwords, or other sensitive data.","https:\u002F\u002Fgithub.com\u002FSam-06060\u002Fjarvis-assistant\u002Fblob\u002Fmain\u002Fmodules\u002Fagent_skills\u002Fawesome-skills\u002Fplaybooks\u002Fzeroize-audit\u002FSKILL.md",[179],{"categoryNo":109,"categoryName":110,"taxonomyType":81,"taxonomyTypeDesc":82},[181,182,183,184,185,186,187,188,28,189,190,191,192,193,34,194,195,196,197,118],"zeroize audit","audit","write","passwords","get","project","c++","activate","assembly","read","Bash","secrets","analysis","flow","verification","code","rust"]