[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"skill:01M7ADFKEV64ASH6HHSSAJWR7J":3,"skill-same:01M7ADFKEV64ASH6HHSSAJWR7J":49},{"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":18,"publishedAt":19,"linkOnly":20,"markdownContent":21,"markdownBody":22,"frontMatter":23,"refName":27,"commitSha":28,"skillDirectory":29,"forksCount":30,"repositoryHtmlUrl":31,"repositoryHomepageUrl":32,"ownerHtmlUrl":33,"ownerBlogUrl":6,"ownerDescription":6,"updatedAt":34,"install":35,"resources":48},"01M7ADFKEV64ASH6HHSSAJWR7J","data-analyst",null,"Use when the user asks to query a database, analyze data, create charts\u002Fvisualizations, explore data patterns, or asks business questions about data. Replicates Devin cloud's Data Analyst Agent (DANA) for the CLI — SQL-first exploration, schema-aware querying, and seaborn-style visualizations via MCP data sources.","Leostruka\u002Fdevin-bundle","Leostruka","https:\u002F\u002Favatars.githubusercontent.com\u002Fu\u002F81370685?v=4","01M7AD8MAK63VDNAWRDRRRW04N","leandro ostruka","01M7AD8MBS65YDS1KMMV7YPM07",0,"MIT","https:\u002F\u002Fgithub.com\u002FLeostruka\u002Fdevin-bundle\u002Fblob\u002Fmain\u002Fskills\u002Fdata-analyst\u002FSKILL.md",[],[],"2026-11-15 14:19:17",false,"---\nname: data-analyst\ndescription: Use when the user asks to query a database, analyze data, create charts\u002Fvisualizations, explore data patterns, or asks business questions about data. Replicates Devin cloud's Data Analyst Agent (DANA) for the CLI — SQL-first exploration, schema-aware querying, and seaborn-style visualizations via MCP data sources.\ntriggers: [user, model]\n---\n\n# Data Analyst (CLI replica of DANA — Data ANAlyst Agent)\n\n## What this replicates\n\nCloud Devin has a **Data Analyst Agent** (DANA) — a specialized agent\noptimized for querying databases, analyzing data, and creating\nvisualizations. It maintains a \"Database Knowledge\" note with schema\ndocs, auto-references it before queries, and outputs formatted tables,\ncharts, and plain-English interpretations.\n\nThe CLI has no \"Data\" agent mode. This skill fills that gap by\nproviding the DANA workflow as an invocable procedure using MCP data\nsources already configured in `mcp_config.json`.\n\n**Sources:**\n- docs.devin.ai\u002Fwork-with-devin\u002Fdata-analyst (DANA overview)\n- docs.devin.ai\u002Fuse-cases\u002Fgallery\u002Fdana-slack-data-analyst (Slack usage)\n- docs.devin.ai\u002Frelease-notes\u002F2025 (DANA release)\n- devin.ai\u002Fai-data-analyst-1\u002F (build-your-own guide)\n\n## When to Use\n\n- \"Query the database for X\"\n- \"How many users signed up last week?\"\n- \"Show me a chart of daily revenue\"\n- \"Analyze patterns in the orders table\"\n- \"What's the churn rate by cohort?\"\n- Any SQL\u002Fdata analysis task against an MCP-connected data source\n\n## When NOT to Use\n\n- No MCP data source is configured — DANA requires a connected database\n- The question is about code, not data — use `research` or `grep`\n- The task needs code changes, not analysis — use Normal mode\n- Quick file inspection (CSV\u002FJSON on disk) — use `read` + `exec` directly\n\n## Prerequisites\n\n1. At least one MCP data source configured in `mcp_config.json`\n   (PostgreSQL, Redshift, Snowflake, BigQuery, SQLite, etc.)\n2. Verify connectivity: `mcp_list_tools` for the data source server\n3. If no data source is configured, say so and stop — do not guess\n   schema or fabricate data\n\n## Procedure\n\n### Step 1 — Schema discovery (Database Knowledge)\n\nDANA maintains a \"Database Knowledge\" note. In the CLI, build it\non-the-fly:\n\n1. `mcp_call_tool` to list tables (`SELECT table_name FROM\n   information_schema.tables` or the MCP's schema tool)\n2. For relevant tables, describe columns (`DESCRIBE \u003Ctable>` or\n   `SELECT column_name, data_type FROM information_schema.columns\n   WHERE table_name = '\u003Ctable>'`)\n3. Cache findings in a file: `write` to `.devin\u002Fdb-schema.md`\n4. On subsequent queries, `read` `.devin\u002Fdb-schema.md` first — only\n   re-discover if the schema may have changed\n\nOutput: schema doc with table names, columns, types, and relationships.\n\n### Step 1b: Business glossary (term -> definition)\n\nSchema says what exists, not what it means. A correct-looking query\nstill returns the wrong number when \"revenue\" should exclude\ncancelled orders. Maintain `.devin\u002Fdb-glossary.md`:\n\n```markdown\n| term | definition (SQL-ready) | certified_by | source |\n|------|----------------------|--------------|--------|\n| revenue | sum(orders.total) WHERE status != 'cancelled' | @user | ticket #123 |\n```\n\n1. `read` `.devin\u002Fdb-glossary.md` before formulating queries; if a\n   business term in the question has no row, ask the user once and\n   record the answer.\n2. Definitions are SQL-ready fragments, not prose: they must map to\n   filters\u002Fjoins you can paste into the query.\n3. New terms only enter the glossary after user confirmation\n   (`certified_by`); never invent definitions.\n4. When the user corrects a number (\"that's not our churn\"), fix the\n   glossary row first, then re-run; the correction persists.\n5. Always return the generating query with the answer, and when the\n   data cannot answer the question, say so instead of approximating\n   (an analyst who abstains beats one who fabricates).\n\n### Step 2 — Query formulation\n\n1. Translate the user's natural-language question into SQL\n2. Start with a `SELECT ... LIMIT 10` to validate the query and\n   preview results\n3. Check for:\n   - Correct table joins (use schema doc from Step 1)\n   - Date\u002Ftime handling (timezone awareness — DANA learns from\n     feedback; here, ask the user if timezone is ambiguous)\n   - NULL handling (use `COALESCE` or filter explicitly)\n   - Performance (add `LIMIT` for exploratory queries)\n\nOutput: validated SQL query + preview results.\n\n### Step 3 — Full query execution\n\n1. Run the full query via `mcp_call_tool`\n2. If the result is large (> 100 rows), write to a file\n   (`query-results-\u003Ctimestamp>.csv`) and summarize in chat\n3. Format output as a Markdown table for small results (\u003C 20 rows)\n\nOutput: result set (table or file reference) + row count.\n\n### Step 4 — Analysis & interpretation\n\n1. Summarize key findings in plain English\n2. Identify patterns, anomalies, or trends\n3. If the user asked for metrics, compute them explicitly:\n   - Counts, sums, averages, medians, percentiles\n   - Rates (conversion, churn, growth) with clear denominators\n   - Cohort breakdowns if relevant\n4. Compare to expectations: \"This is X% higher\u002Flower than typical\"\n\nOutput: numbered findings with the supporting query\u002Frow cited.\n\n### Step 5 — Visualization (if requested)\n\nDANA uses seaborn for charts. In the CLI:\n\n1. Write a Python script to generate the chart:\n   ```python\n   import matplotlib\n   matplotlib.use('Agg')  # headless\n   import matplotlib.pyplot as plt\n   import pandas as pd\n   # ... load data, plot, save\n   plt.savefig('chart-\u003Cname>.png', dpi=150, bbox_inches='tight')\n   ```\n2. `exec` the script\n3. `read` the PNG to display it inline\n4. Report the file path for later reference\n\nOutput: chart file path + inline display + 1-sentence caption.\n\n## Output format\n\n```markdown\n## Data Analysis: \u003Cquestion>\n\n### Schema used\n- `\u003Ctable>`: \u003Ccolumns relevant to this query>\n\n### Query\n```sql\n\u003CSQL>\n```\n\n### Results\n\u003CMarkdown table or file reference>\n\n### Findings\n1. \u003Cfinding with data citation>\n2. ...\n\n### Chart\n\u003Cif requested: file path + inline image>\n```\n\n## Up-to-date docs\n\nIf the user asks about a specific pandas, seaborn, matplotlib, SQLAlchemy, or plotting API, invoke `context7` before writing code. This is especially useful for seaborn-style visualizations where API signatures change between versions.\n\n## CLI-specific notes\n\n- No persistent Database Knowledge: cloud DANA persists schema docs\n  across sessions. The CLI caches to `.devin\u002Fdb-schema.md` — check\n  if it exists, re-discover if stale.\n- No Slack integration: cloud DANA responds in Slack threads. The\n  CLI outputs to the terminal; use `write` for large results.\n- MCP-dependent: this skill only works if a data MCP server is\n  configured. Check `mcp_config.json` and `mcp_list_servers` first.\n- Auto-feedback learning via glossary: cloud DANA learns from user\n  corrections (\"remember that 'active user' means logged in within 7\n  days\"). The CLI persists them in `.devin\u002Fdb-glossary.md` (Step 1b):\n  corrections become certified, SQL-ready definitions that survive\n  across sessions.\n- Schema safety: never run `DROP`, `DELETE`, `UPDATE`, `INSERT`, or\n  any mutating SQL unless the user explicitly asks. DANA is\n  read-only by design; this skill follows the same constraint.\n\n## Cross-skills\n\n- `architecture-diagrams` \u002F mermaid — when the analysis output needs a diagram artifact (ER, flow, topology) for reports.\n\n  any mutating SQL unless the user explicitly asks. DANA is\n  read-only by design; this skill follows the same constraint.\n","# Data Analyst (CLI replica of DANA — Data ANAlyst Agent)\n\n## What this replicates\n\nCloud Devin has a **Data Analyst Agent** (DANA) — a specialized agent\noptimized for querying databases, analyzing data, and creating\nvisualizations. It maintains a \"Database Knowledge\" note with schema\ndocs, auto-references it before queries, and outputs formatted tables,\ncharts, and plain-English interpretations.\n\nThe CLI has no \"Data\" agent mode. This skill fills that gap by\nproviding the DANA workflow as an invocable procedure using MCP data\nsources already configured in `mcp_config.json`.\n\n**Sources:**\n- docs.devin.ai\u002Fwork-with-devin\u002Fdata-analyst (DANA overview)\n- docs.devin.ai\u002Fuse-cases\u002Fgallery\u002Fdana-slack-data-analyst (Slack usage)\n- docs.devin.ai\u002Frelease-notes\u002F2025 (DANA release)\n- devin.ai\u002Fai-data-analyst-1\u002F (build-your-own guide)\n\n## When to Use\n\n- \"Query the database for X\"\n- \"How many users signed up last week?\"\n- \"Show me a chart of daily revenue\"\n- \"Analyze patterns in the orders table\"\n- \"What's the churn rate by cohort?\"\n- Any SQL\u002Fdata analysis task against an MCP-connected data source\n\n## When NOT to Use\n\n- No MCP data source is configured — DANA requires a connected database\n- The question is about code, not data — use `research` or `grep`\n- The task needs code changes, not analysis — use Normal mode\n- Quick file inspection (CSV\u002FJSON on disk) — use `read` + `exec` directly\n\n## Prerequisites\n\n1. At least one MCP data source configured in `mcp_config.json`\n   (PostgreSQL, Redshift, Snowflake, BigQuery, SQLite, etc.)\n2. Verify connectivity: `mcp_list_tools` for the data source server\n3. If no data source is configured, say so and stop — do not guess\n   schema or fabricate data\n\n## Procedure\n\n### Step 1 — Schema discovery (Database Knowledge)\n\nDANA maintains a \"Database Knowledge\" note. In the CLI, build it\non-the-fly:\n\n1. `mcp_call_tool` to list tables (`SELECT table_name FROM\n   information_schema.tables` or the MCP's schema tool)\n2. For relevant tables, describe columns (`DESCRIBE \u003Ctable>` or\n   `SELECT column_name, data_type FROM information_schema.columns\n   WHERE table_name = '\u003Ctable>'`)\n3. Cache findings in a file: `write` to `.devin\u002Fdb-schema.md`\n4. On subsequent queries, `read` `.devin\u002Fdb-schema.md` first — only\n   re-discover if the schema may have changed\n\nOutput: schema doc with table names, columns, types, and relationships.\n\n### Step 1b: Business glossary (term -> definition)\n\nSchema says what exists, not what it means. A correct-looking query\nstill returns the wrong number when \"revenue\" should exclude\ncancelled orders. Maintain `.devin\u002Fdb-glossary.md`:\n\n```markdown\n| term | definition (SQL-ready) | certified_by | source |\n|------|----------------------|--------------|--------|\n| revenue | sum(orders.total) WHERE status != 'cancelled' | @user | ticket #123 |\n```\n\n1. `read` `.devin\u002Fdb-glossary.md` before formulating queries; if a\n   business term in the question has no row, ask the user once and\n   record the answer.\n2. Definitions are SQL-ready fragments, not prose: they must map to\n   filters\u002Fjoins you can paste into the query.\n3. New terms only enter the glossary after user confirmation\n   (`certified_by`); never invent definitions.\n4. When the user corrects a number (\"that's not our churn\"), fix the\n   glossary row first, then re-run; the correction persists.\n5. Always return the generating query with the answer, and when the\n   data cannot answer the question, say so instead of approximating\n   (an analyst who abstains beats one who fabricates).\n\n### Step 2 — Query formulation\n\n1. Translate the user's natural-language question into SQL\n2. Start with a `SELECT ... LIMIT 10` to validate the query and\n   preview results\n3. Check for:\n   - Correct table joins (use schema doc from Step 1)\n   - Date\u002Ftime handling (timezone awareness — DANA learns from\n     feedback; here, ask the user if timezone is ambiguous)\n   - NULL handling (use `COALESCE` or filter explicitly)\n   - Performance (add `LIMIT` for exploratory queries)\n\nOutput: validated SQL query + preview results.\n\n### Step 3 — Full query execution\n\n1. Run the full query via `mcp_call_tool`\n2. If the result is large (> 100 rows), write to a file\n   (`query-results-\u003Ctimestamp>.csv`) and summarize in chat\n3. Format output as a Markdown table for small results (\u003C 20 rows)\n\nOutput: result set (table or file reference) + row count.\n\n### Step 4 — Analysis & interpretation\n\n1. Summarize key findings in plain English\n2. Identify patterns, anomalies, or trends\n3. If the user asked for metrics, compute them explicitly:\n   - Counts, sums, averages, medians, percentiles\n   - Rates (conversion, churn, growth) with clear denominators\n   - Cohort breakdowns if relevant\n4. Compare to expectations: \"This is X% higher\u002Flower than typical\"\n\nOutput: numbered findings with the supporting query\u002Frow cited.\n\n### Step 5 — Visualization (if requested)\n\nDANA uses seaborn for charts. In the CLI:\n\n1. Write a Python script to generate the chart:\n   ```python\n   import matplotlib\n   matplotlib.use('Agg')  # headless\n   import matplotlib.pyplot as plt\n   import pandas as pd\n   # ... load data, plot, save\n   plt.savefig('chart-\u003Cname>.png', dpi=150, bbox_inches='tight')\n   ```\n2. `exec` the script\n3. `read` the PNG to display it inline\n4. Report the file path for later reference\n\nOutput: chart file path + inline display + 1-sentence caption.\n\n## Output format\n\n```markdown\n## Data Analysis: \u003Cquestion>\n\n### Schema used\n- `\u003Ctable>`: \u003Ccolumns relevant to this query>\n\n### Query\n```sql\n\u003CSQL>\n```\n\n### Results\n\u003CMarkdown table or file reference>\n\n### Findings\n1. \u003Cfinding with data citation>\n2. ...\n\n### Chart\n\u003Cif requested: file path + inline image>\n```\n\n## Up-to-date docs\n\nIf the user asks about a specific pandas, seaborn, matplotlib, SQLAlchemy, or plotting API, invoke `context7` before writing code. This is especially useful for seaborn-style visualizations where API signatures change between versions.\n\n## CLI-specific notes\n\n- No persistent Database Knowledge: cloud DANA persists schema docs\n  across sessions. The CLI caches to `.devin\u002Fdb-schema.md` — check\n  if it exists, re-discover if stale.\n- No Slack integration: cloud DANA responds in Slack threads. The\n  CLI outputs to the terminal; use `write` for large results.\n- MCP-dependent: this skill only works if a data MCP server is\n  configured. Check `mcp_config.json` and `mcp_list_servers` first.\n- Auto-feedback learning via glossary: cloud DANA learns from user\n  corrections (\"remember that 'active user' means logged in within 7\n  days\"). The CLI persists them in `.devin\u002Fdb-glossary.md` (Step 1b):\n  corrections become certified, SQL-ready definitions that survive\n  across sessions.\n- Schema safety: never run `DROP`, `DELETE`, `UPDATE`, `INSERT`, or\n  any mutating SQL unless the user explicitly asks. DANA is\n  read-only by design; this skill follows the same constraint.\n\n## Cross-skills\n\n- `architecture-diagrams` \u002F mermaid — when the analysis output needs a diagram artifact (ER, flow, topology) for reports.\n\n  any mutating SQL unless the user explicitly asks. DANA is\n  read-only by design; this skill follows the same constraint.\n",{"name":5,"triggers":24,"description":7},[25,26],"user","model","main","02b95ddb62959a00b3c31442c2046aca0d19563c","skills\u002Fdata-analyst",1,"https:\u002F\u002Fgithub.com\u002FLeostruka\u002Fdevin-bundle","https:\u002F\u002Fleostruka.github.io\u002Fdevin-bundle\u002F","https:\u002F\u002Fgithub.com\u002FLeostruka","2026-11-15 05:19:58",{"source":8,"skillName":5,"commands":36,"prompt":46,"zipAvailable":47},[37,40,43],{"tool":38,"command":39},"npx","npx skills add Leostruka\u002Fdevin-bundle --skill data-analyst",{"tool":41,"command":42},"bunx","bunx skills add Leostruka\u002Fdevin-bundle --skill data-analyst",{"tool":44,"command":45},"pnpm","pnpm dlx skills add Leostruka\u002Fdevin-bundle --skill data-analyst","安装技能，技能地址：https:\u002F\u002Fgithub.com\u002FLeostruka\u002Fdevin-bundle\u002Fblob\u002Fmain\u002Fskills\u002Fdata-analyst\u002FSKILL.md",true,[],[50,57,64,71,78,85],{"skillNo":51,"name":52,"nameZh":6,"description":53,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":54,"categories":55,"keywords":56,"publishedAt":19},"01M7E0K3MG2XC4FSRV0MK6SFR1","montador-de-ideias","Use when assembling, expanding, or elevating a raw project idea or initial prompt into an ultra-detailed, first-principles dossier and compiled master prompt with journalistic OSINT market research, Tech Lead and Staff Architect justifications, atomic and modular hardening\u002Foptimization, and high-impact contact surfaces.","https:\u002F\u002Fgithub.com\u002FLeostruka\u002Fdevin-bundle\u002Fblob\u002Fmain\u002Fskills\u002Fmontador-de-ideias\u002FSKILL.md",[],[],{"skillNo":58,"name":59,"nameZh":6,"description":60,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":61,"categories":62,"keywords":63,"publishedAt":19},"01M7E0J7JJWZ8QMK01RZ3B3C9Z","git-github-adaptive-engineering","Use when any task touches git history, GitHub issues\u002FPRs\u002Freleases\u002FCI, repo governance, or branch and merge decisions. Runs the Fase Zero situational-awareness battery, picks one of five delivery flows via the adaptive decision engine, and enforces commit\u002FPR information-density standards. Orchestrates the gh, git-workflows, github-actions, pr, and debug\u002Ffinish skills.","https:\u002F\u002Fgithub.com\u002FLeostruka\u002Fdevin-bundle\u002Fblob\u002Fmain\u002Fskills\u002Fgit-github-adaptive-engineering\u002FSKILL.md",[],[],{"skillNo":65,"name":66,"nameZh":6,"description":67,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":68,"categories":69,"keywords":70,"publishedAt":19},"01M7E0GJFRPFEVQQMXEM58EWDM","adaptive-agenda-calendar-routine-engine","Use when planning or executing work across hours, days, weeks, or sprints. Turns the calendar into a strict time-blocked agenda (HH:MM-HH:MM blocks carrying a routine profile, expected inputs, and a handoff output artifact), runs the 5-stage cognitive flow (Radar and Hunt -> Triage plus Steve Jobs conception -> workbench manifest -> >=32-cycle loop -> Close plus Open-Minded Scrum), and unfolds macro calendar milestones into micro agenda blocks through extensions\u002Fgcal\u002Fwrapper.py.","https:\u002F\u002Fgithub.com\u002FLeostruka\u002Fdevin-bundle\u002Fblob\u002Fmain\u002Fskills\u002Fadaptive-agenda-calendar-routine-engine\u002FSKILL.md",[],[],{"skillNo":72,"name":73,"nameZh":6,"description":74,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":75,"categories":76,"keywords":77,"publishedAt":19},"01M7AE2K9FTY0BVS48N0A9JFKF","demo","Use when demonstrating a skill in a fixture project.","https:\u002F\u002Fgithub.com\u002FLeostruka\u002Fdevin-bundle\u002Fblob\u002Fmain\u002Ftests\u002Ffixtures\u002Fdevin-config\u002Fproject\u002F.devin\u002Fskills\u002Fdemo\u002FSKILL.md",[],[],{"skillNo":79,"name":80,"nameZh":6,"description":81,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":82,"categories":83,"keywords":84,"publishedAt":19},"01M7AE2G3DP38PTV3B1N7MW5TS","duplicate-skill","Use when testing duplicate skill name detection.","https:\u002F\u002Fgithub.com\u002FLeostruka\u002Fdevin-bundle\u002Fblob\u002Fmain\u002Ftests\u002Ffixtures\u002Fdevin-config\u002Fproject\u002F.devin\u002Fskills\u002Fbeta\u002FSKILL.md",[],[],{"skillNo":86,"name":80,"nameZh":6,"description":81,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":87,"categories":88,"keywords":89,"publishedAt":19},"01M7AE2DBR8ZHT6T875MJ392GK","https:\u002F\u002Fgithub.com\u002FLeostruka\u002Fdevin-bundle\u002Fblob\u002Fmain\u002Ftests\u002Ffixtures\u002Fdevin-config\u002Fproject\u002F.devin\u002Fskills\u002Falpha\u002FSKILL.md",[],[]]