Week 10 - Back from Break and First Nanobot Contributions

Getting Back to Work

This week was our first meeting back after spring break, and it felt good to finally shift from planning into actually contributing to Nanobot. During break I’d been reading through the codebase and getting familiar with how things were structured, but there’s a big difference between reading code and writing something that needs to fit into it. Each of us on the team picked an issue to work on

My PR: Inline Skill Activation

The problem I noticed was that in Nanobot’s existing architecture, all skill activation is determined by the agent — there’s no way for the user to pre-activate or pre-load a skill before the agent starts reasoning. You could ask the agent to load a skill for you, but that adds an extra round trip of tool calls just to get the context into the conversation. I wanted a more direct approach: let the user activate a skill themselves, inject the content of SKILL.md straight into the user message, and wrap it in XML tags that clearly signal to the agent “this is user-activated skill content” as opposed to the user’s actual query. That way the agent gets the skill context immediately without any back-and-forth.

A lot of the design decisions came from reading through the codebase and thinking about practical usage. For example, I added a /skills command that lists all configured skills with availability status — something the user can check without involving the agent at all. Another key decision was injecting the skill content into the user message rather than the system prompt. This avoids breaking the LLM’s prompt cache, and because user messages get strong attention from the agent, it ensures the skill content actually gets prioritized alongside the user’s intent.

What made this PR really interesting was how it evolved through collaboration. My original approach was a straightforward /skill slash command, but right after I opened the PR, a previous contributor suggested switching to an inline $<name> syntax instead — so that skill references could appear anywhere in a message rather than only at the start. It was one of those suggestions that immediately clicks: obviously better, and not something I would have thought of on my own. I quickly pivoted the implementation, we reached agreement on the design, and the whole back-and-forth felt surprisingly smooth. That’s the kind of interaction that makes open source exciting.

Looking Ahead

Now that the first PR is merged, I’m feeling a lot more comfortable navigating the Nanobot codebase. I want to keep the momentum going and find another issue to work on next week, ideally something a bit more involved now that I understand the project’s patterns and review process better.

Written before or on March 29, 2026