Build in public: keeping the OSK v4 AI Assistant robust at 250+ skills
Canonical version: Build in public: keeping the OSK v4 AI Assistant robust at 250+ skills.
Build-in-public update on the AI Assistant Architecture inside OSK v4.
In OSK v4, I built these mechanisms in from the start instead of adding them at the end. The system now has more than 250 skills, and it's steadier than it was at 50.
Here are the eight mechanisms:
- Capability indirection. Every skill declares
metadata.capability: <domain>.<subject>.<verb>. Cross-skill references go through capabilities, never names. Renaming a skill doesn't break the skills that refer to it. It's dependency inversion applied to skills. - Runtime path resolution, no hardcoding. This was today's biggest refactor. About 120 skills used to embed their own copy of "where does the daily note live" logic. Now they declare
metadata.note-typesand resolve folders, templates and prefixes fromosk-cliat run time, using one canonical Setup block. A skill can no longer point to a stale folder path. - Spec-layered frontmatter, validator-enforced.
osk-meta-skill-healthwent from 10 checks to 18 yesterday. New ones includespec-layering-top-level,capability-collision(one capability equals one skill, hard error),workflow-without-composes, andclaude-code-field-nested. The validator now checks the frontmatter contract automatically. - Dispatcher consolidation. The moment a second skill would share
(subject, verb)with an existing one, I refactor into a polymorphic skill with a--modeflag.osk-action-archiveabsorbed four siblings this way. That's the single responsibility principle (SRP) applied per capability. - Self-updating capability registry. The AI Assistant Capabilities note runs Dataview Serializer plugin for Obsidian queries that read SKILL.md frontmatter directly. There's nothing to regenerate, so the receptionist's routing table always matches the skills that actually exist.
- Catalog visibility hygiene. Claude Code packs every visible skill's description into an 8000-char budget. Context loaders,
*-sharedand*-barrelskills MUST setdisable-model-invocation: true. This keeps routing precise as the number of skills grows. - Progressive disclosure. Skills don't preload. Frontmatter is always visible; bodies only load when a skill actually fires. The receptionist routes from 250+ frontmatter blocks, then pulls one SKILL.md into context on demand. This is the Prompt Lazy Loading AI Design Pattern (PLL). The token cost stays flat as skills are added.
- Call-chain safety. Max depth 3, no duplicates, no cycles, chain context mandatory. These hard limits prevent "A calls B calls A" loops between agents.
If you're building anything with more than ten AI skills, look at capability indirection and runtime path resolution first. The other six mechanisms build on them.
Get the Obsidian Starter Kit before the price goes up

🔗 https://www.store.dsebastien.net/product/obsidian-starter-kit/
Related
- AI Assistant Architecture
- AI Assistant Capabilities
- AI Agent Skills
- Receptionist AI Design Pattern
- Prompt Lazy Loading AI Design Pattern (PLL)
- Claude Code
- Obsidian Starter Kit
About Sébastien
Ready to get to the next level?
Found this valuable? Share it with someone who needs it.
