Install any skill in seconds. Free to start, no credit card required.
Get Started Free →Build composable skill modules with hub-and-spoke loading. Use when token budget is tight.
.claude/skills/athola-modular-skills/SKILL.md| Test case | Without → With | Effect | Δ tokens | Δ turns |
|---|---|---|---|---|
| case-01 | ✗→✓ | ▲ Improved | 142% | 0% |
| case-02 | ✗→✓ | ▲ Improved | 44% | 0% |
| case-03 | ✗→✓ | ▲ Improved | 8% | 0% |
| case-08 | ✗→✓ | ▲ Improved | -31% | 0% |
| case-11 | ✗→✓ | ▲ Improved | 36% | 0% |
abstract:skill-authoring)
leyline:progressive-loading)This framework breaks complex skills into focused modules to keep token usage predictable and avoid monolithic files. We use progressive disclosure: starting with essentials and loading deeper technical details via @include or Load: statements only when needed. This approach prevents hitting context limits during long-running tasks.
Modular design keeps file sizes within recommended limits, typically under 150 lines. Shallow dependencies and clear boundaries simplify testing and maintenance. The hub-and-spoke model allows the project to grow without bloating primary skill files, making focused modules easier to verify in isolation and faster to parse.
Three tools support modular skill development:
skill-analyzer: Checks complexity and suggests where to split code.token-estimator: Forecasts usage and suggests optimizations.module_validator: Verifies that structure complies with project standards.We design skills around single responsibility and loose coupling. Each module focuses on one task, minimizing dependencies to keep the architecture cohesive. Clear boundaries and well-defined interfaces prevent changes in one module from breaking others. This follows Anthropic's Agent Skills best practices: provide a high-level overview first, then surface details as needed to maintain context efficiency.
Deprecated: skills/shared/modules/ directories. This pattern caused orphaned references when shared modules were updated or removed.
Current pattern: Each skill owns its modules at skills/<skill-name>/modules/. When multiple skills need the same content, the primary owner holds the module and others reference it via relative path (e.g., ../skill-authoring/modules/anti-rationalization.md). The validator flags any remaining skills/shared/ directories.
Analyze modularity using scripts/skill_analyzer.py. You can set a custom threshold for line counts to identify files that need splitting.
bashpython scripts/skill_analyzer.py --file path/to/SKILL.md --threshold 100
From Python, use analyze_skill from abstract.skill_tools.
Estimate token consumption to verify your skill stays within budget. Run this from the skill directory:
bashpython scripts/tokens.py
Check for structure and pattern compliance before deployment.
bashpython scripts/abstract_validator.py --scan
Start by assessing complexity with skill_analyzer.py. If a skill exceeds 150 lines, break it into focused modules following the patterns in ../../docs/examples/modular-skills/. Use token_estimator.py to check efficiency and abstract_validator.py to verify the final structure. This iterative process maintains module maintainability and token efficiency.
Identify modules needing attention by checking line counts and missing Table of Contents. Any module over 100 lines requires a TOC after the frontmatter to aid navigation.
bash# Find modules exceeding 100 lines find modules -name "*.md" -exec wc -l {} + | awk '$1 > 100'
Our standards prioritize concrete examples and a consistent voice. Always provide actual commands in Quick Start sections instead of abstract descriptions. Use third-person perspective (e.g., "the project", "developers") rather than "you" or "your". Each code example should be followed by a validation command. For discoverability, descriptions must include at least five specific trigger phrases.
markdown## Table of Contents - [Section Name](#section-name) - [Examples](#examples) - [Troubleshooting](#troubleshooting)
Standard patterns for triggers, enforcement language, and anti-rationalization:
Detailed guides for implementation and maintenance:
modules/enforcement-patterns.mdmodules/core-workflow.mdmodules/implementation-patterns.mdmodules/antipatterns-and-migration.mdmodules/design-philosophy.mdmodules/troubleshooting.mdmodules/optimization-techniques.md - reducing large skill file sizes through externalization, consolidation, and progressive loadingskill_analyzer.py, token_estimator.py, and abstract_validator.py in ../../scripts/.../../docs/examples/modular-skills/ for reference implementations.Table of Contents immediately after its frontmatter.
skills/shared/modules/ directory exists; all modules live underskills/<skill-name>/modules/.
python scripts/abstract_validator.py --scan exits 0 with no structural warnings on theaffected skill directory.
python scripts/tokens.py reports total estimated tokens within the declaredestimated_tokens budget for the hub SKILL.md.
| Case | Status | Duration (ms) | Turns | Tokens | Tool calls | ||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| Without | With | Δ | Without | With | Δ | Without | With | Δ | Without | With | Δ | ||
case-06 | pass→pass | 12,524 | 2,507 | -80% | 1 | 1 | 0% | 1,873 | 1,647 | -12% | 0 | 0 | — |
case-01 | fail→pass | 30,651 | 8,694 | -72% | 1 | 1 | 0% | 1,249 | 3,022 | +142% | 0 | 0 | — |
case-02 | fail→pass | 15,914 | 13,122 | -18% | 1 | 1 | 0% | 2,580 | 3,714 | +44% | 0 | 0 | — |
case-03 | fail→pass | 16,107 | 9,695 | -40% | 1 | 1 | 0% | 2,824 | 3,057 | +8% | 0 | 0 | — |
case-04 | pass→pass | 12,998 | 5,451 | -58% | 1 | 1 | 0% | 2,118 | 2,303 | +9% | 0 | 0 | — |
case-05 | pass→pass | 23,824 | 11,593 | -51% | 1 | 1 | 0% | 3,771 | 3,241 | -14% | 0 | 0 | — |
case-07 | pass→pass | 12,774 | 2,993 | -77% | 1 | 1 | 0% | 1,960 | 1,861 | -5% | 0 | 0 | — |
case-08 | fail→pass | 16,956 | 2,076 | -88% | 1 | 1 | 0% | 2,294 | 1,580 | -31% | 0 | 0 | — |
case-09 | pass→pass | 11,022 | 3,030 | -73% | 1 | 1 | 0% | 1,600 | 1,742 | +9% | 0 | 0 | — |
case-10 | pass→pass | 9,920 | 1,799 | -82% | 1 | 1 | 0% | 1,435 | 1,586 | +11% | 0 | 0 | — |
case-11 | fail→pass | 7,534 | 1,791 | -76% | 1 | 1 | 0% | 1,172 | 1,599 | +36% | 0 | 0 | — |
case-12 | fail→pass | 15,915 | 2,072 | -87% | 1 | 1 | 0% | 2,546 | 1,658 | -35% | 0 | 0 | — |
case-13 | fail→pass | 7,047 | 1,526 | -78% | 1 | 1 | 0% | 1,096 | 1,586 | +45% | 0 | 0 | — |
case-14 | fail→pass | 12,987 | 1,729 | -87% | 1 | 1 | 0% | 1,925 | 1,589 | -17% | 0 | 0 | — |
case-15 | fail→pass | 29,086 | 1,600 | -94% | 1 | 1 | 0% | 2,467 | 1,550 | -37% | 0 | 0 | — |
case-20 | pass→pass | 11,266 | 2,331 | -79% | 1 | 1 | 0% | 1,987 | 1,717 | -14% | 0 | 0 | — |
case-16 | fail→pass | 12,028 | 4,372 | -64% | 1 | 1 | 0% | 1,949 | 2,106 | +8% | 0 | 0 | — |
case-17 | pass→pass | 8,907 | 2,020 | -77% | 1 | 1 | 0% | 1,292 | 1,651 | +28% | 0 | 0 | — |
case-18 | fail→fail | 6,896 | 1,531 | -78% | 1 | 1 | 0% | 930 | 1,580 | +70% | 0 | 0 | — |
case-19 | fail→pass | 8,258 | 1,126 | -86% | 1 | 1 | 0% | 1,140 | 1,473 | +29% | 0 | 0 | — |
case-21 | fail→fail | 9,997 | 1,985 | -80% | 1 | 1 | 0% | 1,410 | 1,616 | +15% | 0 | 0 | — |
case-22 | pass→pass | 3,866 | 1,138 | -71% | 1 | 1 | 0% | 529 | 1,511 | +186% | 0 | 0 | — |
DecimalAI ran this skill against gemini-3.6-flash twice over the same eval suite — once with the skill loaded and once without — and compared the two runs case by case. 22 cases were attempted, and 21 counted toward the lift figure. The other 1 produced results that are not comparable between the two arms, so they are excluded from the headline rather than averaged into it. The headline lift of +50 percentage points is the difference between those two pass rates over the 21 comparable cases.
Without the skill loaded, the model failed this case. With it loaded, the same prompt on the same model passed. This is one improved case from the latest verified run; every case, including any that regressed, is in the table above.
Other measured skills in the registry, with their headline benchmark lift.