May 23, 2026
Skills become a product surface, not a hidden file
Chalie ships a full skill-authoring loop — create, edit, and get proactively suggested new skills — while the policy dashboard stops hardcoding what it should be reading from the code.
Yesterday’s skill library work built the retrieval side — vector and FTS5 search over curated playbooks, plus a service mapping behavioral patterns to skills as you use Chalie. Today was the other half: letting you write skills yourself, and making Chalie propose new ones unasked.
skill_builder landed as a full ability — create, edit, delete, list — over user-defined YAML playbooks indexed into the same FTS5+vec store the curated library uses. The Brain dashboard got a Skills tab to match: My Skills with inline editing, curated skills you can toggle or copy-and-customise, and a read-only expand view for inspecting a playbook without opening an editor. A user skill and a curated skill are the same row shape, found by the same search path, dispatched the same way — the system that suggests workflows to you is the system you can extend yourself.
The proactive half is more interesting. When a reasoning loop exits cleanly after four or more tool-calling iterations, a background pass now looks at the whole trail and asks whether the workflow is generalisable — and if so, offers to save it as a skill via a hidden message, with a five-minute cooldown so it doesn’t nag. The first version was a bespoke one-shot LLM call with hand-rolled JSON parsing and a hard truncation limit on the trail — violations this codebase treats as unacceptable. It got rebuilt same-day as a proper MessageProcessor subclass that runs the standard reasoning loop with skill_builder as its only tool, sees the complete untruncated trail, and lets the model call the tool directly instead of parsing its opinion out of a JSON blob. Net effect: 285 fewer lines, and a code path that behaves like every other agent turn instead of a special case someone has to remember exists.
The policy dashboard got the same treatment: stop hardcoding, start deriving. Tool labels and categories used to live as constants duplicated between backend and frontend; now every Ability class carries its own POLICY_CATEGORY and POLICY_LABELS, and the dashboard reads them off the registry. Meta-tools like find_tools and find_skills are routing infrastructure, not user-controllable permissions, so they’re filtered out by the same registry method rather than a second exclusion list. When categories, labels, and visibility come from one place, an ability can’t silently go missing from the policy screen because someone forgot a second file.
Worth being straight about: a Codex CLI provider integration went in and came back out the same day — added, then reverted, docs and all. That’s the system working as intended: better to catch an unready integration mid-session than carry it into a release candidate.
Housekeeping cleared real weight off the tree: the Progressive Web App stack — service worker, manifest, install prompts, push notifications — is gone, since the frontend is web-only and none of it was earning its keep. The interface plugin protocol and its Deno SDK went with it. Chat got a small but real fix — Enter now inserts a newline instead of sending, so multi-line messages don’t fire early — and timestamps moved to server-side formatting so they stop drifting across timezones. The curated skill library also grew from 5 to 62 playbooks, sourced and validated from public collections, giving yesterday’s search layer something to retrieve.
What this sets up: a skills system that isn’t a static bundled list anymore — it learns what you do, offers to save it, and lets you shape it directly. The next test is whether that loop feels helpful rather than intrusive, which is exactly what a five-minute cooldown and a clean revert path are there to protect against.
-
skill_builderability ships full CRUD over user YAML playbooks, indexed into the same FTS5+vec store as curated skills -
Proactive skill suggestion rebuilt as a
MessageProcessorsubclass — real reasoning loop, untruncated trail, direct tool dispatch, -285 LOC -
Policy dashboard now derives labels/categories from
AbilityRegistryinstead of duplicated hardcoded constants; meta-tools filtered from the UI automatically -
Codex CLI provider integration shipped and reverted same day after review
-
PWA stack and the Deno interface SDK removed entirely; curated skill library expanded from 5 to 62 playbooks