{"slug": "two-things-landed-on-my-desk-this-week-that-shouldn-t-belong-in-the-same", "title": "Two Things Landed on My Desk This Week That Shouldn't Belong in the Same Paragraph", "summary": "A developer describes adopting GPTScript, an open-source scripting framework for building AI agents that treats tool calls as first-class language constructs and lets agents be written in shell-script-like syntax rather than Python orchestration code. The framework ships built-in tools such as sys.exec, sys.read and sys.write, composes agents by referencing other scripts, and is designed to be model-agnostic across LLM providers. The developer frames the project as filling the missing agent runtime layer — state across turns, tool selection, retries and observability — that causes most internal AI projects to fail.", "body_md": "Two things landed on my desk this week that shouldn't belong in the same paragraph: a printout of a 1973 typewritten memo, and a curl command that spins up an autonomous AI agent in a terminal window. I've been turning both over in my head because they point at the same quiet thing — *the gap between raw capability and the infrastructure to actually use it.*\n\nLast Tuesday I was sitting in my kitchen at 11 p.m., laptop open, coffee cold, trying to explain to a non-technical friend why \"AI can do anything now\" is both true and completely useless. She runs a small business — a bakery, actually, two ovens and a laminated list of regulars. She'd spent three hours that afternoon trying to get a chatbot to draft a supplier email. The tool worked. The *outcome* didn't. Not because the model was bad, but because there was nothing around it. No memory of last week's order. No way to check the price list. No loop that said \"try again, that's wrong.\"\n\nI knew that feeling. I've been building software for eleven years, and the last eighteen months have felt like everyone handed me a supercomputer and forgot to give me a desk to put it on.\n\nThe memo on my desk was from my dad. He was an engineer at a telecom company in the seventies, and he'd kept a carbon copy of a design note he wrote when his team was trying to automate a switching system. The last line, in faded ink, reads: *\"The machine is ready. We are not.\"*\n\nThat line hit me harder than it should have, sitting there at my kitchen table with my cold coffee.\n\nHere's the thing nobody says out loud at conferences: most \"AI projects\" that die inside companies don't die from model quality. They die from plumbing. Authentication. State. Retries. Observability. The boring, unglamorous middle layer between \"the model returned a string\" and \"this thing actually did my job while I slept.\" I've watched four teams at three companies hit the exact same wall. I was one of them — I spent six weeks last spring building a \"smart\" internal assistant that could answer questions about our docs, and it worked beautifully in a demo and fell apart the moment a real user asked a follow-up question. No context carried. No tool calls. Just a very confident goldfish.\n\nI started sketching what the missing layer actually looked like. Not a model. Not a prompt library. An *agent runtime* — something that holds state across turns, decides when to call a tool, retries when a call fails, and lets you watch what it's doing. The kind of thing you'd normally spend a quarter building before you even get to the interesting part.\n\nThat's when I found it — not in a keynote, but in a GitHub link a friend dropped in a group chat with no comment. I almost ignored it. I'm glad I didn't.\n\nThe project is called **GPTScript**. It's an open-source scripting framework for building AI agents, and the first thing that struck me was how un-clever it is, in the best possible way. You write agents in something that looks suspiciously like a shell script — because that's the point. It's a scripting *language* for agents, not another Python SDK you have to glue together.\n\nLet me show you what I mean, because this is the part that made me sit up.\n\n```\ntools: sys.exec, sys.read, sys.write\n\nSummarize the file ./notes.md into three bullet points and write the result to ./summary.md\n```\n\nThat's it. That's a working agent. `sys.exec`, `sys.read`, `sys.write` are built-in tools. The model reads the instruction, decides it needs to read a file, calls the tool, gets the content back, summarizes it, and writes the output. No orchestration code. No LangChain ceremony. No `async`/` await` archaeology.\n\nThe architecture underneath is what makes that brevity honest rather than magical. GPTScript treats *tool calls as first-class language constructs.* A tool is just another script. You compose agents the way you compose functions — by referencing them. And critically, it's model-agnostic: it's designed to work across LLM providers rather than locking you to one vendor's SDK. For anyone who's been burned by a framework that hard-codes assumptions about a single API, that's not a marketing bullet — that's an insurance policy.\n\nI rebuilt the internal assistant that had failed in six weeks. It took an afternoon.\n\n```\ntools: docs.search, docs.answer\n\nYou are a documentation assistant. Use docs.search to find relevant\npassages, then answer the user's question using only what you found.\nIf nothing relevant comes back, say so honestly.\n```\n\nThe follow-up problem — the goldfish problem — was gone. State carried. Tools fired. And when something went wrong, I could *see* it, because the runtime logs every step instead of hiding it behind a decorator. That observability alone would have saved me two of those six weeks.\n\nHere's the honest trade-off, because I promised myself I'd write this without the usual startup gloss. GPTScript is young. The scripting-language approach means a small learning curve if you're used to Python-first tooling — you're learning a DSL, not importing a package. The ecosystem of pre-built tools is growing but not exhaustive, so you'll write your own integrations for anything niche. And if you're building something that needs heavy custom control flow, you may eventually outgrow it. That's fine. That's what a good tool should do — get you to the point where you *can* outgrow it.\n\nBut for the 80% case — the internal assistant, the doc summarizer, the support triage bot, the \"watch this folder and do something smart\" script — it removes the six weeks of plumbing that kills most projects before they ship. And it runs locally, from a terminal, with a single command. That matters more than it sounds like it should. It means the barrier between \"I have an idea at 11 p.m.\" and \"I have a working prototype\" is now measured in minutes.\n\nMy dad's memo is still taped above my desk. *The machine is ready. We are not.*\n\nI used to read that line as a warning. Now I read it as a to-do list.\n\nIf you've been sitting on an idea because the infrastructure felt too heavy to build first — the layer you were dreading is smaller than you think. Go pull it down, write five lines, and watch it run.\n\n**github.com/gptscript-ai/gptscript**", "url": "https://wpnews.pro/news/two-things-landed-on-my-desk-this-week-that-shouldn-t-belong-in-the-same", "canonical_source": "https://dev.to/ashish_624379625242c5d263/two-things-landed-on-my-desk-this-week-that-shouldnt-belong-in-the-same-paragraph-45gd", "published_at": "2026-11-09 12:10:27+00:00", "updated_at": "2026-11-09 12:23:43.841530+00:00", "lang": "en", "topics": ["ai-agents", "ai-tools", "developer-tools", "large-language-models", "ai-startups"], "entities": ["GPTScript", "LangChain"], "also_reported_by": [], "alternates": {"html": "https://wpnews.pro/news/two-things-landed-on-my-desk-this-week-that-shouldn-t-belong-in-the-same", "markdown": "https://wpnews.pro/news/two-things-landed-on-my-desk-this-week-that-shouldn-t-belong-in-the-same.md", "text": "https://wpnews.pro/news/two-things-landed-on-my-desk-this-week-that-shouldn-t-belong-in-the-same.txt", "jsonld": "https://wpnews.pro/news/two-things-landed-on-my-desk-this-week-that-shouldn-t-belong-in-the-same.jsonld"}}