Routing intent correctly: a case study in why "the agent can technically do it" isn't the same as "the agent should do it this way"
Sharing a small but instructive fix from Aiden's firmware. Before PR #586, giving the agent a remote skill URL didn't reliably route to an installation action — it could just as easily be read as a general content-retrieval request, with the agent reaching for a web scraper, shelling out to curl, creating files manually, and patching them in step by step. Every individual tool call worked. The composition was still the wrong shape for a request with one clear, singular intent.
The fix gives skill installation its own dedicated action. A supported HTTP(S), GitHub tree, or GitHub blob Skill URL now routes to skill_manage install, which stages SKILL.md and companion files, validates the staged content against supported requirements, and only then publishes atomically — never exposing partial files mid-install.
We validated this with a real-agent reproduction: a natural-language prompt containing a GitHub Skill URL, run through the agent both before and after the routing change. Before: a multi-tool trace involving a scraper, shell, curl, and manual patch calls. After: exactly one skill_manage install call, start to finish.
The part I think is generally useful beyond this specific feature: separating retrieval, validation, and publication into distinct stages made the whole flow easier to reason about and debug, independent of whether the underlying task is skill installation specifically. Retrieval prepares a candidate. Validation checks it. Publication only happens after acceptance. When something fails, you know exactly which stage it failed at, and the action returns concrete metadata (file writes, changes, integrity result, and specific mismatch details on patch conflicts) rather than requiring you to reconstruct what happened from a chain of unrelated tool outputs.
Scope, stated plainly: merged into the open-source firmware repo, not automatically deployed to every device. Only supported URL formats and files that pass validation install — arbitrary sites, repos, or packages aren't installable through this path. Validation checks structure and integrity; it isn't a substitute for actually reviewing third-party skill content before you use it.
PR: https://github.com/AidenAI-IO/aiden-firmware/pull/586
Full writeup: https://aidenai.io/blog/aiden-can-now-install-ai-agent-skills-directly-from-a-url/
Curious whether others building agentic tool-routing have run into the same "technically capable, wrong composition" pattern — and if so, what your staging/validation/publication boundaries looked like.

