Skip to content

feat: improve skill scores for 5 lowest-scoring skills#1

Open
rohan-tessl wants to merge 2 commits into
runkids:mainfrom
rohan-tessl:improve/skill-review-optimization
Open

feat: improve skill scores for 5 lowest-scoring skills#1
rohan-tessl wants to merge 2 commits into
runkids:mainfrom
rohan-tessl:improve/skill-review-optimization

Conversation

@rohan-tessl

@rohan-tessl rohan-tessl commented Apr 2, 2026

Copy link
Copy Markdown

Hey @doodledood 👋

I ran your skills through tessl skill review at work and found some targeted improvements.

image

Here's the full before/after:

Skill Before After Change
clean-slop 38% 89% +51%
investigate-bug 36% 74% +38%
audit-ux 39% 74% +35%
review-prompt 38% 69% +31%
update-claude-md 18% 18% +0%*

*update-claude-md contains the reserved word "claude" in its name, which causes the tessl validator to fail deterministically and skip the LLM judge entirely. The content improvements are genuine (expanded description with "Use when..." clause, structured best-practices sections, verification checklist) but the score can't reflect them. You may want to consider renaming (e.g. update-project-instructions) or accept the validation trade-off — totally your call.

This PR is intentionally scoped to the 5 lowest-scoring skills. More skills can be improved in follow-ups or via automated review on future PRs.

Changes summary

All 5 skills received:

  • Expanded frontmatter descriptions with specific concrete actions and explicit "Use when..." trigger clauses
  • Removed unknown context: fork frontmatter keys (caused validation warnings on 3 skills)

investigate-bug: Added structured workflow (gather symptoms → identify scope → invoke consultant → relay findings), expected output format with root cause, execution flow, blast radius, and regression test plan sections.

review-prompt: Added 10-Layer Architecture reference table, structured output description (assessment, score, strengths, issues table with AUTO_FIXABLE/NEEDS_USER_INPUT tags), clarified read-only constraint.

clean-slop: Added four concrete slop categories with examples (useless comments, verbose docs, filler phrases, unnecessary patterns), scope rules (file paths vs git diff), decision rule for remove/keep, and output format description.

audit-ux: Added 4-step workflow (gather references → identify changes → systematic review → report findings), five issue categories with specific examples, and structured output format description.

update-claude-md: Restructured best practices into scannable sections (structure, length budget table, progressive disclosure, do/don't lists, examples), added verification checklist.

Honest disclosure — I work at @tesslio where we build tooling around skills like these. Not a pitch - just saw room for improvement and wanted to contribute.

Want to self-improve your skills? Just point your agent (Claude Code, Codex, etc.) at this Tessl guide and ask it to optimize your skill. Ping me - @rohan-tessl - if you hit any snags.

Thanks in advance 🙏

runkids and others added 2 commits April 2, 2026 01:58
Hey @runkids 👋

I ran your skills through `tessl skill review` at work and found some targeted improvements. Here's the full before/after:

| Skill | Before | After | Change |
|-------|--------|-------|--------|
| slack | 70% | 99% | +29% |
| docker-expert | 72% | 93% | +21% |
| react-best-practices | 76% | 100% | +24% |
| electron | 86% | 88% | +2% |
| vercel-sandbox | 86% | 89% | +3% |

This PR is intentionally scoped to the 5 lowest-scoring skills to keep it
reviewable. More skills can be improved in follow-ups or via automated
review on future PRs.

Changes:
- slack: Condensed to ~81 lines, added Snapshot→Act→Validate→Recover workflow, moved tasks to references
- docker-expert: Reduced ~55%, action-verb description, split checklist/diagnostics to references
- react-best-practices: Added before/after code examples, verification workflow, narrowed triggers
- electron: Condensed platform examples, moved to references, specific action verbs in description
- vercel-sandbox: Deduplicated deps, added error handling, concrete snapshot parsing code

Honest disclosure — I work at @tesslio where we build tooling around
skills like these. Not a pitch - just saw room for improvement and wanted
to contribute.

@gemini-code-assist gemini-code-assist Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Code Review

This pull request refactors and modularizes documentation across several modules, including Electron, Slack, Vercel Sandbox, Docker, and React. It introduces dedicated reference files for detailed tasks and configurations, keeping the primary SKILL.md files concise and focused on core patterns. Key improvements include enhanced error handling in Vercel Sandbox code snippets, more robust environment detection in Docker scripts, and the addition of practical code examples for React performance optimization. Feedback suggests improving command result validation and regex robustness in the Vercel Sandbox documentation.

Comment on lines 102 to +105
const ssResult = await sandbox.runCommand("agent-browser", [
"screenshot", "--json",
]);
const ssPath = JSON.parse(await ssResult.stdout())?.data?.path;
const b64Result = await sandbox.runCommand("base64", ["-w", "0", ssPath]);
const ssData = JSON.parse(await ssResult.stdout());

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

medium

The runCommand result is parsed as JSON without checking the exit code. If the command fails, JSON.parse will throw an unhelpful error. Please verify the exit code before parsing, consistent with the check on line 133.

Suggested change
const ssResult = await sandbox.runCommand("agent-browser", [
"screenshot", "--json",
]);
const ssPath = JSON.parse(await ssResult.stdout())?.data?.path;
const b64Result = await sandbox.runCommand("base64", ["-w", "0", ssPath]);
const ssData = JSON.parse(await ssResult.stdout());
const ssResult = await sandbox.runCommand("agent-browser", [
"screenshot", "--json",
]);
if ((await ssResult.exitCode()) !== 0) {
throw new Error(`Screenshot failed: ${await ssResult.stderr()}`);
}
const ssData = JSON.parse(await ssResult.stdout());

// Build a map of label → element ref for targeted filling
const refMap = new Map<string, string>();
for (const line of snapshot.split("\n")) {
const match = line.match(/^(@e\d+)\s+\w+\s+"(.+)"/);

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

medium

The regex \w+ for the element role is restrictive and may fail on kebab-case roles (e.g., tree-item). Using \S+ is more robust for matching any non-whitespace role name.

Suggested change
const match = line.match(/^(@e\d+)\s+\w+\s+"(.+)"/);
const match = line.match(/^(@e\d+)\s+\S+\s+"(.+)"/);

@rohan-tessl rohan-tessl marked this pull request as ready for review April 2, 2026 08:04
@runkids runkids force-pushed the main branch 2 times, most recently from 6003d18 to da0f7fe Compare June 15, 2026 06:37
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants