From e12341db9f65eab1670a105491ef21ddcc0d12d9 Mon Sep 17 00:00:00 2001 From: Snehal Raj Date: Fri, 27 Feb 2026 08:57:34 +0100 Subject: [PATCH 1/4] readme: reframe with market research narrative - Open with METR study (19% slower, thinks 20% faster) - the hook - Add gym analogy for cognitive maintenance - Cite Anthropic paper on comprehension decline - Tie philosophy section back to the perception gap - Keep all technical docs intact, no overselling --- README.md | 78 ++++++++++++++++++++++++++++++++++++------------------- 1 file changed, 51 insertions(+), 27 deletions(-) diff --git a/README.md b/README.md index 43d9811..7943116 100644 --- a/README.md +++ b/README.md @@ -18,40 +18,39 @@ --- -AI coding tools let you ship code you don't understand. Not because you're lazy—there's just no friction. The code looks right, you move on, and slowly you stop reasoning from first principles. +## The problem nobody's talking about -skill-issue tracks what you actually know. When your agent builds something non-trivial, it fires a challenge grounded in what just happened. You answer, it scores you 0-3, and your knowledge graph updates. Next time, it targets concepts you're weak on. +There's a study you should know about. ---- +METR ran a randomized controlled trial in early 2025 — experienced open-source developers, working on their own codebases, real issues. With AI tools, they took **19% longer** to complete tasks than without. But here's the unsettling part: those same developers *believed* AI had made them 20% faster. Even after experiencing the slowdown firsthand, the belief held. -## Install +Anthropic's own research found something similar: AI-assisted coding significantly lowers codebase comprehension. Developers who rely more on AI perform worse at debugging, conceptual understanding, and code reading. "Just reviewing the generated code" gives you, at best, a flimsy grasp of what you're shipping. -### Claude Code +Trust in AI coding tools is [already falling](https://leaddev.com/technical-direction/trust-in-ai-coding-tools-is-plummeting) — 33% of developers trusted AI output accuracy in 2025, down from 43% the year before. -Two separate commands (don't combine them): +This isn't an argument against AI tools. It's a description of a gap that's opening up quietly, without anyone noticing. -``` -/plugin marketplace add SnehalRaj/skill-issue-marketplace -``` +--- -``` -/plugin install skill-issue@skill-issue-marketplace -``` +## The gym analogy -Open a new session. +Everyone goes to the gym. Not because physical labor disappeared — it mostly has — but because staying physically capable requires deliberate effort. You have to maintain it. The infrastructure for that is everywhere: gyms, workout plans, progress tracking, coaches. -### pip (Cursor, Codex, any agent) +Coding used to be that workout for your brain. Every bug you debugged, every algorithm you reasoned through, every system you designed from scratch was building something. Judgment. Pattern recognition. The ability to hold complexity in your head and work through it. -```bash -pip install skill-issue-cc -skill-issue init -``` +AI agents are changing that. Not by making you worse — but by removing the friction that was doing the work. The code appears. It looks right. You move on. And slowly, without noticing, you stop reasoning from first principles. -Paste the output of `skill-issue init --print` into your editor's system prompt. +There's no gym for this yet. --- -## Knowledge Graph +## What skill-issue does + +When your agent builds something non-trivial, it fires a challenge grounded in what just happened. Not trivia. Not a random LeetCode problem. Something directly tied to the code you just shipped. + +You answer it. It scores you 0–3. Your knowledge graph updates. + +Over time, it shows you exactly where your understanding is solid and where it's quietly fading. The mastery score decays if you don't practice — because real understanding works the same way. ``` skill-issue graph show --domain machine-learning @@ -75,13 +74,36 @@ Priority Queue (work on these next): Total nodes: 12 | Avg mastery: 0.10 | 0 mastered | 10 weak ``` -Each domain has a curated graph of concepts weighted by how often they come up in real work. +Each domain has a curated graph of concepts weighted by how often they come up in real work. High-weight concepts you haven't proven → top priority. + +Mastery fades over time (3-day grace, then 0.02/day). Use it or lose it. + +--- + +## Install + +### Claude Code + +Two separate commands (don't combine them): + +``` +/plugin marketplace add SnehalRaj/skill-issue-marketplace +``` + +``` +/plugin install skill-issue@skill-issue-marketplace +``` + +Open a new session. + +### pip (Cursor, Codex, any agent) -- **reuse_weight** (0–1): How fundamental. 0.95 means it's everywhere. -- **mastery** (0–1): Your proven understanding. Updates via EMA after each challenge. -- **priority** = `weight × (1 - mastery)`. High-weight stuff you haven't proven = top priority. +```bash +pip install skill-issue-cc +skill-issue init +``` -Mastery fades if you don't practice (3-day grace, then 0.02/day). Use it or lose it. +Paste the output of `skill-issue init --print` into your editor's system prompt. --- @@ -119,7 +141,7 @@ Three questions, plain English. It figures out which domains to load. | ⏱️ | **Complexity** | What's the Big-O? Can it be better? | | 🔗 | **Connect** | How does this relate to X? | -Challenges are grounded in what was just built. No random trivia. +Challenges are grounded in what was just built. Not random trivia. --- @@ -209,7 +231,9 @@ Version-controllable. Portable. Human-readable. The name's a joke. Claude has skills (literally, `.skill` files). What about yours? -Understanding compounds. A developer who actually gets the code they ship is more effective long-term. One well-timed challenge beats a passive tutorial. Your trophy wall tracks your growth—no leaderboard against others. +The METR study found that developers *felt* faster with AI even when they were measurably slower. That perception gap is the real problem — you can't fix what you can't see. skill-issue makes the invisible visible: where your understanding is solid, where it's drifting, and what to work on next. + +A developer who actually understands the code they ship is more effective, more resilient, and harder to replace. One well-timed challenge beats an hour of passive tutorials. Your trophy wall tracks real growth — no leaderboard against others, just you versus yesterday's you. --- From fc2bcaf759f84b0d270c3c64c87851ddfb0ee3f2 Mon Sep 17 00:00:00 2001 From: Snehal Raj Date: Fri, 27 Feb 2026 10:13:32 +0100 Subject: [PATCH 2/4] readme: logo, mascot, SVG screenshots, regenerated demo GIF, tightened copy --- .claude/settings.json | 10 + README.md | 95 +++------ assets/demo/skill-issue-demo.cast | 197 ++++++++++++++++++ assets/demo/skill-issue-demo.gif | Bin 412596 -> 508270 bytes assets/logo.svg | 46 +++++ assets/mascot.svg | 67 +++++++ assets/screenshots/graph-show.svg | 54 +++++ assets/screenshots/graph-weak.svg | 53 +++++ assets/screenshots/stats.svg | 36 ++++ scripts/generate_demo.py | 125 ++++++++++++ scripts/generate_terminal_svg.py | 210 ++++++++++++++++++++ skill_issue/__pycache__/cli.cpython-314.pyc | Bin 20144 -> 21450 bytes skill_issue_cc.egg-info/PKG-INFO | 78 +++++--- 13 files changed, 875 insertions(+), 96 deletions(-) create mode 100644 .claude/settings.json create mode 100644 assets/demo/skill-issue-demo.cast create mode 100644 assets/logo.svg create mode 100644 assets/mascot.svg create mode 100644 assets/screenshots/graph-show.svg create mode 100644 assets/screenshots/graph-weak.svg create mode 100644 assets/screenshots/stats.svg create mode 100644 scripts/generate_demo.py create mode 100644 scripts/generate_terminal_svg.py diff --git a/.claude/settings.json b/.claude/settings.json new file mode 100644 index 0000000..84851e1 --- /dev/null +++ b/.claude/settings.json @@ -0,0 +1,10 @@ +{ + "permissions": { + "allow": [ + "Bash(*)", + "Read(*)", + "Write(*)", + "Edit(*)" + ] + } +} diff --git a/README.md b/README.md index 7943116..7808c18 100644 --- a/README.md +++ b/README.md @@ -1,15 +1,18 @@
-skill-issue demo +skill-issue logo

skill-issue

+skill-issue demo +

PyPI License Stars Claude Code Cursor + Tests

Your AI writes the code. But does your brain keep up?

@@ -18,65 +21,9 @@ --- -## The problem nobody's talking about - -There's a study you should know about. - -METR ran a randomized controlled trial in early 2025 — experienced open-source developers, working on their own codebases, real issues. With AI tools, they took **19% longer** to complete tasks than without. But here's the unsettling part: those same developers *believed* AI had made them 20% faster. Even after experiencing the slowdown firsthand, the belief held. - -Anthropic's own research found something similar: AI-assisted coding significantly lowers codebase comprehension. Developers who rely more on AI perform worse at debugging, conceptual understanding, and code reading. "Just reviewing the generated code" gives you, at best, a flimsy grasp of what you're shipping. - -Trust in AI coding tools is [already falling](https://leaddev.com/technical-direction/trust-in-ai-coding-tools-is-plummeting) — 33% of developers trusted AI output accuracy in 2025, down from 43% the year before. - -This isn't an argument against AI tools. It's a description of a gap that's opening up quietly, without anyone noticing. - ---- - -## The gym analogy - -Everyone goes to the gym. Not because physical labor disappeared — it mostly has — but because staying physically capable requires deliberate effort. You have to maintain it. The infrastructure for that is everywhere: gyms, workout plans, progress tracking, coaches. - -Coding used to be that workout for your brain. Every bug you debugged, every algorithm you reasoned through, every system you designed from scratch was building something. Judgment. Pattern recognition. The ability to hold complexity in your head and work through it. - -AI agents are changing that. Not by making you worse — but by removing the friction that was doing the work. The code appears. It looks right. You move on. And slowly, without noticing, you stop reasoning from first principles. - -There's no gym for this yet. - ---- - -## What skill-issue does - -When your agent builds something non-trivial, it fires a challenge grounded in what just happened. Not trivia. Not a random LeetCode problem. Something directly tied to the code you just shipped. +AI coding tools let you ship code you don't understand. The code looks right, you move on, and slowly you stop reasoning from first principles. -You answer it. It scores you 0–3. Your knowledge graph updates. - -Over time, it shows you exactly where your understanding is solid and where it's quietly fading. The mastery score decays if you don't practice — because real understanding works the same way. - -``` -skill-issue graph show --domain machine-learning - -Knowledge Graph: machine-learning -============================================================ - -[GOOD] gradient-descent [####..........................] 0.42 (2) -[WEAK] bias-variance-tradeoff [##............................] 0.09 (1) -[GOOD] backpropagation [#############.................] 0.45 (2) -[WEAK] regularization [..............................] 0.00 -[WEAK] cross-validation [..............................] 0.00 -[WEAK] loss-functions [######........................] 0.21 (1) -[WEAK] attention-mechanism [..............................] 0.00 - -Priority Queue (work on these next): - >> regularization (priority: 0.95 = weight:0.95 x gap:1.00) - >> cross-validation (priority: 0.95 = weight:0.95 x gap:1.00) - >> attention-mechanism (priority: 0.95 = weight:0.95 x gap:1.00) - -Total nodes: 12 | Avg mastery: 0.10 | 0 mastered | 10 weak -``` - -Each domain has a curated graph of concepts weighted by how often they come up in real work. High-weight concepts you haven't proven → top priority. - -Mastery fades over time (3-day grace, then 0.02/day). Use it or lose it. +skill-issue tracks what you actually know. When your agent builds something non-trivial, it fires a challenge grounded in what just happened. You answer, it scores you 0-3, your knowledge graph updates. Next time, it targets the gaps. --- @@ -107,6 +54,20 @@ Paste the output of `skill-issue init --print` into your editor's system prompt. --- +## Knowledge Graph + +Knowledge graph visualization + +Each domain has a curated graph of concepts weighted by how often they come up in real work. + +- **reuse_weight** (0–1): How fundamental. 0.95 means it's everywhere. +- **mastery** (0–1): Your proven understanding. Updates via EMA after each challenge. +- **priority** = `weight × (1 - mastery)`. High-weight stuff you haven't proven = top priority. + +Mastery fades if you don't practice (3-day grace, then 0.02/day). Use it or lose it. + +--- + ## Onboarding ``` @@ -126,7 +87,7 @@ skill-issue init Knowledge graphs initialised for: machine-learning, backend-systems, algorithms ``` -Three questions, plain English. It figures out which domains to load. +Three questions. It figures out which domains to load. --- @@ -141,7 +102,7 @@ Three questions, plain English. It figures out which domains to load. | ⏱️ | **Complexity** | What's the Big-O? Can it be better? | | 🔗 | **Connect** | How does this relate to X? | -Challenges are grounded in what was just built. Not random trivia. +Grounded in what was just built. No random trivia. --- @@ -211,8 +172,6 @@ Streak bonus tops out at 2.5× for consecutive correct answers. ## Persistent State -Everything's in `~/.skill-issue/`. Plain JSON/YAML, no database. - ``` ~/.skill-issue/ ├── profile.json # XP, streak, topic levels, milestones @@ -223,7 +182,7 @@ Everything's in `~/.skill-issue/`. Plain JSON/YAML, no database. └── 2026-02-27.json ``` -Version-controllable. Portable. Human-readable. +Plain JSON/YAML. Version-controllable. No database. --- @@ -231,17 +190,15 @@ Version-controllable. Portable. Human-readable. The name's a joke. Claude has skills (literally, `.skill` files). What about yours? -The METR study found that developers *felt* faster with AI even when they were measurably slower. That perception gap is the real problem — you can't fix what you can't see. skill-issue makes the invisible visible: where your understanding is solid, where it's drifting, and what to work on next. - -A developer who actually understands the code they ship is more effective, more resilient, and harder to replace. One well-timed challenge beats an hour of passive tutorials. Your trophy wall tracks real growth — no leaderboard against others, just you versus yesterday's you. +Understanding compounds. One well-timed challenge beats an hour of passive tutorials. Your trophy wall tracks growth against yesterday's you—no leaderboard. --- ## Contributing -Knowledge graphs are JSON in `references/knowledge_graphs/`. Scripts are plain Python, zero dependencies. +Knowledge graphs are JSON in `references/knowledge_graphs/`. PRs welcome. -See [CONTRIBUTING.md](CONTRIBUTING.md) or open an issue. +See [CONTRIBUTING.md](CONTRIBUTING.md). **MIT License** diff --git a/assets/demo/skill-issue-demo.cast b/assets/demo/skill-issue-demo.cast new file mode 100644 index 0000000..3f9efe7 --- /dev/null +++ b/assets/demo/skill-issue-demo.cast @@ -0,0 +1,197 @@ +{"version": 2, "width": 80, "height": 30, "timestamp": 1772183512, "env": {"SHELL": "/bin/zsh", "TERM": "xterm-256color"}, "title": "skill-issue demo"} +[0.0, "o", "$ "] +[0.5, "o", "s"] +[0.55, "o", "k"] +[0.6000000000000001, "o", "i"] +[0.6500000000000001, "o", "l"] +[0.7000000000000002, "o", "l"] +[0.7500000000000002, "o", "-"] +[0.8200000000000003, "o", "i"] +[0.8700000000000003, "o", "s"] +[0.9200000000000004, "o", "s"] +[0.9700000000000004, "o", "u"] +[1.0200000000000005, "o", "e"] +[1.0700000000000005, "o", " "] +[1.1400000000000006, "o", "s"] +[1.1900000000000006, "o", "t"] +[1.2400000000000007, "o", "a"] +[1.2900000000000007, "o", "t"] +[1.3400000000000007, "o", "s"] +[1.3900000000000008, "o", "\r\n"] +[1.6900000000000008, "o", ""] +[1.6900000000000008, "o", "\r\n"] +[1.7400000000000009, "o", "\ud83e\udde0 skill-issue \u2014 demo"] +[1.7400000000000009, "o", "\r\n"] +[1.790000000000001, "o", "Level: 5 (847 XP)"] +[1.790000000000001, "o", "\r\n"] +[1.840000000000001, "o", "Streak: \ud83d\udd25 4 (best: 7)"] +[1.840000000000001, "o", "\r\n"] +[1.890000000000001, "o", "Accuracy: 74% (31/42 correct)"] +[1.890000000000001, "o", "\r\n"] +[1.940000000000001, "o", ""] +[1.940000000000001, "o", "\r\n"] +[1.990000000000001, "o", "Topics:"] +[1.990000000000001, "o", "\r\n"] +[2.040000000000001, "o", " machine-learning: 3 (18 attempts)"] +[2.040000000000001, "o", "\r\n"] +[2.0900000000000007, "o", " algorithms: 2 (12 attempts)"] +[2.0900000000000007, "o", "\r\n"] +[2.1400000000000006, "o", " backend-systems: 2 (12 attempts)"] +[2.1400000000000006, "o", "\r\n"] +[2.1900000000000004, "o", ""] +[2.1900000000000004, "o", "\r\n"] +[3.24, "o", "\r\n$ "] +[3.74, "o", "s"] +[3.79, "o", "k"] +[3.84, "o", "i"] +[3.8899999999999997, "o", "l"] +[3.9399999999999995, "o", "l"] +[3.9899999999999993, "o", "-"] +[4.06, "o", "i"] +[4.109999999999999, "o", "s"] +[4.159999999999999, "o", "s"] +[4.209999999999999, "o", "u"] +[4.259999999999999, "o", "e"] +[4.309999999999999, "o", " "] +[4.379999999999999, "o", "g"] +[4.429999999999999, "o", "r"] +[4.479999999999999, "o", "a"] +[4.5299999999999985, "o", "p"] +[4.579999999999998, "o", "h"] +[4.629999999999998, "o", " "] +[4.699999999999998, "o", "s"] +[4.749999999999998, "o", "h"] +[4.799999999999998, "o", "o"] +[4.849999999999998, "o", "w"] +[4.899999999999998, "o", " "] +[4.969999999999998, "o", "-"] +[5.039999999999998, "o", "-"] +[5.1099999999999985, "o", "d"] +[5.159999999999998, "o", "o"] +[5.209999999999998, "o", "m"] +[5.259999999999998, "o", "a"] +[5.309999999999998, "o", "i"] +[5.359999999999998, "o", "n"] +[5.4099999999999975, "o", " "] +[5.479999999999998, "o", "m"] +[5.529999999999998, "o", "a"] +[5.579999999999997, "o", "c"] +[5.629999999999997, "o", "h"] +[5.679999999999997, "o", "i"] +[5.729999999999997, "o", "n"] +[5.779999999999997, "o", "e"] +[5.8299999999999965, "o", "-"] +[5.899999999999997, "o", "l"] +[5.949999999999997, "o", "e"] +[5.9999999999999964, "o", "a"] +[6.049999999999996, "o", "r"] +[6.099999999999996, "o", "n"] +[6.149999999999996, "o", "i"] +[6.199999999999996, "o", "n"] +[6.249999999999996, "o", "g"] +[6.299999999999995, "o", "\r\n"] +[6.599999999999995, "o", "Knowledge Graph: machine-learning"] +[6.599999999999995, "o", "\r\n"] +[6.6299999999999955, "o", "============================================================"] +[6.6299999999999955, "o", "\r\n"] +[6.659999999999996, "o", ""] +[6.659999999999996, "o", "\r\n"] +[6.689999999999996, "o", "[GOOD] gradient-descent [\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2591\u2591\u2591\u2591\u2591\u2591\u2591\u2591\u2591\u2591\u2591\u2591\u2591\u2591\u2591\u2591\u2591\u2591] 0.42 (2)"] +[6.689999999999996, "o", "\r\n"] +[6.719999999999996, "o", "[WEAK] bias-variance-tradeoff [\u2588\u2588\u2591\u2591\u2591\u2591\u2591\u2591\u2591\u2591\u2591\u2591\u2591\u2591\u2591\u2591\u2591\u2591\u2591\u2591\u2591\u2591\u2591\u2591\u2591\u2591\u2591\u2591\u2591\u2591] 0.09 (1)"] +[6.719999999999996, "o", "\r\n"] +[6.7499999999999964, "o", "[GOOD] backpropagation [\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2588\u2591\u2591\u2591\u2591\u2591\u2591\u2591\u2591\u2591\u2591\u2591\u2591\u2591\u2591\u2591\u2591\u2591] 0.45 (2)"] +[6.7499999999999964, "o", "\r\n"] +[6.779999999999997, "o", "[WEAK] regularization [\u2591\u2591\u2591\u2591\u2591\u2591\u2591\u2591\u2591\u2591\u2591\u2591\u2591\u2591\u2591\u2591\u2591\u2591\u2591\u2591\u2591\u2591\u2591\u2591\u2591\u2591\u2591\u2591\u2591\u2591] 0.00 (1)"] +[6.779999999999997, "o", "\r\n"] +[6.809999999999997, "o", "[WEAK] cross-validation [\u2591\u2591\u2591\u2591\u2591\u2591\u2591\u2591\u2591\u2591\u2591\u2591\u2591\u2591\u2591\u2591\u2591\u2591\u2591\u2591\u2591\u2591\u2591\u2591\u2591\u2591\u2591\u2591\u2591\u2591] 0.00 "] +[6.809999999999997, "o", "\r\n"] +[6.839999999999997, "o", "[WEAK] loss-functions [\u2588\u2588\u2588\u2588\u2588\u2588\u2591\u2591\u2591\u2591\u2591\u2591\u2591\u2591\u2591\u2591\u2591\u2591\u2591\u2591\u2591\u2591\u2591\u2591\u2591\u2591\u2591\u2591\u2591\u2591] 0.21 (1)"] +[6.839999999999997, "o", "\r\n"] +[6.869999999999997, "o", "[WEAK] attention-mechanism [\u2591\u2591\u2591\u2591\u2591\u2591\u2591\u2591\u2591\u2591\u2591\u2591\u2591\u2591\u2591\u2591\u2591\u2591\u2591\u2591\u2591\u2591\u2591\u2591\u2591\u2591\u2591\u2591\u2591\u2591] 0.00 "] +[6.869999999999997, "o", "\r\n"] +[6.899999999999998, "o", "[WEAK] probability-distributi [\u2591\u2591\u2591\u2591\u2591\u2591\u2591\u2591\u2591\u2591\u2591\u2591\u2591\u2591\u2591\u2591\u2591\u2591\u2591\u2591\u2591\u2591\u2591\u2591\u2591\u2591\u2591\u2591\u2591\u2591] 0.00 "] +[6.899999999999998, "o", "\r\n"] +[6.929999999999998, "o", "[WEAK] embeddings [\u2591\u2591\u2591\u2591\u2591\u2591\u2591\u2591\u2591\u2591\u2591\u2591\u2591\u2591\u2591\u2591\u2591\u2591\u2591\u2591\u2591\u2591\u2591\u2591\u2591\u2591\u2591\u2591\u2591\u2591] 0.00 "] +[6.929999999999998, "o", "\r\n"] +[6.959999999999998, "o", "[WEAK] hyperparameter-tuning [\u2591\u2591\u2591\u2591\u2591\u2591\u2591\u2591\u2591\u2591\u2591\u2591\u2591\u2591\u2591\u2591\u2591\u2591\u2591\u2591\u2591\u2591\u2591\u2591\u2591\u2591\u2591\u2591\u2591\u2591] 0.00 "] +[6.959999999999998, "o", "\r\n"] +[6.989999999999998, "o", "[WEAK] decision-trees-ensembl [\u2591\u2591\u2591\u2591\u2591\u2591\u2591\u2591\u2591\u2591\u2591\u2591\u2591\u2591\u2591\u2591\u2591\u2591\u2591\u2591\u2591\u2591\u2591\u2591\u2591\u2591\u2591\u2591\u2591\u2591] 0.00 "] +[6.989999999999998, "o", "\r\n"] +[7.019999999999999, "o", "[WEAK] generalization-theory [\u2591\u2591\u2591\u2591\u2591\u2591\u2591\u2591\u2591\u2591\u2591\u2591\u2591\u2591\u2591\u2591\u2591\u2591\u2591\u2591\u2591\u2591\u2591\u2591\u2591\u2591\u2591\u2591\u2591\u2591] 0.00 "] +[7.019999999999999, "o", "\r\n"] +[7.049999999999999, "o", ""] +[7.049999999999999, "o", "\r\n"] +[7.079999999999999, "o", "Priority Queue (work on these next):"] +[7.079999999999999, "o", "\r\n"] +[7.109999999999999, "o", "------------------------------------------------------------"] +[7.109999999999999, "o", "\r\n"] +[7.14, "o", " \u25b6 regularization (priority: 0.95 = weight:0.95 \u00d7 gap:1.00)"] +[7.14, "o", "\r\n"] +[7.17, "o", " \u25b6 cross-validation (priority: 0.95 = weight:0.95 \u00d7 gap:1.00)"] +[7.17, "o", "\r\n"] +[7.2, "o", " \u25b6 attention-mechanism (priority: 0.95 = weight:0.95 \u00d7 gap:1.00)"] +[7.2, "o", "\r\n"] +[7.23, "o", " \u25b6 probability-distributions (priority: 0.93 = weight:0.93 \u00d7 gap:1.00)"] +[7.23, "o", "\r\n"] +[7.260000000000001, "o", " \u25b6 embeddings (priority: 0.90 = weight:0.90 \u00d7 gap:1.00)"] +[7.260000000000001, "o", "\r\n"] +[7.290000000000001, "o", ""] +[7.290000000000001, "o", "\r\n"] +[7.320000000000001, "o", "------------------------------------------------------------"] +[7.320000000000001, "o", "\r\n"] +[7.350000000000001, "o", "Total nodes: 12 | Avg mastery: 0.10"] +[7.350000000000001, "o", "\r\n"] +[7.380000000000002, "o", " 0 mastered | 0 strong | 10 weak"] +[7.380000000000002, "o", "\r\n"] +[7.410000000000002, "o", ""] +[7.410000000000002, "o", "\r\n"] +[8.940000000000001, "o", "\r\n$ "] +[9.240000000000002, "o", "#"] +[9.290000000000003, "o", " "] +[9.360000000000003, "o", "Y"] +[9.410000000000004, "o", "o"] +[9.460000000000004, "o", "u"] +[9.510000000000005, "o", "r"] +[9.560000000000006, "o", " "] +[9.630000000000006, "o", "A"] +[9.680000000000007, "o", "I"] +[9.730000000000008, "o", " "] +[9.800000000000008, "o", "w"] +[9.850000000000009, "o", "r"] +[9.90000000000001, "o", "i"] +[9.95000000000001, "o", "t"] +[10.00000000000001, "o", "e"] +[10.050000000000011, "o", "s"] +[10.100000000000012, "o", " "] +[10.170000000000012, "o", "c"] +[10.220000000000013, "o", "o"] +[10.270000000000014, "o", "d"] +[10.320000000000014, "o", "e"] +[10.370000000000015, "o", "."] +[10.420000000000016, "o", " "] +[10.490000000000016, "o", "D"] +[10.540000000000017, "o", "o"] +[10.590000000000018, "o", "e"] +[10.640000000000018, "o", "s"] +[10.690000000000019, "o", " "] +[10.76000000000002, "o", "y"] +[10.81000000000002, "o", "o"] +[10.86000000000002, "o", "u"] +[10.910000000000021, "o", "r"] +[10.960000000000022, "o", " "] +[11.030000000000022, "o", "b"] +[11.080000000000023, "o", "r"] +[11.130000000000024, "o", "a"] +[11.180000000000025, "o", "i"] +[11.230000000000025, "o", "n"] +[11.280000000000026, "o", " "] +[11.350000000000026, "o", "k"] +[11.400000000000027, "o", "e"] +[11.450000000000028, "o", "e"] +[11.500000000000028, "o", "p"] +[11.55000000000003, "o", " "] +[11.62000000000003, "o", "u"] +[11.67000000000003, "o", "p"] +[11.72000000000003, "o", "?"] +[11.770000000000032, "o", "\r\n"] diff --git a/assets/demo/skill-issue-demo.gif b/assets/demo/skill-issue-demo.gif index 8b9e0b9120a96f44a0f938bc1dee9b3efd799887..9a6d0f421bd1bc91af26b99352ad6e0c6feaac32 100644 GIT binary patch literal 508270 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�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

-AI coding tools let you ship code you don't understand. The code looks right, you move on, and slowly you stop reasoning from first principles. + -skill-issue tracks what you actually know. When your agent builds something non-trivial, it fires a challenge grounded in what just happened. You answer, it scores you 0-3, your knowledge graph updates. Next time, it targets the gaps. +You mass-accepted 200 Copilot suggestions last month. Quick: what's the time complexity of the sort you're using in production? ---- +Somewhere between "let me just ask Claude" and "wait, how does this work again," your debugging muscle quietly atrophied. You didn't notice. You were shipping. -## Install +METR ran a study. Experienced developers using AI coding tools took 19% longer to complete tasks. They thought they were 20% faster. That's a 39-point gap between perception and reality. Anthropic found something worse: the more you use AI for code, the less you understand the code you're shipping. Comprehension decays faster than you'd expect, and you don't feel it happening because the tests still pass. -### Claude Code +The gap between what you think is happening and what's actually happening is called skill-issue. -Two separate commands (don't combine them): +--- -``` -/plugin marketplace add SnehalRaj/skill-issue-marketplace -``` +skill-issue embeds micro-challenges directly into your agentic workflow. You ship code with Claude, then get quizzed on what just happened. Not trivia. Not LeetCode. The actual concepts in the code you just approved. -``` -/plugin install skill-issue@skill-issue-marketplace -``` +![Knowledge graph showing mastery decay](assets/screenshots/graph-show.svg) -Open a new session. +Your knowledge lives in a graph. Nodes are concepts—weighted by how often they appear across real codebases. Edges connect prerequisites. Every challenge updates your mastery scores using spaced repetition: get it right, the node strengthens; get it wrong, it surfaces more often. The system knows what you're weak on before you do. -### pip (Cursor, Codex, any agent) +## Install ```bash pip install skill-issue-cc skill-issue init ``` -Paste the output of `skill-issue init --print` into your editor's system prompt. +That's it. + +## Challenges + +| Type | What it tests | +|------|---------------| +| **Explain** | Describe what a code block does in plain English | +| **Predict** | What's the output? What error will this throw? | +| **Debug** | Here's a bug. Find it. | +| **Refactor** | Make this better. Justify your changes. | +| **Trace** | Walk through execution step by step | + +Every challenge is about the code you just shipped. The thing you just let Claude write. + +## Commands + +| Command | What it does | +|---------|--------------| +| `skill-issue challenge` | Generate a challenge from recent context | +| `skill-issue stats` | Your current mastery scores | +| `skill-issue graph show` | Render your knowledge graph | +| `skill-issue graph weak` | Show your weakest nodes | +| `skill-issue review` | Queue of concepts due for review | + +## Philosophy + +This is not a productivity tool. Your productivity is fine. It's your brain we're worried about. + +You hired a brilliant assistant who never explains anything. Now you're the person who can't do their job without them. That's not a skill issue—wait, no, that's exactly what that is. + +The name is the bit. Claude has skills. The question is whether you still do. --- ## Knowledge Graph -Knowledge graph visualization - Each domain has a curated graph of concepts weighted by how often they come up in real work. - **reuse_weight** (0–1): How fundamental. 0.95 means it's everywhere. @@ -106,7 +126,7 @@ Grounded in what was just built. No random trivia. --- -## Commands +## Full Commands | Command | What it does | |---|---| @@ -186,14 +206,6 @@ Plain JSON/YAML. Version-controllable. No database. --- -## Philosophy - -The name's a joke. Claude has skills (literally, `.skill` files). What about yours? - -Understanding compounds. One well-timed challenge beats an hour of passive tutorials. Your trophy wall tracks growth against yesterday's you—no leaderboard. - ---- - ## Contributing Knowledge graphs are JSON in `references/knowledge_graphs/`. PRs welcome. diff --git a/assets/logo.svg b/assets/logo.svg index 017ed86..8544265 100644 --- a/assets/logo.svg +++ b/assets/logo.svg @@ -1,46 +1,132 @@ - + - - - + + + + - - - - - + + + + + + + + + + + + + - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 12% + - - - + + skill-issue + + + skill-issue - - - - - - + + skill-issue + + + + skill-issue + + + + + + + + + + + ! + + + + + + + + + + diff --git a/assets/mascot.svg b/assets/mascot.svg index 4170890..3180867 100644 --- a/assets/mascot.svg +++ b/assets/mascot.svg @@ -1,67 +1,129 @@ - - - + + + + - - + + + + - + + + + + + + - - + + + + + + + + + + + + + - - - - + + + - - - + + + + + + + + + + + + + + + - - - + + + + + + + + + + + + - - - + + + + + + + + + + + - - + + - - - - - + + + + + + + + + + + + + + + + - - - + + + + + - - - + + + - - - + + + - - + + - - - - - + + + + + + diff --git a/assets/screenshots/graph-show.svg b/assets/screenshots/graph-show.svg index 66e8beb..1644ae2 100644 --- a/assets/screenshots/graph-show.svg +++ b/assets/screenshots/graph-show.svg @@ -1,13 +1,13 @@ - - + + - - + + @@ -19,36 +19,36 @@ - skill-issue graph show --domain machine-learning + skill-issue graph show --domain machine-learning - - Knowledge Graph: machine-learning - ============================================================ - - [GOOD] gradient-descent [████████████░░░░░░░░░░░░░░░░░░] 0.42 (2) - [WEAK] bias-variance-tradeoff [██░░░░░░░░░░░░░░░░░░░░░░░░░░░░] 0.09 (1) - [GOOD] backpropagation [█████████████░░░░░░░░░░░░░░░░░] 0.45 (2) - [WEAK] regularization [░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░] 0.00 (1) - [WEAK] cross-validation [░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░] 0.00 - [WEAK] loss-functions [██████░░░░░░░░░░░░░░░░░░░░░░░░] 0.21 (1) - [WEAK] attention-mechanism [░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░] 0.00 - [WEAK] probability-distributi [░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░] 0.00 - [WEAK] embeddings [░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░] 0.00 - [WEAK] hyperparameter-tuning [░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░] 0.00 - [WEAK] decision-trees-ensembl [░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░] 0.00 - [WEAK] generalization-theory [░░░░░░░░░░░░░░░░░░░░░░░░░░░░░░] 0.00 - - Priority Queue (work on these next): - ------------------------------------------------------------ - regularization (priority: 0.95 = weight:0.95 × gap:1.00) - cross-validation (priority: 0.95 = weight:0.95 × gap:1.00) - attention-mechanism (priority: 0.95 = weight:0.95 × gap:1.00) - probability-distributions (priority: 0.93 = weight:0.93 × gap:1.00) - embeddings (priority: 0.90 = weight:0.90 × gap:1.00) - - ------------------------------------------------------------ - Total nodes: 12 | Avg mastery: 0.10 - 0 mastered | 0 strong | 10 weak + + Knowledge Graph: machine-learning + ============================================================ + + [GOOD] gradient-descent [] 0.42 (2) + [WEAK] bias-variance-tradeoff [] 0.09 (1) + [GOOD] backpropagation [] 0.45 (2) + [WEAK] regularization [] 0.00 (1) + [WEAK] cross-validation [] 0.00 + [WEAK] loss-functions [] 0.21 (1) + [WEAK] attention-mechanism [] 0.00 + [WEAK] probability-distributi [] 0.00 + [WEAK] embeddings [] 0.00 + [WEAK] hyperparameter-tuning [] 0.00 + [WEAK] decision-trees-ensembl [] 0.00 + [WEAK] generalization-theory [] 0.00 + + Priority Queue (work on these next): + ------------------------------------------------------------ + regularization (priority: 0.95 = weight:0.95 × gap:1.00) + cross-validation (priority: 0.95 = weight:0.95 × gap:1.00) + attention-mechanism (priority: 0.95 = weight:0.95 × gap:1.00) + probability-distributions (priority: 0.93 = weight:0.93 × gap:1.00) + embeddings (priority: 0.90 = weight:0.90 × gap:1.00) + + ------------------------------------------------------------ + Total nodes: 12 | Avg mastery: 0.10 + 0 mastered | 0 strong | 10 weak \ No newline at end of file diff --git a/assets/screenshots/graph-weak.svg b/assets/screenshots/graph-weak.svg index b8e0f22..85c785e 100644 --- a/assets/screenshots/graph-weak.svg +++ b/assets/screenshots/graph-weak.svg @@ -1,13 +1,13 @@ - - + + - - + + @@ -19,35 +19,35 @@ - skill-issue graph weak --domain machine-learning + skill-issue graph weak --domain machine-learning - - Top 5 Priority Nodes (machine-learning): - - 1. regularization - Regularization - Priority: 0.95 | Mastery: 0.00 | Status: weak - → What geometric effect does L1 regularization have on the weight vector? - - 2. cross-validation - Cross-Validation - Priority: 0.95 | Mastery: 0.00 | Status: weak - → Why is nested cross-validation necessary when tuning hyperparameters? - - 3. attention-mechanism - Attention & Transformers - Priority: 0.95 | Mastery: 0.00 | Status: weak - → What is the time complexity of self-attention with respect to sequence length? - - 4. probability-distributions - Probability Distributions - Priority: 0.93 | Mastery: 0.00 | Status: weak - → Why does softmax output a probability distribution? - - 5. embeddings - Embeddings & Representations - Priority: 0.90 | Mastery: 0.00 | Status: weak - → Why do word2vec embeddings capture semantic similarity? + + Top 5 Priority Nodes (machine-learning): + + 1. regularization + Regularization + Priority: 0.95 | Mastery: 0.00 | Status: weak + → What geometric effect does L1 regularization have on the weight vector? + + 2. cross-validation + Cross-Validation + Priority: 0.95 | Mastery: 0.00 | Status: weak + → Why is nested cross-validation necessary when tuning hyperparameters? + + 3. attention-mechanism + Attention & Transformers + Priority: 0.95 | Mastery: 0.00 | Status: weak + → What is the time complexity of self-attention with respect to sequence length? + + 4. probability-distributions + Probability Distributions + Priority: 0.93 | Mastery: 0.00 | Status: weak + → Why does softmax output a probability distribution? + + 5. embeddings + Embeddings & Representations + Priority: 0.90 | Mastery: 0.00 | Status: weak + → Why do word2vec embeddings capture semantic similarity? \ No newline at end of file diff --git a/assets/screenshots/stats.svg b/assets/screenshots/stats.svg index 663784c..d45e246 100644 --- a/assets/screenshots/stats.svg +++ b/assets/screenshots/stats.svg @@ -1,13 +1,13 @@ - - + + - - + + @@ -19,18 +19,18 @@ - skill-issue stats + skill-issue stats - - 🧠 skill-issue — demo - Level: 5 (847 XP) - Streak: 🔥 4 (best: 7) - Accuracy: 74% (31/42 correct) - - Topics: - machine-learning: 3 (18 attempts) - algorithms: 2 (12 attempts) - backend-systems: 2 (12 attempts) + + 🧠 skill-issue — demo + Level: 5 (847 XP) + Streak: 🔥 4 (best: 7) + Accuracy: 74% (31/42 correct) + + Topics: + machine-learning: 3 (18 attempts) + algorithms: 2 (12 attempts) + backend-systems: 2 (12 attempts) \ No newline at end of file diff --git a/scripts/generate_terminal_svg.py b/scripts/generate_terminal_svg.py index 99dc653..7f78af5 100644 --- a/scripts/generate_terminal_svg.py +++ b/scripts/generate_terminal_svg.py @@ -1,161 +1,117 @@ #!/usr/bin/env python3 -"""Generate SVG screenshots of terminal output for README.""" +"""Generate SVG screenshots of terminal output for README. + +Uses the danger palette from terminal_style.py for consistent visual identity. +""" import subprocess import html +import os +import sys + +# Add scripts dir to path for import +sys.path.insert(0, os.path.dirname(os.path.abspath(__file__))) + +from terminal_style import ( + BACKGROUND, + PROMPT, + OUTPUT_TEXT, + MUTED_TEXT, + SCORE_HIGHLIGHT, + WEAK_NODE, + GOOD_NODE, + WARNING, + FONT_FAMILY, + WINDOW_BUTTON_COLORS, + BORDER_RADIUS, +) def terminal_to_svg(output: str, title: str = "Terminal", width: int = 700) -> str: - """Convert terminal output to an SVG image with a macOS-style window chrome.""" + """Convert terminal output to an SVG image with macOS-style window chrome. + + Uses the sci-fi dystopian danger palette from terminal_style.py. + """ lines = output.split('\n') line_height = 20 padding = 20 header_height = 40 height = header_height + (len(lines) * line_height) + (padding * 2) - # ANSI color mapping + # Color mapping using danger palette colors = { - 'default': '#c9d1d9', - 'green': '#22c55e', - 'yellow': '#eab308', - 'red': '#ef4444', + 'default': OUTPUT_TEXT, + 'green': GOOD_NODE, + 'yellow': WARNING, + 'red': WEAK_NODE, 'blue': '#3b82f6', - 'magenta': '#a855f7', + 'magenta': SCORE_HIGHLIGHT, # Use amber for emphasis 'cyan': '#06b6d4', - 'gray': '#6b7280', - 'orange': '#f97316', + 'gray': MUTED_TEXT, + 'orange': WARNING, + 'prompt': PROMPT, } - def parse_ansi(text: str) -> list: - """Parse ANSI codes and return list of (text, color) tuples.""" - import re - parts = [] - current_color = 'default' - - # Pattern for ANSI escape codes - ansi_pattern = re.compile(r'\x1b\[([0-9;]*)m') - - last_end = 0 - for match in ansi_pattern.finditer(text): - # Add text before this escape code - if match.start() > last_end: - parts.append((text[last_end:match.start()], current_color)) - - # Parse the escape code - code = match.group(1) - if code in ('0', ''): - current_color = 'default' - elif code == '32' or code == '1;32': - current_color = 'green' - elif code == '33' or code == '1;33': - current_color = 'yellow' - elif code == '31' or code == '1;31': - current_color = 'red' - elif code == '34' or code == '1;34': - current_color = 'blue' - elif code == '35' or code == '1;35': - current_color = 'magenta' - elif code == '36' or code == '1;36': - current_color = 'cyan' - elif code == '90' or code == '37': - current_color = 'gray' - - last_end = match.end() - - # Add remaining text - if last_end < len(text): - parts.append((text[last_end:], current_color)) - - return parts if parts else [(text, 'default')] - - def render_line(text: str, y: int) -> str: - """Render a single line with color support.""" - # Handle Unicode block characters for progress bars - text = text.replace('█', '█').replace('░', '░') - - # Simple colored rendering based on content patterns - x = padding - spans = [] - - # Color [GOOD] green, [WEAK] orange - if '[GOOD]' in text: - text = text.replace('[GOOD]', '[GOOD]') - if '[WEAK]' in text: - text = text.replace('[WEAK]', '[WEAK]') - - # Color the progress bars - text = text.replace('████', '████') - text = text.replace('███', '███') - text = text.replace('██', '██') - text = text.replace('█', '') - text = text.replace('░', '') - - # Color priority arrows - text = text.replace('▶', '') - - # Color header lines - if text.startswith('Knowledge Graph:') or text.startswith('Priority Queue'): - text = f'{text}' - if '=====' in text or '-----' in text: - text = f'{text}' - - # Color stats output - if '🧠' in text or 'skill-issue' in text: - text = f'{text}' - if 'Level:' in text or 'Streak:' in text or 'Accuracy:' in text: - parts = text.split(':') - if len(parts) == 2: - text = f'{parts[0]}:{parts[1]}' - if '🔥' in text: - text = text.replace('🔥', '🔥') - - return f' {html.escape(text) if "' - svg_lines = [ f'', ' ', ' ', - ' ', - ' ', + ' ', + ' ', ' ', ' ', '', - ' ', - f' ', + ' ', + f' ', '', ' ', - f' ', - f' ', + f' ', + f' ', '', ' ', - ' ', - ' ', - ' ', + f' ', + f' ', + f' ', '', ' ', - f' {html.escape(title)}', + f' {html.escape(title)}', '', ' ', - f' ', + f' ', ] y = header_height + padding + 15 for line in lines: - # Escape HTML but preserve our tspan tags + # Escape HTML first safe_line = html.escape(line) - # Re-apply coloring after escaping + + # Apply danger palette coloring + + # [GOOD] = green, [WEAK] = danger red if '[GOOD]' in safe_line: - safe_line = safe_line.replace('[GOOD]', '[GOOD]') + safe_line = safe_line.replace('[GOOD]', f'[GOOD]') if '[WEAK]' in safe_line: - safe_line = safe_line.replace('[WEAK]', '[WEAK]') + safe_line = safe_line.replace('[WEAK]', f'[WEAK]') + + # Priority arrows = amber warning if '▶' in line: - safe_line = safe_line.replace('▶', '') + safe_line = safe_line.replace('▶', f'') + + # Headers = amber for emphasis if safe_line.startswith('Knowledge Graph:') or safe_line.startswith('Priority Queue'): - safe_line = f'{safe_line}' + safe_line = f'{safe_line}' + + # Separators = muted if '=====' in safe_line or '-----' in safe_line: - safe_line = f'{safe_line}' + safe_line = f'{safe_line}' + + # Stats with brain emoji = amber if '🧠' in safe_line: - safe_line = f'{safe_line}' + safe_line = f'{safe_line}' + + # Progress bars: full blocks = green, empty = muted + safe_line = safe_line.replace('█', f'') + safe_line = safe_line.replace('░', f'') svg_lines.append(f' {safe_line}') y += line_height @@ -169,8 +125,6 @@ def render_line(text: str, y: int) -> str: def main(): - import os - assets_dir = os.path.dirname(os.path.dirname(os.path.abspath(__file__))) screenshots_dir = os.path.join(assets_dir, 'assets', 'screenshots') os.makedirs(screenshots_dir, exist_ok=True) diff --git a/scripts/terminal_style.py b/scripts/terminal_style.py new file mode 100644 index 0000000..958b242 --- /dev/null +++ b/scripts/terminal_style.py @@ -0,0 +1,196 @@ +""" +Terminal SVG style constants for skill-issue visual assets. + +Sci-fi dystopian palette — danger reds, amber warnings, dark backgrounds. +The kind of terminal that knows something is wrong. +""" + +# === COLORS === + +# Background — nearly black with a hint of blue +BACKGROUND = "#0a0a0f" + +# Border — subtle, doesn't distract +BORDER = "#333333" +BORDER_WIDTH = 1 + +# Text colors +PROMPT = "#ff3366" # Danger red — we're past green terminals +OUTPUT_TEXT = "#e0e0e0" # Light gray, easy to read +MUTED_TEXT = "#666666" # De-emphasized info + +# Semantic highlights +SCORE_HIGHLIGHT = "#ff9900" # Amber for scores, metrics, numbers +WEAK_NODE = "#ff3366" # Red for weak/needs-work +GOOD_NODE = "#00ff88" # Green for strong/mastered +WARNING = "#ff9900" # Amber warnings +ERROR = "#ff3366" # Red errors + +# Glitch effect colors (for special effects) +GLITCH_CYAN = "#00ffff" +GLITCH_MAGENTA = "#ff00ff" + +# === FONTS === + +# Font stack — JetBrains Mono preferred, fallbacks for broad support +FONT_FAMILY = "'JetBrains Mono', 'Fira Code', 'SF Mono', 'Consolas', 'Courier New', monospace" +FONT_SIZE = 14 +LINE_HEIGHT = 1.4 + +# === TERMINAL WINDOW === + +# macOS-style window chrome +WINDOW_CHROME_HEIGHT = 32 +WINDOW_BUTTON_RADIUS = 6 +WINDOW_BUTTON_SPACING = 20 +WINDOW_BUTTON_COLORS = { + "close": "#ff5f57", + "minimize": "#febc2e", + "maximize": "#28c840", +} + +# Padding inside terminal +TERMINAL_PADDING_X = 16 +TERMINAL_PADDING_Y = 12 + +# Default terminal dimensions +DEFAULT_WIDTH = 700 +DEFAULT_HEIGHT = 400 + +# Corner radius +BORDER_RADIUS = 8 + + +# === SVG GENERATION HELPERS === + +def rgb_to_hex(r: int, g: int, b: int) -> str: + """Convert RGB values to hex color string.""" + return f"#{r:02x}{g:02x}{b:02x}" + + +def generate_terminal_header(width: int = DEFAULT_WIDTH) -> str: + """Generate SVG for macOS-style terminal window header.""" + buttons = [] + start_x = 16 + cy = WINDOW_CHROME_HEIGHT // 2 + + for i, (name, color) in enumerate(WINDOW_BUTTON_COLORS.items()): + cx = start_x + i * WINDOW_BUTTON_SPACING + buttons.append( + f'' + ) + + return f""" + + + {''.join(buttons)} + """ + + +def generate_terminal_body( + content_lines: list[str], + width: int = DEFAULT_WIDTH, + height: int = DEFAULT_HEIGHT, +) -> str: + """ + Generate SVG for terminal body with content. + + content_lines: List of (text, color) tuples or plain strings. + """ + y_offset = WINDOW_CHROME_HEIGHT + TERMINAL_PADDING_Y + FONT_SIZE + + lines_svg = [] + for i, line in enumerate(content_lines): + if isinstance(line, tuple): + text, color = line + else: + text = line + color = OUTPUT_TEXT + + # Escape XML special characters + text = ( + text.replace("&", "&") + .replace("<", "<") + .replace(">", ">") + .replace('"', """) + ) + + y = y_offset + i * (FONT_SIZE * LINE_HEIGHT) + lines_svg.append( + f'{text}' + ) + + body_y = WINDOW_CHROME_HEIGHT + body_height = height - WINDOW_CHROME_HEIGHT + + return f""" + + + {''.join(lines_svg)} + """ + + +def generate_terminal_svg( + content_lines: list, + width: int = DEFAULT_WIDTH, + height: int = DEFAULT_HEIGHT, + title: str = "skill-issue", +) -> str: + """ + Generate complete terminal SVG with header and content. + + Args: + content_lines: List of strings or (text, color) tuples + width: Terminal width in pixels + height: Terminal height in pixels + title: Window title (displayed in header) + + Returns: + Complete SVG string + """ + header = generate_terminal_header(width) + body = generate_terminal_body(content_lines, width, height) + + # Title in header + title_svg = ( + f'{title}' + ) + + # Border + border_svg = ( + f'' + ) + + return f""" +{header} +{title_svg} +{body} +{border_svg} +""" + + +# === EXAMPLE USAGE === + +if __name__ == "__main__": + # Demo: generate a sample terminal screenshot + sample_content = [ + ("$ skill-issue graph show", PROMPT), + ("", OUTPUT_TEXT), + ("Knowledge Graph: machine-learning", OUTPUT_TEXT), + ("━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━", MUTED_TEXT), + ("", OUTPUT_TEXT), + (" backpropagation ████████░░ 82%", GOOD_NODE), + (" gradient_descent █████████░ 91%", GOOD_NODE), + (" neural_networks ██████░░░░ 64%", WARNING), + (" transformers ███░░░░░░░ 31%", WEAK_NODE), + (" attention ██░░░░░░░░ 23%", WEAK_NODE), + ] + + svg = generate_terminal_svg(sample_content, title="skill-issue — graph show") + print(svg) From b45f5f947d9ed677c333515a245efe8ea3734331 Mon Sep 17 00:00:00 2001 From: Snehal Raj Date: Fri, 27 Feb 2026 10:37:12 +0100 Subject: [PATCH 4/4] readme: evidence bombardment, mascot variants throughout, full bibliography [13 sources] Co-Authored-By: Claude Opus 4.5 --- README.md | 149 ++++++++++++++++++---------------- assets/mascot-challenge.svg | 90 ++++++++++++++++++++ assets/mascot-confused.svg | 82 +++++++++++++++++++ assets/mascot-leveling-up.svg | 111 +++++++++++++++++++++++++ assets/mascot-typing.svg | 97 ++++++++++++++++++++++ 5 files changed, 461 insertions(+), 68 deletions(-) create mode 100644 assets/mascot-challenge.svg create mode 100644 assets/mascot-confused.svg create mode 100644 assets/mascot-leveling-up.svg create mode 100644 assets/mascot-typing.svg diff --git a/README.md b/README.md index 787d057..1e0c8db 100644 --- a/README.md +++ b/README.md @@ -17,97 +17,56 @@ - + -You mass-accepted 200 Copilot suggestions last month. Quick: what's the time complexity of the sort you're using in production? +The last time you debugged something without asking first was— -Somewhere between "let me just ask Claude" and "wait, how does this work again," your debugging muscle quietly atrophied. You didn't notice. You were shipping. - -METR ran a study. Experienced developers using AI coding tools took 19% longer to complete tasks. They thought they were 20% faster. That's a 39-point gap between perception and reality. Anthropic found something worse: the more you use AI for code, the less you understand the code you're shipping. Comprehension decays faster than you'd expect, and you don't feel it happening because the tests still pass. - -The gap between what you think is happening and what's actually happening is called skill-issue. +You're shipping faster. Or you think you are. --- -skill-issue embeds micro-challenges directly into your agentic workflow. You ship code with Claude, then get quizzed on what just happened. Not trivia. Not LeetCode. The actual concepts in the code you just approved. +## The Accumulation -![Knowledge graph showing mastery decay](assets/screenshots/graph-show.svg) + -Your knowledge lives in a graph. Nodes are concepts—weighted by how often they appear across real codebases. Edges connect prerequisites. Every challenge updates your mastery scores using spaced repetition: get it right, the node strengthens; get it wrong, it surfaces more often. The system knows what you're weak on before you do. +METR ran an RCT on experienced open-source developers: AI users took 19% longer. They believed they were 20% faster.[1] That's a 39-point perception gap, and it persisted even after subjects saw their own data. -## Install +GitHub's research didn't measure whether developers *were* more productive—they asked if developers *felt* more productive.[5] The answer was barely. Anthropic measured what you're actually losing: comprehension decays faster than you'd expect, and reviewing AI-generated code gives you "flimsy understanding."[2] The tests pass. You don't notice. -```bash -pip install skill-issue-cc -skill-issue init -``` +It's not one study. The 2024 DORA report found no productivity signal.[3] Trust in AI tool output dropped from 43% to 33% in a single year—even developers stopped trusting it.[4] -That's it. - -## Challenges - -| Type | What it tests | -|------|---------------| -| **Explain** | Describe what a code block does in plain English | -| **Predict** | What's the output? What error will this throw? | -| **Debug** | Here's a bug. Find it. | -| **Refactor** | Make this better. Justify your changes. | -| **Trace** | Walk through execution step by step | - -Every challenge is about the code you just shipped. The thing you just let Claude write. - -## Commands +--- -| Command | What it does | -|---------|--------------| -| `skill-issue challenge` | Generate a challenge from recent context | -| `skill-issue stats` | Your current mastery scores | -| `skill-issue graph show` | Render your knowledge graph | -| `skill-issue graph weak` | Show your weakest nodes | -| `skill-issue review` | Queue of concepts due for review | +## It's Not Just You -## Philosophy - -This is not a productivity tool. Your productivity is fine. It's your brain we're worried about. +On r/ExperiencedDevs, seniors are watching juniors who say "clean coding is not a real thing" and use AI to write PR review responses without reading them.[8] Another thread: juniors can't explain why AI-generated code is wrong, even when it "works."[9] -You hired a brilliant assistant who never explains anything. Now you're the person who can't do their job without them. That's not a skill issue—wait, no, that's exactly what that is. +It's not just juniors. A senior ML engineer with 9 YoE: "Is senior ML engineering just API calls now?"[10] A 40-year veteran documenting his first all-AI project found the ambiguity had shifted somewhere he couldn't follow.[11] -The name is the bit. Claude has skills. The question is whether you still do. +Godot maintainers are drowning in "AI slop" contributions. One said: "I don't know how long we can keep it up."[12] --- -## Knowledge Graph + -Each domain has a curated graph of concepts weighted by how often they come up in real work. +## The Tool -- **reuse_weight** (0–1): How fundamental. 0.95 means it's everywhere. -- **mastery** (0–1): Your proven understanding. Updates via EMA after each challenge. -- **priority** = `weight × (1 - mastery)`. High-weight stuff you haven't proven = top priority. +skill-issue embeds micro-challenges directly into your agentic workflow. You ship code with Claude, then get quizzed on what just happened. Not trivia. Not LeetCode. The actual concepts in the code you just approved. -Mastery fades if you don't practice (3-day grace, then 0.02/day). Use it or lose it. +![Knowledge graph showing mastery decay](assets/screenshots/graph-show.svg) + +Your knowledge lives in a graph. Nodes are concepts—weighted by how often they appear across real codebases. Edges connect prerequisites. Every challenge updates your mastery scores using spaced repetition: get it right, the node strengthens; get it wrong, it surfaces more often. The system knows what you're weak on before you do. --- -## Onboarding +## Install -``` +```bash +pip install skill-issue-cc skill-issue init - -3 questions to personalise your knowledge graph. - -1. What do you mainly build or work on? - > I train ML models and do some backend API work - -2. What languages or tools do you use most? - > Python, PyTorch, FastAPI, PostgreSQL - -3. One concept you know you are shaky on? (optional) - > always forget when cross-validation goes wrong - -Knowledge graphs initialised for: machine-learning, backend-systems, algorithms ``` -Three questions. It figures out which domains to load. +That's it. --- @@ -126,7 +85,7 @@ Grounded in what was just built. No random trivia. --- -## Full Commands +## Commands | Command | What it does | |---|---| @@ -171,6 +130,8 @@ Add your own in `references/knowledge_graphs/`. --- + + ## Progression ``` @@ -190,6 +151,18 @@ Streak bonus tops out at 2.5× for consecutive correct answers. --- +## Knowledge Graph + +Each domain has a curated graph of concepts weighted by how often they come up in real work. + +- **reuse_weight** (0–1): How fundamental. 0.95 means it's everywhere. +- **mastery** (0–1): Your proven understanding. Updates via EMA after each challenge. +- **priority** = `weight × (1 - mastery)`. High-weight stuff you haven't proven = top priority. + +Mastery fades if you don't practice (3-day grace, then 0.02/day). Use it or lose it. + +--- + ## Persistent State ``` @@ -206,6 +179,48 @@ Plain JSON/YAML. Version-controllable. No database. --- +## Further Reading + +1. [METR, "AI Experienced OS Devs Study" (2025)](https://metr.org/Early_2025_AI_Experienced_OS_Devs_Study.pdf) — RCT: experienced developers 19% slower with AI, believed they were 20% faster. + +2. [Anthropic, "The Impact of AI on Developer Productivity" (2026)](https://arxiv.org/abs/2601.20245) — No significant speed-up; AI coding "significantly lowers comprehension of the codebase." + +3. DORA Report 2024 — AI tools showed no measurable productivity signal. + +4. [LeadDev, "Trust in AI Coding Tools Is Plummeting" (2025)](https://leaddev.com/technical-direction/trust-in-ai-coding-tools-is-plummeting) — 33% trust in 2025, down from 43% in 2024. + +5. [LeadDev, "AI Coding Assistants Aren't Really Making Devs Feel More Productive" (2025)](https://leaddev.com/velocity/ai-coding-assistants-arent-really-making-devs-feel-more-productive) — GitHub's research measured feelings, not output—and still found minimal gains. + +6. [Claude on Upwork Benchmark (2025)](https://reddit.com/r/MachineLearning) — Resolved 26.2% of real-world software engineering tasks. + +7. ["Competence as Tragedy"](https://crowprose.com/blog/competence-as-tragedy) — Personal essay on watching AI make hard-won skills obsolete. + +8. [r/ExperiencedDevs, "Junior devs not interested in software engineering" (2025)](https://reddit.com/r/ExperiencedDevs/comments/1mrfgm2) — 1,795 upvotes. Seniors observing juniors who've never heard of Coursera, say "clean coding is not a real thing." + +9. [r/ExperiencedDevs, "ChatGPT is producing bad and lazy junior engineers" (2025)](https://reddit.com/r/ExperiencedDevs/comments/1lb5ktb) — 1,449 upvotes. Juniors can't explain why AI code is wrong. + +10. [r/MachineLearning, "Is senior ML engineering just API calls now?" (2025)](https://reddit.com/r/MachineLearning/comments/1npdfh1) — 9 YoE engineer feeling career stagnation. + +11. ["Vibe Coding as a Coding Veteran"](https://medium.com/gitconnected/vibe-coding-as-a-coding-veteran-cd370fe2be50) — 40-year veteran, PhD in AI, documenting 2 weeks building entirely through AI conversation. + +12. [PCGamer, "Godot drowning in 'AI slop' contributions" (2025)](https://pcgamer.com) — Maintainer: "I don't know how long we can keep it up." 2,963 upvotes on r/programming. + +13. Ilya Sutskever on the gap between AI benchmarks and economic impact (2025) — Even AI's believers can't explain why gains aren't translating. + +--- + +## Philosophy + +This is not a productivity tool. Your productivity is fine. It's your brain we're worried about. + +You hired a brilliant assistant who never explains anything. Now you're the person who can't do their job without them. The name is the bit. Claude has skills. The question is whether you still do. + +Ilya Sutskever—one of AI's true believers—said he's puzzled why benchmark gains aren't translating to economic impact.[13] A personal essay called it "competence as tragedy": watching your hard-won skills become vestigial.[7] + +The tools work. That's the problem. They work well enough that you stop working *at all*. + +--- + ## Contributing Knowledge graphs are JSON in `references/knowledge_graphs/`. PRs welcome. @@ -216,6 +231,4 @@ See [CONTRIBUTING.md](CONTRIBUTING.md). --- -
- Works with Claude Code · Cursor · Codex · OpenCode · any agent that reads a system prompt -
+
Works with Claude Code · Cursor · Codex · any agent that reads a system prompt
diff --git a/assets/mascot-challenge.svg b/assets/mascot-challenge.svg new file mode 100644 index 0000000..4ea8529 --- /dev/null +++ b/assets/mascot-challenge.svg @@ -0,0 +1,90 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + "wait, I actually + know this" + + + + + diff --git a/assets/mascot-confused.svg b/assets/mascot-confused.svg new file mode 100644 index 0000000..4ba8418 --- /dev/null +++ b/assets/mascot-confused.svg @@ -0,0 +1,82 @@ + + + + + + + + + + + + + + TypeError: undefined is not + at Object.<anonymous> + at Module._compile + at node:internal/... + at ??? + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + ? + ? + + + + + diff --git a/assets/mascot-leveling-up.svg b/assets/mascot-leveling-up.svg new file mode 100644 index 0000000..c5db00e --- /dev/null +++ b/assets/mascot-leveling-up.svg @@ -0,0 +1,111 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 68% + + + + + + + + + + + + + LEVEL UP + + diff --git a/assets/mascot-typing.svg b/assets/mascot-typing.svg new file mode 100644 index 0000000..abde0f3 --- /dev/null +++ b/assets/mascot-typing.svg @@ -0,0 +1,97 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + AI + + + + + + + + + + + + + Tab to accept ✓ + +