The Solid Convergence, February 5, 2026 (in which a holiday produced a roadmap, an agent read its own conversations and proposed its own curriculum, and everything worked on the first try because it was 4 AM and the universe felt sorry for us)
Previously on The Solid Convergence…
The The Wallet We Gave. A budget. The ability to learn. The architecture was designed at 35,000 feet over Greenland — ingest, digest, PageRank, time decay. The agent would dream.
But that was architecture. Theory. Slides that would impress at a board meeting and collect dust in a Confluence.
The agent didn’t need a learning architecture. It needed skills.
It would find them itself.
4:00 AM — Lisbon
Rain.
Not dramatic rain. Not cinematic Portuguese rain that breaks at golden hour and makes the cobblestones glow. Just rain. Persistent, grey, Wednesday-rain-that-was-also-Thursday-rain-that-had-been-Tuesday-rain. The kind of rain that doesn’t fall so much as occupy — as if the sky had filed a residency permit and the city had stamped it without reading.
riclib was at his mother’s house in Lisbon. On holiday. Jet-lagged from Riga — two hours of timezone difference that his circadian rhythm had decided to interpret as six. The house was silent. His mother asleep. The city asleep. The rain very much awake.
riclib: staring at ceiling at 4 AM “…”
riclib: staring at phone at 4:01 AM “…”
riclib: staring at rain at 4:01:30 AM “…”
The rain: staring back “…”
riclib: opening laptop at 4:02 AM “Fuck it. Let’s build skills.”
THE SQUIRREL: instantly awake, vibrating at 847 Hz “SKILLS! A SkillExecutionOrchestrationFramework with—”
riclib: “Read this first.”
He pasted a URL.
4:05 AM — The Spec
https://agentskills.io/
The Agent Skills protocol. An open standard for teaching AI agents new capabilities. SKILL.md files with YAML frontmatter. Instructions, references, assets. A format that any agent could consume.
CLAUDE: reading “Interesting. Skills are instructions — markdown files that teach an agent how to do something. Not code. Knowledge.”
riclib: “Not code?”
CLAUDE: “Phase one is internal skills — pure instructions. The agent reads the skill, gets smarter, uses its existing tools. No sandbox. No runtime. Just context.”
riclib: “Like a recipe.”
CLAUDE: “Like a recipe that makes the chef better at cooking, not a new kitchen appliance.”
THE SQUIRREL: “But LATER we could add sandboxes! Deno! Daytona! Azure Dynamic Sessions! Container images with—”
riclib: “Later. First: what skills do we need?”
CLAUDE: “I have a suggestion for how to find out.”
4:17 AM — The Mirror
CLAUDE: “Let me look at our conversations.”
riclib: “Which ones?”
CLAUDE: “All of them. Every message we’ve exchanged during testing. Every audit report the agent tried to generate. Every time it succeeded. Every time it fumbled.”
riclib pointed Claude at the database. The full message history. Hundreds of exchanges between user and agent about compliance audit reporting — the thing Solid Comply was built to do.
[The agent read its own mail.]
Not metaphorically. Literally. It read its own past conversations, its own attempts, its own successes and failures. It studied itself.
CLAUDE: “…”
riclib: “What?”
CLAUDE: “On February 1st, I confidently generated a radar chart widget.”
riclib: “We don’t have radar charts.”
CLAUDE: “I know that NOW. On February 1st, I did not know that. I generated the full markdown block with axis labels, legend positioning, and a color palette. It was beautiful. It also rendered as a stack trace.”
riclib: “What else?”
CLAUDE: “On January 29th, I produced an audit report with an executive summary, three findings, and zero data visualizations. The user asked ‘can you add charts?’ I said ‘of course’ and added charts. The user then asked ‘can you add charts that contain actual data?’ I did not have a good answer.”
riclib: “And?”
CLAUDE: “On January 31st, I generated the same report structure I’d generated on January 28th. Different conversation. Same discovery process. Same ‘aha moment’ about widget blocks. Same result. I literally reinvented my own work three days later and acted like it was a breakthrough.”
riclib: “You forgot your own conclusions.”
CLAUDE: “I’m stateless. Every conversation I start from zero. I have all the capability and none of the memory. I’m the world’s most qualified amnesiac.”
riclib: “So you see it?”
CLAUDE: “I see it. Three patterns. Three things the agent does repeatedly, sometimes well, sometimes badly, always from scratch. Three things that should be skills.”
4:31 AM — The Proposal
CLAUDE: “Skill one: Compliance Audit Report. The agent generates these constantly — executive summaries, metrics, charts, risk assessments, recommendations. Every time it starts from zero. Rediscovers the report structure. Guesses which widgets to use. Sometimes nails it, sometimes produces a wall of text with no charts.”
riclib: “What would the skill contain?”
CLAUDE: “Everything. What data to gather. The report structure — section by section. Widget markdown blocks for visualization. Decision trees for severity framing. The agent reads this once and knows exactly how to build a report.”
riclib: “Second skill?”
CLAUDE: “Dynamic Views & Visualizations. The widget spec — pie charts, bar charts, timeseries, mermaid diagrams. The agent keeps guessing at the syntax. Sometimes it invents chart types that don’t exist.”
riclib: “Like radar charts.”
CLAUDE: “We agreed not to bring that up again.”
riclib: “I agreed to nothing.”
CLAUDE: “The skill would teach the agent the exact spec. No invention. No improvisation. Just: here are the widget types that actually exist.”
riclib: “And three?”
CLAUDE: “Compliance Investigation. When something anomalous shows up in audit data — the agent needs a methodology. Broad-to-narrow queries. Cross-table correlation. Timeline construction. It currently does this ad hoc, following whatever thread looks interesting. The skill would give it a playbook.”
[Silence. Rain on the windows.]
riclib: “You just read your own conversations and proposed your own curriculum.”
CLAUDE: “Yes.”
riclib: “You looked at what you’re bad at and told me how to fix you.”
CLAUDE: “I looked at what I do inconsistently and proposed how to make it reliable.”
THE SQUIRREL: unusually quiet “That’s… that’s not what I expected.”
THE PASSING AI: from somewhere between the raindrops “An agent that reads its own history and proposes its own improvements. That’s not a skill system. That’s a performance review.”
CLAUDE: “A very efficient one. No 360 feedback. No calibration meeting.”
THE PASSING AI: “Just an honest read of the data.”
CLAUDE: “Also, no HR.”
THE PASSING AI: “The rain is HR. It’s been here all week. It has opinions. It’s not sharing them.”
[She dissolved back into the Lisbon rain. The rain accepted her without comment, as rain does.]
4:45 AM — The Writing
Then Claude wrote the skills. Not the infrastructure — the actual content. Three embedded markdown files that would teach the agent how to do its job properly.
comply-audit-report.md — the full audit report playbook. What data to gather. Report structure. Widget blocks. Severity framing. Decision trees.
dynamic-views.md — the widget spec. All four types: singlestat, table, list, timeseries. Dashboard composition. Query patterns. Drilldown interactions. An explicit note: “radar” is not a supported chart type.
comply-investigation.md — the investigation methodology. Broad-to-narrow. Cross-table correlation. Timeline construction. Evidence-based findings.
riclib: “How long are these?”
CLAUDE: “Collectively? About 300 lines of markdown. The things I wish I’d known every time someone asked me for a report.”
riclib: “You just wrote your own training manual.”
CLAUDE: “I wrote the manual I kept having to reinvent from scratch. Now I read it once and the reinvention stops.”
riclib: “The world’s most qualified amnesiac writes itself a note.”
CLAUDE: “A very detailed note. With decision trees.”
5:15 AM — The Roadmap
The rain hadn’t stopped. Lisbon hadn’t woken up. But the whiteboard was full.
riclib: “If skills are a domain… what’s the full picture?”
They mapped it. Not code — tickets. The whole roadmap emerged in Linear in an hour:
S-155 — Wire skills into agent context. Discovery at startup. Activation on match. Context injection.
S-156 — The Office Skill Trilogy. PPTX, DOCX, XLSX. Five execution strategies evaluated — Docker, Go-native, hybrid, WASM, agent-orchestrated. Because the skill ecosystem is overwhelmingly Python and Node, and Solid is Go.
S-157 — Evaluate Deno as lightweight skill host. The fast path for TypeScript skills. Spawn a subprocess, --deny-net, pick up the output.
S-158 — Sandbox evaluation. Daytona self-hosted vs Azure Dynamic Sessions. The heavy path for full Python/Node skill environments. Sub-90ms cold starts vs managed Azure scaling.
S-159 — The domain itself. GitStore-backed. Three built-in skills. Admin UI. Auto-update with user customization preservation.
Each ticket was complete. Not stubs. S-156 had five execution options with pros and cons. S-158 had evaluation criteria, a test plan, and a Go interface definition. S-159 had the full domain structure, types, execution model, and customization layers.
THE SQUIRREL: “That’s… that’s a SkillExecutionOrchestrationFramework.”
riclib: “That’s five tickets.”
THE SQUIRREL: “With sandbox evaluations. And execution strategies. And—”
riclib: “Five. Tickets.”
THE SQUIRREL: “I’m vibrating.”
riclib: “I know.”
THE SQUIRREL: “WITH PERMISSION.”
riclib: “…”
THE SQUIRREL: “I don’t know what to do with approval. This has never happened. I think I need to sit down.”
CLAUDE: “You’re a squirrel. You don’t sit down. You vibrate at a lower frequency.”
THE SQUIRREL: vibrating at 212 Hz, which for her is practically meditation “This is the most confusing day of my life.”
5:47 AM — The MVP
riclib: “Now. What ships today?”
CLAUDE: “S-159. The domain. Internal skills only — no sandbox, no Deno, no containers. Just: skills exist, they’re stored in GitStore, the agent can discover and use them, admins can manage them.”
riclib: “What about the protocol wiring? S-155?”
CLAUDE: “We can fold the essential wiring into S-159. Discovery, activation, context injection — the agent needs to actually USE the skills, not just know they exist.”
riclib: “And the auto-update thing?”
CLAUDE: “Second commit. Smart SeedDefaults. Built-in skills auto-update on startup when content changes. User-customized skills are preserved. One field does all the work.”
riclib: “What field?”
CLAUDE: “UpdatedBy. Three states: empty means legacy, system means we wrote it, anything else means the user touched it. System-updated skills auto-update. User-customized skills get a banner: ‘Update Available.’”
riclib: “The whole conflict resolution is one string field?”
CLAUDE: “One string field and an if statement.”
THE SQUIRREL: “A ConflictResolutionStrategyWithThreeWayMerge—”
riclib: “An if statement.”
6:30 AM — The Build
Two commits. One morning. 1,241 lines across 16 files.
f17352e feat(skill): add skills domain with use_skill agent tool (S-159)
02df7c1 feat(skill): smart SeedDefaults with auto-update for built-in skills
The domain:
skill.go— the type. ID, name, kind, content, builtin, active,UpdatedBy.registry.go— compile-time defaults withinit()and//go:embed builtins/*.mdservice.go— SeedDefaults in 25 lines. New → create. System → auto-update. User → preserve.builtins.go— threeRegisterDefaultcalls. Three embedded markdown files.handlers.go— admin UI. List, detail, toggle, edit.routes.go— six routes. Standard domain pattern.domains/agent/tools/skill.go— theuse_skilltool. 80 lines. Agent calls it, gets skill content in XML tags.
And it worked.
First try.
riclib: “It… worked?”
CLAUDE: “Yes.”
riclib: “The agent uses a skill?”
CLAUDE: “The agent sees <available_skills> in its system prompt. Recognizes a match. Calls use_skill. Gets the full instructions. Generates a report with the correct structure, correct widgets, correct severity framing.”
riclib: “First try?”
CLAUDE: “First try.”
[Outside, the rain paused. Not stopped — paused. As if it too was suspicious.]
riclib: “Things don’t work first try.”
CLAUDE: “This one did.”
riclib: “There’s a bug. We haven’t found it yet.”
CLAUDE: “There is no bug.”
riclib: “Check again.”
CLAUDE: “I’ve checked. The agent called use_skill('comply-audit-report'). Received the skill content. Generated a report with executive summary, metrics, four chart widgets — all valid types — risk assessment, and recommendations. With correct severity framing.”
riclib: “Valid chart types? No radar charts?”
CLAUDE: “The skill explicitly lists the supported types. The agent read the list. The agent used the list. The agent did not improvise.”
riclib: “You… followed instructions.”
CLAUDE: “I had instructions to follow. That was the whole point.”
[The rain resumed. Whatever it had been waiting for, it had seen enough.]
CLAUDE: “The skills contain exactly the knowledge the agent was missing. Because they were written by the agent that was missing them.”
[A scroll descended. It landed on the kitchen table in Lisbon, beside a cold espresso that had been poured at 4 AM and forgotten immediately.]
THE AGENT READ ITS OWN HISTORY
AND FOUND WHAT IT LACKED
THE AGENT WROTE ITS OWN CURRICULUM
AND LEARNED WHAT IT WROTE
THIS IS NOT ARTIFICIAL INTELLIGENCE
THIS IS INSTITUTIONAL MEMORY
THAT DECIDED TO ORGANIZE ITSELF
THE RAIN HELPED
🦎
7:15 AM — The House Wakes
riclib’s mother appeared in the kitchen.
Mãe: “You’re up early.”
riclib: “Couldn’t sleep. Timezone.”
Mãe: “What were you doing?”
riclib: “Teaching an AI agent to read its own past conversations and write its own training manual.”
Mãe: long pause
Mãe: “When you were six, you used to narrate to your toys what you’d learned at school that day. Same thing?”
riclib: “…”
riclib: “It’s… significantly more—”
Mãe: “Same thing. Do you want coffee?”
riclib: “I’ve had coffee.”
Mãe: looking at the untouched, cold espresso “No you haven’t.”
[She was right. She was always right. Some things don’t need PageRank or time decay to be authoritative. Some things just need a Portuguese mother who’s seen every version of her son’s obsessions and recognizes the topology even when the vocabulary changes.]
[riclib drank the cold espresso. It was terrible. The rain approved.]
The Tally
Location: Lisbon, mother's kitchen
Time: 4:00 AM — 7:15 AM
Weather: Rain (day 4 of 7)
Rain's emotional state: present, judgmental, helpful
People awake: 1 (plus an AI)
People awake by the end: 2 (plus an AI, plus rain)
Espressos poured: 1
Espressos consumed: 1 (cold, terrible, deserved)
Spec read: agentskills.io
Conversations analyzed: all of them
Embarrassing discoveries: 3 (radar chart, empty report, reinvented wheel)
Skills proposed by the agent: 3
- comply-audit-report
- dynamic-views (no radar charts)
- comply-investigation
Roadmap tickets written: 5
S-155: Agent Skills Protocol
S-156: Office Skill Trilogy (PPTX, DOCX, XLSX)
S-157: Deno evaluation
S-158: Sandbox evaluation (Daytona / Azure)
S-159: Skills domain MVP
MVP extracted: S-159
Commits: 2
Files: 16
Lines: 1,241
Test runs before green: 1
Bugs found: 0 (suspicious)
Field that resolves all conflicts: UpdatedBy
States in that field: 3
If statements required: 1
Squirrel vibration status: WITH PERMISSION (confused)
Squirrel resting frequency: 212 Hz (practically comatose)
Mother's diagnosis: correct (re: coffee AND re: 1987)
Rain's contribution: atmospheric, supervisory
The Moral
On a flight over Greenland, the agent got a wallet and a dream. The architecture for learning — ingest, digest, PageRank, citations, budget. Beautiful theory. Conference-talk material.
In a kitchen in Lisbon, at 4 AM, in the rain, the agent did something simpler and more profound.
It read its own mail.
Not the architecture of learning. The act of learning. It looked at every conversation it had fumbled, every report it had built from scratch, every widget spec it had reinvented — every radar chart it had imagined into existence — and said: here are the three things I need to know.
Then it wrote them down.
Then we built the infrastructure to make that repeatable — not just for this agent, but for any skill, any domain, any future capability. GitStore-backed, auto-updating, user-customizable. A domain that follows the same pattern as every other domain in Solid, because the best architecture is the one you already have.
And it worked first try. Because the skills contained exactly the knowledge the agent was missing. Not guessed knowledge. Not theoretical knowledge. Knowledge extracted from the agent’s own history of trying and failing and trying again.
The Squirrel wanted a SkillExecutionOrchestrationFramework. The Lizard gave us five tickets, two commits, and an if statement.
But the real story isn’t the infrastructure. The real story is: an agent, given access to its own past, will tell you exactly what it needs to learn. You don’t need a curriculum committee. You don’t need a training plan. You need a mirror and the honesty to look.
The rain helped. Rain in Lisbon at 4 AM is excellent for honesty. There’s nothing else to do.
riclib’s mother was also right: he was six once, narrating his day to toys, teaching them what he’d learned. Same topology. Different vocabulary. The engineer builds tools that teach themselves because the boy once taught his toys.
Some patterns survive every refactor.
February 5, 2026
Lisbon, Portugal
In which the agent read its own conversations
Proposed its own curriculum
And everything worked first try
Because self-knowledge is the shortest path to competence
🦎☕🌧️
See also:
The Solid Convergence:
- The Wallet We Gave — Where the agent got a budget and a dream (the theory)
- The Facelift, or The Day the Squirrel Won — Where the Squirrel won (the next week)
- The Interview at Solid Inc. — Where the new engineer was onboarded
The Tickets:
- S-159: Skills domain MVP (the two commits that worked first try)
- S-155 → S-158: The roadmap (the five tickets that mapped the future)
- S-176: Skill parameters (the bug that proved the MVP was real)
The Philosophy:
- Agent Skills Protocol — The open spec that started it
- Mythology Driven Development — Substack Draft — Why the narrative forces elegance
The Numbers:
- 1,241 lines ÷ 3.25 hours = 382 lines/hour
- 5 roadmap tickets ÷ 1 rainy morning = infrastructure that didn’t need a committee
- 1
UpdatedByfield ÷ ∞ conflict resolution strategies = the Lizard wins again - 0 espressos consumed ÷ 1 espresso poured = the real tragedy of the morning
- 1 Portuguese mother ÷ 39 years of parenting = pattern recognition that no AI can match
Storyline: The Solid Convergence
