[{"data":1,"prerenderedAt":-1},["ShallowReactive",2],{"skill:01M6BXFDVZX64VP8N0D5AYMD53":3,"skill-same:01M6BXFDVZX64VP8N0D5AYMD53":68},{"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":30,"linkOnly":31,"markdownContent":32,"markdownBody":33,"frontMatter":34,"refName":35,"commitSha":36,"skillDirectory":37,"forksCount":38,"repositoryHtmlUrl":39,"repositoryHomepageUrl":6,"ownerHtmlUrl":40,"ownerBlogUrl":41,"ownerDescription":42,"updatedAt":43,"install":44,"resources":57},"01M6BXFDVZX64VP8N0D5AYMD53","effort-map",null,"Read the current project's current and prior Claude Code or Codex sessions, extract every prompt, score five effort metrics 0-100 with reasons, estimate average tokens and time per session, and render a self-contained light-theme HTML report. Use when the user runs \u002Feffort-map or asks how much effort, thought, bug-fixing, UX tuning, architecture care, or copy-paste slop went into a project.","diegopacheco\u002Fai-playground","diegopacheco","https:\u002F\u002Favatars.githubusercontent.com\u002Fu\u002F121278?v=4","01M6BXCP8P7GGSJ8M1W2MFDTGT","Diego Pacheco","01M6BXCPD3WM51H465XW9YM4BV",21,"Unlicense","https:\u002F\u002Fgithub.com\u002Fdiegopacheco\u002Fai-playground\u002Fblob\u002Fmain\u002Fpocs\u002Fagent-skill-effot-mapper\u002Feffort-map\u002FSKILL.md",[],[19,20,21,22,23,24,25,26,27,28,29],"effort map","codex","sessions","architecture","code","report","ux","metrics","tuning","how","html report","2026-11-10 10:12:30",false,"---\nname: effort-map\ndescription: Read the current project's current and prior Claude Code or Codex sessions, extract every prompt, score five effort metrics 0-100 with reasons, estimate average tokens and time per session, and render a self-contained light-theme HTML report. Use when the user runs \u002Feffort-map or asks how much effort, thought, bug-fixing, UX tuning, architecture care, or copy-paste slop went into a project.\n---\n\n# Effort Map\n\nScore how much real effort went into the current project by reading its agent sessions, then produce `effort-DD-MM-YYYY-report.html`.\n\n## Workflow\n\n1. Detect the active agent: `claude` when running in Claude Code, `codex` when running in Codex.\n2. Collect the sessions for the current project. From this skill directory run:\n   ```\n   python3 scripts\u002Fcollect_sessions.py --project \"$PWD\" \\\n     --output \u002Ftmp\u002Feffort-map-sessions.jsonl --stats \u002Ftmp\u002Feffort-map-stats.json\n   ```\n   Add `--agent claude` or `--agent codex` only if automatic detection fails. The command prints token and time stats and writes the normalized transcript.\n3. Treat the current folder as the project boundary. Stop with a clear message when no matching sessions exist.\n4. Read `\u002Ftmp\u002Feffort-map-sessions.jsonl` in chunks. Collect every `user` prompt verbatim (trim noise, drop tool-result echoes and system reminders).\n5. Score each metric from 0 to 100 from the evidence in the transcript, and write one honest sentence of WHY for each:\n   - **effort** — reasoning, planning, and iteration versus one-shotting.\n   - **bugs** — time and turns spent chasing and fixing bugs.\n   - **experience** — tuning UX, polish, and details versus generate-and-done.\n   - **architecture** — care about stack, structure, and design decisions.\n   - **copy_slop** — copying other solutions with no changes or taste (high = more slop).\n6. Merge the stats from `\u002Ftmp\u002Feffort-map-stats.json` (`avg_tokens`, `total_tokens`, `avg_time_minutes`, `sessions_matched`). Do not invent token or time numbers; use the ones the collector computed.\n7. Write `\u002Ftmp\u002Feffort-map-findings.json`:\n   ```json\n   {\n     \"agent\": \"Claude\",\n     \"project\": \"project-name\",\n     \"generated\": \"2026-07-06\",\n     \"sessions_analyzed\": 12,\n     \"prompts\": [\"first prompt\", \"second prompt\"],\n     \"stats\": { \"avg_tokens\": 45231, \"total_tokens\": 542772, \"avg_time_minutes\": 23.4 },\n     \"metrics\": {\n       \"effort\":       {\"score\": 72, \"why\": \"...\"},\n       \"bugs\":         {\"score\": 40, \"why\": \"...\"},\n       \"experience\":   {\"score\": 65, \"why\": \"...\"},\n       \"architecture\": {\"score\": 80, \"why\": \"...\"},\n       \"copy_slop\":    {\"score\": 15, \"why\": \"...\"}\n     }\n   }\n   ```\n8. Render the report. From this skill directory run:\n   ```\n   python3 scripts\u002Frender_report.py --input \u002Ftmp\u002Feffort-map-findings.json --output-dir \"$PWD\"\n   ```\n9. Return the absolute report path, the five scores, and the session count.\n\n## Scoring Rules\n\n- Score from evidence only. Base each number on what the transcript shows, not on a guess about the user.\n- Keep every WHY to one specific sentence that names what happened.\n- Remove secrets, credentials, and personal data from prompts before writing them.\n- Never modify the project while scoring. The only file written into the project is the HTML report.\n","# Effort Map\n\nScore how much real effort went into the current project by reading its agent sessions, then produce `effort-DD-MM-YYYY-report.html`.\n\n## Workflow\n\n1. Detect the active agent: `claude` when running in Claude Code, `codex` when running in Codex.\n2. Collect the sessions for the current project. From this skill directory run:\n   ```\n   python3 scripts\u002Fcollect_sessions.py --project \"$PWD\" \\\n     --output \u002Ftmp\u002Feffort-map-sessions.jsonl --stats \u002Ftmp\u002Feffort-map-stats.json\n   ```\n   Add `--agent claude` or `--agent codex` only if automatic detection fails. The command prints token and time stats and writes the normalized transcript.\n3. Treat the current folder as the project boundary. Stop with a clear message when no matching sessions exist.\n4. Read `\u002Ftmp\u002Feffort-map-sessions.jsonl` in chunks. Collect every `user` prompt verbatim (trim noise, drop tool-result echoes and system reminders).\n5. Score each metric from 0 to 100 from the evidence in the transcript, and write one honest sentence of WHY for each:\n   - **effort** — reasoning, planning, and iteration versus one-shotting.\n   - **bugs** — time and turns spent chasing and fixing bugs.\n   - **experience** — tuning UX, polish, and details versus generate-and-done.\n   - **architecture** — care about stack, structure, and design decisions.\n   - **copy_slop** — copying other solutions with no changes or taste (high = more slop).\n6. Merge the stats from `\u002Ftmp\u002Feffort-map-stats.json` (`avg_tokens`, `total_tokens`, `avg_time_minutes`, `sessions_matched`). Do not invent token or time numbers; use the ones the collector computed.\n7. Write `\u002Ftmp\u002Feffort-map-findings.json`:\n   ```json\n   {\n     \"agent\": \"Claude\",\n     \"project\": \"project-name\",\n     \"generated\": \"2026-07-06\",\n     \"sessions_analyzed\": 12,\n     \"prompts\": [\"first prompt\", \"second prompt\"],\n     \"stats\": { \"avg_tokens\": 45231, \"total_tokens\": 542772, \"avg_time_minutes\": 23.4 },\n     \"metrics\": {\n       \"effort\":       {\"score\": 72, \"why\": \"...\"},\n       \"bugs\":         {\"score\": 40, \"why\": \"...\"},\n       \"experience\":   {\"score\": 65, \"why\": \"...\"},\n       \"architecture\": {\"score\": 80, \"why\": \"...\"},\n       \"copy_slop\":    {\"score\": 15, \"why\": \"...\"}\n     }\n   }\n   ```\n8. Render the report. From this skill directory run:\n   ```\n   python3 scripts\u002Frender_report.py --input \u002Ftmp\u002Feffort-map-findings.json --output-dir \"$PWD\"\n   ```\n9. Return the absolute report path, the five scores, and the session count.\n\n## Scoring Rules\n\n- Score from evidence only. Base each number on what the transcript shows, not on a guess about the user.\n- Keep every WHY to one specific sentence that names what happened.\n- Remove secrets, credentials, and personal data from prompts before writing them.\n- Never modify the project while scoring. The only file written into the project is the HTML report.\n",{"name":5,"description":7},"main","90d379e95fcc23dd9759654c345424e1752b0f3a","pocs\u002Fagent-skill-effot-mapper\u002Feffort-map",9,"https:\u002F\u002Fgithub.com\u002Fdiegopacheco\u002Fai-playground","https:\u002F\u002Fgithub.com\u002Fdiegopacheco","http:\u002F\u002Fdiego-pacheco.blogspot.com","Brazilian Hands-on Software Architect | 20+ years in Tech | Author | Father. Opinions are my own!","2026-11-13 23:52:43",{"source":8,"skillName":5,"commands":45,"prompt":55,"zipAvailable":56},[46,49,52],{"tool":47,"command":48},"npx","npx skills add diegopacheco\u002Fai-playground --skill effort-map",{"tool":50,"command":51},"bunx","bunx skills add diegopacheco\u002Fai-playground --skill effort-map",{"tool":53,"command":54},"pnpm","pnpm dlx skills add diegopacheco\u002Fai-playground --skill effort-map","安装技能，技能地址：https:\u002F\u002Fgithub.com\u002Fdiegopacheco\u002Fai-playground\u002Fblob\u002Fmain\u002Fpocs\u002Fagent-skill-effot-mapper\u002Feffort-map\u002FSKILL.md",true,[58,64],{"path":59,"resourceType":60,"resourceTypeDesc":61,"sizeBytes":62,"sourceHtmlUrl":63},"scripts\u002Fcollect_sessions.py","SCRIPT","脚本",7732,"https:\u002F\u002Fgithub.com\u002Fdiegopacheco\u002Fai-playground\u002Fblob\u002Fmain\u002Fpocs\u002Fagent-skill-effot-mapper\u002Feffort-map\u002Fscripts\u002Fcollect_sessions.py",{"path":65,"resourceType":60,"resourceTypeDesc":61,"sizeBytes":66,"sourceHtmlUrl":67},"scripts\u002Frender_report.py",8194,"https:\u002F\u002Fgithub.com\u002Fdiegopacheco\u002Fai-playground\u002Fblob\u002Fmain\u002Fpocs\u002Fagent-skill-effot-mapper\u002Feffort-map\u002Fscripts\u002Frender_report.py",[69,87,97,110,126,145],{"skillNo":70,"name":71,"nameZh":6,"description":72,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":73,"categories":74,"keywords":80,"publishedAt":30},"01M6WJ537DN520XY8MSW9ZV0RP","word-count","Counts the words, lines and characters of a text or a file.","https:\u002F\u002Fgithub.com\u002Fdiegopacheco\u002Fai-playground\u002Fblob\u002Fmain\u002Fpocs\u002Fskills-gateway-router\u002Fupstream-skills\u002Ftext-skills\u002Fword-count\u002FSKILL.md",[75],{"categoryNo":76,"categoryName":77,"taxonomyType":78,"taxonomyTypeDesc":79},"01JBSEEDCAT000000000000002","文档处理","SCENARIO","使用场景",[81,82,83,84,85,86],"count","word count","Word","characters","text","file",{"skillNo":88,"name":89,"nameZh":6,"description":90,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":91,"categories":92,"keywords":93,"publishedAt":30},"01M6WJ4Y2GT5SECWAKKYHGES4F","slugify","Turns a title or a sentence into a URL slug, lowercase words joined by hyphens with accents removed.","https:\u002F\u002Fgithub.com\u002Fdiegopacheco\u002Fai-playground\u002Fblob\u002Fmain\u002Fpocs\u002Fskills-gateway-router\u002Fupstream-skills\u002Ftext-skills\u002Fslugify\u002FSKILL.md",[],[89,94,95,96],"title","with","URL",{"skillNo":98,"name":99,"nameZh":6,"description":100,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":101,"categories":102,"keywords":103,"publishedAt":30},"01M6WJ4V9CWHT9NVCD441VK5MH","json-format","Validates a JSON file and pretty prints it with two space indentation, or reports where the JSON is invalid.","https:\u002F\u002Fgithub.com\u002Fdiegopacheco\u002Fai-playground\u002Fblob\u002Fmain\u002Fpocs\u002Fskills-gateway-router\u002Fupstream-skills\u002Fdev-skills\u002Fjson-format\u002FSKILL.md",[],[104,105,106,86,107,108,109,95],"json","format","json format","reports","invalid","it",{"skillNo":111,"name":112,"nameZh":6,"description":113,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":114,"categories":115,"keywords":116,"publishedAt":30},"01M6WJ4QMRKW8EFP71F4KS2DHE","commit-message","Writes a conventional commit message for the staged git changes.","https:\u002F\u002Fgithub.com\u002Fdiegopacheco\u002Fai-playground\u002Fblob\u002Fmain\u002Fpocs\u002Fskills-gateway-router\u002Fupstream-skills\u002Fdev-skills\u002Fcommit-message\u002FSKILL.md",[],[117,118,119,120,121,122,123,124,125],"commit","commit message","message","git","conventional commit","for","changes","staged","conventional commit message",{"skillNo":127,"name":128,"nameZh":6,"description":129,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":130,"categories":131,"keywords":132,"publishedAt":30},"01M6WJ4MAM2CJH0GWYXFBB9GQC","skills-gateway","Gateway and router to a catalog of skills that are not registered directly. Use it before any task a specialized skill could handle, such as text, JSON or git chores. It finds the right skill and loads its instructions.","https:\u002F\u002Fgithub.com\u002Fdiegopacheco\u002Fai-playground\u002Fblob\u002Fmain\u002Fpocs\u002Fskills-gateway-router\u002F.claude\u002Fskills\u002Fskills-gateway\u002FSKILL.md",[],[133,134,109,135,136,120,137,104,85,138,139,140,141,142,143,144],"skills gateway","gateway","task","loads","Bash","node","specialized","instructions","catalog","use","router","as",{"skillNo":146,"name":147,"nameZh":6,"description":148,"descriptionZh":6,"repositoryFullName":8,"ownerLogin":9,"ownerAvatarUrl":10,"ownerAccountNo":11,"ownerDisplayName":12,"repositoryNo":13,"starsCount":14,"licenseSpdxId":15,"licenseFileUrl":6,"sourceHtmlUrl":149,"categories":150,"keywords":151,"publishedAt":30},"01M6M2PYJJQKMWGX7XT7ZJK0H3","decision-log","Record, list, show and supersede architecture decisions that persist across sessions in the shared agent infra state store. Use when the user says \"record this decision\", \"log an ADR\", \"what did we decide about\", \"list decisions\", or \"supersede decision\".","https:\u002F\u002Fgithub.com\u002Fdiegopacheco\u002Fai-playground\u002Fblob\u002Fmain\u002Fpocs\u002Fagent-skills-infra-poc\u002Fskills\u002Fdecision-log\u002FSKILL.md",[],[152,153,154,155,22,156,157,158,159,160,142,161,162,163,164,165,166,167,168,21],"decision log","log","decision","persist","state","adr","decide","decisions","list","show","infra","record","across","shared","store","about","supersede"]