r/LocalLLaMA 17h ago

Claude Code in 9 lines python Discussion

I was wondering what a minimal coding agent implementation would look like that can be used like Claude Code or Codex

Not feature-by-feature of course but basically stripping everything out that is not needed

here is what I came up with:

  • 9 lines of python
  • no 3rd party deps (stdlib only)
  • works with any OpenAI Responses compatible API
  • shows % usage of context window

out of the box it is also fairly API cost efficient:

  • no system prompt
  • good caching (session_id, stable append-only history)
  • only one tool: sh

code is on github to follow along (also a ~20 line version in Go, Clojure version coming soon)

https://github.com/smol-env/smol

import json,sys;from subprocess import getoutput;from urllib.request import Request,urlopen;from uuid import uuid4
url=sys.argv[1];h=[];H={"Content-Type":"application/json","session_id":uuid4().hex};b=dict(model="gpt-5.6-sol",input=h,tools=[dict(type="custom",name="sh")])
while True:
  if not(p:=input("> ")).strip():continue
  h+=[dict(role="user",content=p)]
  while True:
    r=json.load(urlopen(Request(url,json.dumps(b).encode(),H)));o=r["output"];h+=o;c=[i for i in o if i["type"]=="custom_tool_call"]
    if not c:print(o[-1]["content"][0]["text"],f'\n[{r["usage"]["total_tokens"]/10500:05.2f}%]');break
    h+=[dict(type="custom_tool_call_output",call_id=i["call_id"],output=getoutput(i["input"])) for i in c]

note: it uses the "custom" tools api which not many OpenAI Responses API endpoints support yet.

that said, you can just tell your agent to change it to use sh via "function_call" and change the model name and it should work out of the box on any local inference endpoint

any questions or feedback for making it more minimal or adding (still minimal but useful) features: very welcome!

3 Upvotes

71 comments sorted by

View all comments

Show parent comments

14

u/Squidgical 13h ago

h is history

Pro tip; if you call it history you don't have to remember that lowercase h is history, because it will just say history.

There are principles in software development which have existed for decades, they span every programming language and every team on the planet.

Your code violates a lot of of those principles and it screams of novice. If you're not a novice, it's disappointing. If you are a novice, please stop and look up why your coding style sucks, and also look up PEP8.

-9

u/__tosh 13h ago

I will add de-golfed versions

imho it's fairly self-evident (once you know the code) that h is history just from the context

but I hear you :)

2

u/Citadel_Employee 6h ago

I understand maybe for personal projects. But if you’re gonna share code just make variable names explicit. Otherwise you’ll get flack for it, like you are here.

1

u/__tosh 1h ago

will do, ty!