6 ms·
Show HN: Skillscript – A declarative, sandboxed language for tool orchestration
Hi HN — I'm Scott. Skillscript is a small language I built to write what I want my local agent to actually do, in a form I can read and version, instead of hoping the model gets it right each time.
The itch started with something small. I wanted my NanoClaw agent to run my morning brief the same way every day. Check overnight tickets, summarize the deploy pipeline, flag anything urgent. Every session, it would re-figure out how to do this from scratch, drift a little, and cost tokens for what's basically a fixed procedure. I could put it in a system prompt or an MD skill file, but those are still instructions the model reads and reasons about every time. And I wanted it to run autonomously and then hand it to the model to reason over the data.
The second thing that pushed me: I wanted to use small local models for the cheap stuff. They're capable, but if you just hand them the wheel, they wander. What I wanted was a way for the frontier model (or me) to write a specific procedure and hand it to the local model to execute, not interpret. The skillscript is the program; the model is the runtime.
Skillscript is that. A skillscript is a text file with named steps, variables, conditions, and calls out to tools (MCP connectors, a local model, and shell commands from an operator allowlist). It's deliberately minimal — no eval, no arbitrary imports, no subprocess, no unbounded loops. Bounded language, limited potential for damage. Everything a skillscript can do is in the file. You read it and know.
Where it is: pre-1.0 (0.30), MCP-native, self-hosted. Rough edges I know about: first-run setup takes more steps than it should, some of the grammar is still moving, and the local model integration currently assumes Ollama. It works well enough that I use it every day, but I wouldn't necessarily call it production-ready.
- Repo: [https://github.com/sshwarts/skillscript https://github.com/sshwarts/skillscript](https://github.com/sshwarts/skillscript https://github.com/sshwarts/skillscript)
- Site: [https://skillscript.ai https://skillscript.ai](https://skillscript.ai https://skillscript.ai)
- Docs: [https://skillscript.mintlify.app/docs https://skillscript.mintlify.app/docs](https://skillscript.mintlify.app/docs https://skillscript.mintlify.app/docs)
- npm: `skillscript-runtime`
I'd welcome critique on two things especially: the language design (is it too small? too big? wrong shape?) and the trust model around agent-authored skills. What would you want to see before you trusted this on your own machine?
- DonHopkins 3mo ago[flagged]
- dlahoda 3mo agoNot sure I understood well your comment. Do you propose just ask AI to generate orchestration in Python?
- DonHopkins 3mo ago[flagged]
- spankalee 3mo agoLLMs are fantastic at generating new languages given docs and examples.
- DonHopkins 3mo agoGenerating but not programming in them. They need to be reminded of the complete language definition they generated in every prompt, which is extremely costly, inefficient, and ultimately pointless, since any language you make up can't hold a candle to Python and its ecosystem, because it doesn't have an ecosystem, and the language itself doesn't exist in the training data. How can you not get that? Do you believe LLMs remember what you show them between calls? That's not how they work. Each call starts from a clean slate, you have to re-describe the new language each and every call. There's no way to get around that. They are not magic. They do not learn from your prompts, which have absolutely no effect on the model itself. If you think they do, you are falling for an illusion. ChatGPT is appending each of your incremental prompts to the full prompt, and it grows and grows longer and longer every time you add something. Sure, it summarizes when the full prompt gets to long, but that makes it distort and forget your language definition, and you have to add it again. If you give it the prompt to generate the language from scratch each time instead of the generated language itself, it generates a different language every time. You can't "cleverly hack" or "wish" your way out of that. They may be good at generating new languages, but one thing that LLMs aren't good at apparently is warning you it's futile to generate a new language intended for llms to program instead of just using existing languages. They just play along and do ridiculous useless things out of syncophancy.