ES version is available. Content is displayed in original English for accuracy.
Something that works out of the box, is a real agent with tool calling, but without 1000s of lines of code, without dozens or hundreds of npm or pypi dependencies. Something with just a few 'essential' features (not a whole kitchen sink that most agent harnesses come with nowadays).
An implementation close to pseudocode that you can look at in one page, everything there at a glance, no scrolling.
This is the agent.py I ended up with so far:
import json,sys;from subprocess import getoutput as sh;from urllib.request import Request as R,urlopen
url=sys.argv[1];h=[];b=dict(model="gpt-5.6",input=h,tools=[dict(type="custom",name="sh")])
while p:=input("> "):
h+=[dict(role="user",content=p)];H={"Content-Type":"application/json"}
while True:
o=(r:=json.load(urlopen(R(url,json.dumps(b).encode(),H))))["output"]
h+=o;c=[i for i in o if i["type"]=="custom_tool_call"];z=r["usage"]["total_tokens"]/10500
if not c:print(o[-1]["content"][0]["text"],f'\n[{z:06.3f}%]');break
h+=[dict(type="custom_tool_call_output",call_id=i["call_id"],output=sh(i["input"])) for i in c]
It is a bit code golfed but I think it is fairly readable- imports are all from stdlib (0 external dependencies!)
- assumes there is an inference api endpoint running somewhere
- assumes the inference api endpoint is openai-like
- model hardcoded to "gpt 5.6" (=> Sol), can easily be changed to e.g. open weight (kimi k3, glm 5.2 etc)
- api endpoint url is passed as arg to the python script
- configures only 1 custom tool: 'sh'
- 'sh' is sufficient for interacting with the environment in an open ended way
- new api output gets added to history ("h")
- if api output contains tool calls the tool calls get executed
- agent gives control back to user when the last model response is without tool calls
- agent message to user shows % of context window used
Noteworthy:
no dependencies other than python stdlib (!)
- less startup time
- less dependency churn
- less supply chain attack vector surface
- less code to verify and understand
no mcp, no plugins, no security theater
- if you want to add something specific: add it explicitly
- adapt the environment to give the agent access or restrict access to tools, resources, network etc (the env is the security boundary, not the harness)
no system prompt
- every token in context window is precious
- current strong models do fine without steering via system prompt (or are even harmed by long overly specific system prompts designed for models from months ago)
- system prompt or agents.md context can easily be added if needed (agent can also discover it or get prompted to read from environment as is)
how to run/deploy the agent
- design the environment you want to give the agent (container, docker, sandbox of your choice)
- start an inference api endpoint that is openai-like (support the request/response shape used in agent.py above)
- inference api endpoint can be as simple as a proxy to openai api that adds credentials/api key
- adapt as you want/need it, change the model, remove/alter context window behaviour, add tools, etc etc
Looking for any feedback you have to make it more clear or even simpler!

Discussion (6 Comments)Read Original on HackerNews
Do you have an ungolfed version? I was going to ask my LLM to make one.
https://gist.github.com/tosh/61aca9ffa9ea115fa4df332407d7a9a...
i'd move the headers out of the loop (u can prolly just hard-code it), and move context_usage to inside the if (and maybe hard-code it, too)
I had a tool description earlier but 'sh' as tool name seems to be sufficient, the agent behaviour was the same.
There might be performance gains if a description is added though, or worth trying different ways of telling the agent about what is available in the environment.
That said, the newer models are fairly good at driving a harness to explore the environment.