Resolution pipeline
On every chat start, the server callsskill_manager.get_user_skills(email). The result resolves through three fallback levels:
- Memory cache — 60-second TTL. Same
(email)hit twice in a minute = dict lookup. - Settings Wrapper API — if
MCP_TOKENS_URLis set, fetches the user’s enabled skills. - Disk cache — if the API is down but we cached last known good, reuse it.
- Hardcoded defaults — all 13 public skills.
System prompt injection
The skill list becomes an<available_skills> XML block injected into the system prompt:
SKILL.md files on demand.
User skill mounts
User-uploaded skills (ZIPs from the Settings Wrapper) are:- Downloaded and extracted atomically: unzip to temp, rename to final.
- Cached under
/data/skills-cache/{name}/on the host. - Tracked in
.manifest.json(name → SHA-256 + timestamp). - Bind-mounted into the sandbox at
/mnt/skills/user/{name}/— read-only.
SKILLS_CACHE_HOST_PATH.
