diff --git a/.agents/skills/tessl__bulk-optimize b/.agents/skills/tessl__bulk-optimize new file mode 120000 index 0000000..7249348 --- /dev/null +++ b/.agents/skills/tessl__bulk-optimize @@ -0,0 +1 @@ +../../.tessl/tiles/tessl-labs/bulk-optimize/skills/bulk-optimize \ No newline at end of file diff --git a/.claude/skills/tessl__bulk-optimize b/.claude/skills/tessl__bulk-optimize new file mode 120000 index 0000000..7249348 --- /dev/null +++ b/.claude/skills/tessl__bulk-optimize @@ -0,0 +1 @@ +../../.tessl/tiles/tessl-labs/bulk-optimize/skills/bulk-optimize \ No newline at end of file diff --git a/.codex/config.toml b/.codex/config.toml new file mode 100644 index 0000000..4334324 --- /dev/null +++ b/.codex/config.toml @@ -0,0 +1,4 @@ +[mcp_servers.tessl] +type = "stdio" +command = "tessl" +args = [ "mcp", "start" ] diff --git a/.codex/skills/tessl__bulk-optimize b/.codex/skills/tessl__bulk-optimize new file mode 120000 index 0000000..7249348 --- /dev/null +++ b/.codex/skills/tessl__bulk-optimize @@ -0,0 +1 @@ +../../.tessl/tiles/tessl-labs/bulk-optimize/skills/bulk-optimize \ No newline at end of file diff --git a/.cursor/mcp.json b/.cursor/mcp.json new file mode 100644 index 0000000..ebfccaa --- /dev/null +++ b/.cursor/mcp.json @@ -0,0 +1,12 @@ +{ + "mcpServers": { + "tessl": { + "type": "stdio", + "command": "tessl", + "args": [ + "mcp", + "start" + ] + } + } +} diff --git a/.cursor/skills/tessl__bulk-optimize b/.cursor/skills/tessl__bulk-optimize new file mode 120000 index 0000000..7249348 --- /dev/null +++ b/.cursor/skills/tessl__bulk-optimize @@ -0,0 +1 @@ +../../.tessl/tiles/tessl-labs/bulk-optimize/skills/bulk-optimize \ No newline at end of file diff --git a/.gemini/settings.json b/.gemini/settings.json new file mode 100644 index 0000000..ebfccaa --- /dev/null +++ b/.gemini/settings.json @@ -0,0 +1,12 @@ +{ + "mcpServers": { + "tessl": { + "type": "stdio", + "command": "tessl", + "args": [ + "mcp", + "start" + ] + } + } +} diff --git a/.gemini/skills/tessl__bulk-optimize b/.gemini/skills/tessl__bulk-optimize new file mode 120000 index 0000000..7249348 --- /dev/null +++ b/.gemini/skills/tessl__bulk-optimize @@ -0,0 +1 @@ +../../.tessl/tiles/tessl-labs/bulk-optimize/skills/bulk-optimize \ No newline at end of file diff --git a/.github/skills/tessl__bulk-optimize b/.github/skills/tessl__bulk-optimize new file mode 120000 index 0000000..7249348 --- /dev/null +++ b/.github/skills/tessl__bulk-optimize @@ -0,0 +1 @@ +../../.tessl/tiles/tessl-labs/bulk-optimize/skills/bulk-optimize \ No newline at end of file diff --git a/.github/workflows/skill-review.yml b/.github/workflows/skill-review.yml new file mode 100644 index 0000000..242a4f0 --- /dev/null +++ b/.github/workflows/skill-review.yml @@ -0,0 +1,22 @@ +# Tessl Skill Review — runs on PRs that change any SKILL.md; posts scores as one PR comment. +# Docs: https://github.com/tesslio/skill-review +name: Tessl Skill Review + +on: + pull_request: + branches: [main] + paths: + - "**/SKILL.md" + +jobs: + review: + runs-on: ubuntu-latest + permissions: + pull-requests: write + contents: read + steps: + - uses: actions/checkout@v4 + - uses: tesslio/skill-review@main + # Optional quality gate (off by default): + # with: + # fail-threshold: 70 diff --git a/.mcp.json b/.mcp.json new file mode 100644 index 0000000..ebfccaa --- /dev/null +++ b/.mcp.json @@ -0,0 +1,12 @@ +{ + "mcpServers": { + "tessl": { + "type": "stdio", + "command": "tessl", + "args": [ + "mcp", + "start" + ] + } + } +} diff --git a/.tessl/tiles/tessl-labs/bulk-optimize/README.md b/.tessl/tiles/tessl-labs/bulk-optimize/README.md new file mode 100644 index 0000000..f7c5a22 --- /dev/null +++ b/.tessl/tiles/tessl-labs/bulk-optimize/README.md @@ -0,0 +1,68 @@ +# Bulk Optimize + +A skill for bulk optimization of external skills for PR contributions (Alan's tool). + +## Purpose + +This skill is designed for **contributors** (like Alan) who: +- Improve multiple skills in external/OSS repositories +- Create pull requests with skill improvements +- Need to avoid common PR rejection patterns +- Want to validate changes before submitting + +**NOT for**: Personal skill improvement (use `skill-optimizer` instead) + +## Status: Ready for Testing ✅ + +**Current Score**: 93% (Description: 100%, Content: 85%) + +## Key Features + +### Safety Checks +- ✅ Auto-generated file detection (avoid googleworkspace scenario) +- ✅ Merge conflict warnings (recent path migrations) +- ✅ Domain expertise preservation (avoid coreyhaines31 scenario) +- ✅ Repository pattern analysis + +### Validation +- ✅ Code syntax validation (catch googleworkspace flag errors) +- ✅ Command-line syntax validation +- ✅ File reference validation +- ✅ Post-change score verification + +### PR Guidance +- ✅ Recommends one-skill-per-PR when appropriate +- ✅ Risk assessment for high-scoring skills +- ✅ Suggests opening issues first for unsolicited changes +- ✅ Explains rubric for transparency + +## Files + +- `skills/bulk-optimize/SKILL.md` - Main skill (93% score) +- `skills/bulk-optimize/RUBRIC.md` - Evaluation rubric reference +- `COMPARISON.md` - Analysis vs endpoint approach +- `README.md` - This file + +## Usage + +For bulk PR work on external repos: + +```bash +# Clone/fork external repo +gh repo fork owner/repo --clone + +# In Claude Code with bulk-optimize installed +"Use bulk-optimize to improve skills in this repo" +``` + +The skill will: +1. Run safety checks (auto-generated, conflicts) +2. Analyze all skills +3. Recommend scope (one-skill vs batch) +4. Validate improvements +5. Guide PR creation + +## See Also + +- **skill-optimizer**: For personal skill improvement (simpler, user-focused) +- **auto-p-o**: Original bash script this replaces diff --git a/.tessl/tiles/tessl-labs/bulk-optimize/skills/bulk-optimize/SKILL.md b/.tessl/tiles/tessl-labs/bulk-optimize/skills/bulk-optimize/SKILL.md new file mode 100644 index 0000000..b3a4447 --- /dev/null +++ b/.tessl/tiles/tessl-labs/bulk-optimize/skills/bulk-optimize/SKILL.md @@ -0,0 +1,135 @@ +--- +name: bulk-optimize +description: | + Bulk skill optimization for external PR contributions. Greps for "auto-generated" markers to skip generated files, validates Python/JS syntax with ast.parse and node --check, checks git log for recent migrations, runs tessl skill review, and generates PR templates with before/after scores. Use when improving multiple skills in external repositories, preparing bulk PRs, contributing skill improvements, batch editing skills, or mass updating open source skills. +--- + +# Bulk Optimize + +Improve external SKILL.md files for PR contributions using `tessl skill review` plus safety checks that prevent rejected PRs. Respects maintainers by detecting auto-generated files, preserving domain expertise, and suggesting appropriate PR scope. + +## For External PR Contributions + +Adds safety checks for contributing to other people's repositories. See [TEMPLATES.md](TEMPLATES.md) for lessons from past PR rejections. + +## Workflow + +### Phase 1: Safety Checks (CRITICAL) + +Run before making changes to prevent rejected PRs: + +```bash +# 1. Auto-generated file detection +grep -i "auto-generated\|generated by\|DO NOT EDIT\|generator:" /SKILL.md + +# 2. Recent migration detection +git log --oneline -10 --all -- / | grep -i "migrate\|rename\|move" + +# 3. Repository pattern analysis +find . -name "SKILL.md" -type f | head -5 | xargs head -20 +``` + +**If auto-generated detected**: STOP - changes must go to generator source +**If recent migration found**: WARN - may cause merge conflicts +**Note domain patterns**: Preserve expert framing and terminology in Phase 4 + +### Phase 2: Baseline Evaluation + +**Run review for each skill:** + +```bash +tessl skill review /SKILL.md +``` + +Parse output to extract: +- Overall score +- Validation issues +- Description/content dimension scores +- Judge suggestions + +**If improving multiple skills:** +- Track baseline scores for all +- Identify which need improvement most +- Consider PR scope (see Phase 7) + +### Phase 3: Discover Skill Bundle + +Read SKILL.md and list files in its directory. Bundle = SKILL.md + sibling files + referenced files. Use for progressive disclosure improvements. + +Use bundle context for recommendations. + +### Phase 4: Generate Recommendations (Preserve Domain Expertise) + +Review recommendations to preserve valuable domain knowledge. Grep for specialized terminology (CRO, funnel, A/B test, etc.). + +**KEEP**: Expert framing with domain concepts ("CRO expert who understands funnel optimization, conversion psychology...") +**REMOVE**: Generic expert statements ("You are an expert at helping users...") + +For each issue: what to change, why (dimension + score), before/after, impact, domain check. + +### Phase 5: Validate Recommendations + +```python +# Validate Python syntax +import ast +ast.parse(code_snippet) # Raises SyntaxError if invalid +``` + +```bash +# Validate command flags +gh pr create --help | grep -q "\-\-flag" || echo "Invalid" + +# Validate file references +[[ -f "$SKILL_DIR/$FILE" ]] || echo "Missing file" +``` + +### Phase 6: Present Recommendations + +Show recommendations with: +- Current state (score) +- Issue explanation +- Recommended change +- Impact +- Domain preservation note + +**Get approval per skill or in batch** (user choice). + +### Phase 7: PR Scope Assessment + +**Multiple skills (15+)**: Recommend one-skill-per-PR for easier review. Start with 2-3 highest-impact, get feedback, iterate. + +**High-scoring skills (90%+)**: Open issue first before unsolicited PR. Risk: maintainer may not want cosmetic changes. + +### Phase 8: Apply Changes + +Apply approved changes to approved skills only. + +### Phase 9: Verify Improvements + +```bash +# For each changed skill +tessl skill review /SKILL.md +``` + +Show before/after scores. + +### Phase 10: Final Accuracy Review + +Re-run validation from Phase 5 on updated SKILL.md. Check: +- ✓ Code syntax valid +- ✓ Command flags correct +- ✓ File references exist +- ✓ Third-person voice +- ✓ "Use when..." clause present + +Fix issues, then re-run `tessl skill review`. + +### Phase 11: PR Guidance + +Use commit message format, PR description template, and best practices from [TEMPLATES.md](TEMPLATES.md). Display ready-to-create PR info for user confirmation. + +## Notes + +- Uses `tessl skill review` plus PR-specific safety checks +- For external PR work on repos you don't maintain +- For personal skill improvement, use `skill-optimizer` instead diff --git a/.tessl/tiles/tessl-labs/bulk-optimize/skills/bulk-optimize/TEMPLATES.md b/.tessl/tiles/tessl-labs/bulk-optimize/skills/bulk-optimize/TEMPLATES.md new file mode 100644 index 0000000..ef8c372 --- /dev/null +++ b/.tessl/tiles/tessl-labs/bulk-optimize/skills/bulk-optimize/TEMPLATES.md @@ -0,0 +1,80 @@ +# Bulk Optimize Templates + +## Commit Message Format + +```bash +git commit -m "$(cat <<'EOF' +feat: improve skill quality scores + +- Add "Use when..." clause with trigger keywords (+15%) +- Add executable code example (+10%) +- Structure workflow into numbered steps (+8%) + +Score improvement: 72% → 95% + +Co-Authored-By: Claude Sonnet 4.5 +EOF +)" +``` + +## PR Description Template + +```markdown +Hullo 👋 @ + +I ran your skills through `tessl skill review` and found some targeted +improvements. Here's the before/after: + +| Skill | Before | After | Change | +|-------|--------|-------|--------| +| | 72% | 95% | +23% | + +
+Changes made + +- Added "Use when..." clause with natural trigger keywords +- Replaced abstract advice with executable code example +- Structured workflow into numbered validation steps + +
+ +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. + +If you want to run reviews yourself, just `npm install @tessl/cli` +then run `tessl skill review path/to/your/SKILL.md`. + +Thanks in advance 🙏 +``` + +## Display Before Creating PR + +``` +Ready to create PR: + +Branch: improve/ +Commit: feat: improve skill quality scores +Files: 1 changed (+15 -8) + +PR will be created to: + +Review changes? [Show diff / Create PR / Cancel] +``` + +## Best Practices from Successful PRs + +✅ **Concrete workflows** - Numbered steps with validation checkpoints +✅ **Executable code** - Real, runnable examples (not pseudocode) +✅ **Token efficiency** - Remove explanations of known concepts +✅ **Progressive disclosure** - Link to REFERENCE.md vs inlining details +✅ **One-skill-per-PR** - Easier review, higher acceptance rate + +## Past PR Rejections to Avoid + +| PR | Issue | Lesson | +|----|-------|--------| +| googleworkspace #320 | Invalid command flags | Validate all command syntax | +| coreyhaines31 #65 | Bundled 15+ skills | One skill per PR for easier review | +| JimLiu #53 | Changed high-scoring skill | Don't touch 90%+ skills without invitation | +| Various | Auto-generated files | Always grep for "auto-generated" markers | diff --git a/.tessl/tiles/tessl-labs/bulk-optimize/tile.json b/.tessl/tiles/tessl-labs/bulk-optimize/tile.json new file mode 100644 index 0000000..677d347 --- /dev/null +++ b/.tessl/tiles/tessl-labs/bulk-optimize/tile.json @@ -0,0 +1,11 @@ +{ + "name": "tessl-labs/bulk-optimize", + "version": "0.2.0", + "summary": "Bulk skill optimization for external PR contributions. Detects auto-generated files, merge conflicts, preserves domain expertise, validates syntax. Use when improving multiple external skills for pull requests.", + "private": true, + "skills": { + "bulk-optimize": { + "path": "skills/bulk-optimize/SKILL.md" + } + } +} \ No newline at end of file diff --git a/SKILL.md b/SKILL.md index 207f4de..189879b 100644 --- a/SKILL.md +++ b/SKILL.md @@ -1,9 +1,17 @@ --- name: dna-memory -description: | - DNA 记忆系统 - 让 AI Agent 像人脑一样学习和成长。 - 三层记忆架构(工作/短期/长期)+ 主动遗忘 + 自动归纳 + 反思循环 + 记忆关联。 - 激活场景:用户提到"记忆"、"学习"、"进化"、"成长"、"记住"、"回顾"、"反思"。 +description: "DNA memory system for AI agents: three-layer architecture (working/short-term/long-term) with active forgetting, pattern summarization, reflection loops, and memory associations. Use when building agents that need persistent memory across sessions, context recall, or when user mentions 记忆/学习/记住/回顾/反思." +user-invocable: true +triggers: + - remember this + - recall what you learned + - reflect on past sessions + - 记住这个 + - 回忆一下 + - 反思一下 + - 记忆系统 + - learn from this mistake + - DNA memory --- # DNA Memory - DNA 记忆系统 diff --git a/score_card.png b/score_card.png new file mode 100644 index 0000000..8514537 Binary files /dev/null and b/score_card.png differ diff --git a/scores.json b/scores.json new file mode 100644 index 0000000..6d64871 --- /dev/null +++ b/scores.json @@ -0,0 +1 @@ +{"repo": "AIPMAndy/dna-memory", "skills": [{"skill": "dna-memory", "before": 63, "after": 73}]} \ No newline at end of file diff --git a/tessl.json b/tessl.json new file mode 100644 index 0000000..bb07e2a --- /dev/null +++ b/tessl.json @@ -0,0 +1,9 @@ +{ + "name": "my-project", + "mode": "vendored", + "dependencies": { + "tessl-labs/bulk-optimize": { + "version": "0.2.0" + } + } +}