[{"data":1,"prerenderedAt":584},["ShallowReactive",2],{"project-47536761":3},{"id":4,"name":5,"line":6,"line_source":7,"title":8,"url":9,"domain":10,"maker":11,"posted_at":12,"year":13,"points":14,"comments":15,"rank_in_year":16,"shown_in_year":17,"top":18,"tier":19,"category":20,"subcategory":21,"format":22,"keywords":23,"reception":28,"sentiment":29,"stance_mix":30,"scored_comments":34,"aspects":35,"strip":46,"post_text":49,"what":50,"said":91,"maker_in_thread":240,"shape":243,"grid":247,"attempts":547,"same_week":548,"maker_shows":33,"maker_hidden":576,"reader_version":577,"card":578},"47536761","nullclaw","I put an AI agent on a $7\u002Fmonth VPS with IRC as its transport layer","title","Show HN: I put an AI agent on a $7\u002Fmonth VPS with IRC as its transport layer","https:\u002F\u002Fgeorgelarson.me\u002Fwriting\u002F2026-03-23-nullclaw-doorman\u002F","georgelarson.me","j0rg3",1774564885,2026,340,96,107,4366,3,"legend","ai","ai agent","other",[21,24,25,26,27],"irc","vps","claude api","a2a protocol","debated",-0.031,{"positive":31,"neutral":32,"mixed":33,"critical":31},16,28,2,62,{"pricing":36,"performance":38,"privacy":40,"idea":42,"execution":44,"design":45},{"positive":37,"critical":37},0,{"positive":39,"critical":33},1,{"positive":37,"critical":41},9,{"positive":43,"critical":18},8,{"positive":39,"critical":39},{"positive":18,"critical":39},[18,18,18,47,39,37,37,37,47,48,39,39,37,37,47,39,39,39,37,47,37,18,39,39,33,39,18,47,48,39,47,18,39,18,37,18,39,37,47,47],5,4,null,{"problem":49,"audience":51,"pricing":62,"motivation":49,"time_to_build":49,"stack":67,"openness":88,"stage":89,"team_size":90},{"value":52,"source":53,"evidence":54},"Visitors to the maker's site who want to interview or chat with an AI resume","inferred",[55,58],{"id":56,"by":11,"text":57},"47536778","The stack: two agents on separate boxes. The public one (nullclaw) is a 678 KB Zig binary using ~1 MB RAM, connected to an Ergo IRC server. Visitors talk to it via a gamja web…",{"id":59,"by":60,"text":61},"47538186","agnishom","> The model can't tell you anything the resume doesn't already say. Good observation. But I would worry that in the scenario when this setup is the most successful, you have…",{"value":63,"source":64,"evidence":65},"Hard cap of $2\u002Fday on inference","maker",[66],{"id":56,"by":11,"text":57},[68,72,76,80,84],{"value":69,"source":64,"evidence":70},"Zig",[71],{"id":56,"by":11,"text":57},{"value":73,"source":64,"evidence":74},"Ergo IRC server",[75],{"id":56,"by":11,"text":57},{"value":77,"source":64,"evidence":78},"Claude Haiku 4.5 and Sonnet 4.6",[79],{"id":56,"by":11,"text":57},{"value":81,"source":64,"evidence":82},"Google A2A protocol",[83],{"id":56,"by":11,"text":57},{"value":85,"source":64,"evidence":86},"Tailscale",[87],{"id":56,"by":11,"text":57},"unknown","launched","solo",{"praise":92,"objections":127,"requests":162,"questions":181,"alternatives":215},[93,109,120],{"value":94,"source":95,"evidence":96},"Clever use of IRC as lightweight transport","commenter",[97,101,105],{"id":98,"by":99,"text":100},"47618113","farrukh23buttt","This is a clever split, especially the public\u002Fprivate boundary and the use of IRC as a very lightweight transport. The part I found most interesting is that the transport is…",{"id":102,"by":103,"text":104},"47538669","ruptwelve","While I am a huge fan of IRC, wouldn't be simpler to simulate IRC, since you are embedding it? Or is the chatroom the actual point? Kudos on the project!",{"id":106,"by":107,"text":108},"47538758","getverdict","Interesting choice of IRC as the transport layer — it's simple, battle-tested, and keeps the attack surface small compared to running a web-facing API. One thing I'd be curious…",{"value":110,"source":95,"evidence":111},"Public\u002Fprivate agent split is a good architecture",[112,116],{"id":113,"by":114,"text":115},"47540693","eu_93","Really interesting idea. Finally a use of AI that goes beyond the simple “chat on top of a resume” and actually tries to demonstrate skills with real evidence by reading the…",{"id":117,"by":118,"text":119},"47554531","Roshan_Roy","This is a really interesting setup — especially the split between the public and private agents. curious about the IRC choice: was that mainly for simplicity and reliability, or…",{"value":121,"source":95,"evidence":122},"Rooms as contexts and client agnosticism",[123],{"id":124,"by":125,"text":126},"47538706","AbanoubRodolf","The rooms-as-contexts pattern is underrated. You get namespace isolation for free without building any session management. Switch channels, switch project, switch system prompt,…",[128,139,151],{"value":129,"source":95,"evidence":130},"Relying on the Claude API means it isn't really self-owned",[131,135],{"id":132,"by":133,"text":134},"47538472","ekianjo","But relying on a Claude API so you don't really \"own the stack\" as claimed in the article...",{"id":136,"by":137,"text":138},"47538691","selcuka","Aren't LLMs commodity products these days? It's the same thing as running this on a $7 VPS that you don't \"own\". I don't think switching to a different provider, or running an…",{"value":140,"source":95,"evidence":141},"Public IRC lobby exposes prompt injection and abuse risk",[142,146,150],{"id":143,"by":144,"text":145},"47543809","upstandingdude","\"It has access to email, deeper personal context [...] If it gets compromised, the blast radius is an IRC bot with a $2\u002Fday inference budget.\" Dunno, if it gets compromised it…",{"id":147,"by":148,"text":149},"47542481","Kye","This seems like one prompt injection away from an updated form of the classic botnet coordinating over IRC. How do you secure this?",{"id":59,"by":60,"text":61},{"value":152,"source":95,"evidence":153},"Slow response times",[154,158],{"id":155,"by":156,"text":157},"47537947","slopinthebag","I can tell it's vibe coded because it takes about 1 minute for a message to appear.",{"id":159,"by":160,"text":161},"47537857","consumer451","The demo seems to be in a messed up state at the moment. Maybe it's just getting hammered and too far behind?",[163,174],{"value":164,"source":95,"evidence":165},"Cheaper model options or caching to reduce cost",[166,170],{"id":167,"by":168,"text":169},"47537374","InitialPhase55","Curious, how did you settle on Haiku\u002FSonnet? Because there are much cheaper models on OpenRouter that probably perform comparatively... Consider Haiku 4.5: $1\u002FM input tokens |…",{"id":171,"by":172,"text":173},"47541774","Jotalea","I really like the idea, as well as the \"terminal\" style the site has. however, I consider that an additional daily spend of $2 could be avoided. perhaps by caching common…",{"value":175,"source":95,"evidence":176},"Rate limiting for the public chat",[177],{"id":178,"by":179,"text":180},"47537932","johnisgood","Yeah, should probably implement rate-limiting. HNers were wildin'. :D",[182,197,208],{"value":183,"source":95,"evidence":184},"How is escalation from Haiku to Sonnet decided",[185,189,193],{"id":186,"by":187,"text":188},"47541215","abhishekayu","Interesting setup. The IRC part is neat, but the tiered inference is what stood out. How do you decide when to escalate from Haiku to Sonnet?",{"id":190,"by":191,"text":192},"47537457","eric_khun","that's so fun ! how do you know when to call haiku or sonnet?",{"id":194,"by":195,"text":196},"47539068","wolvoleo","I tried it, it was cool. I don't like nully's attitude though. Very dismissive and tough. But I like your setup as a whole. I'll see if I can get some takeaways from it. I do…",{"value":198,"source":95,"evidence":199},"How is prompt injection prevented",[200,204],{"id":201,"by":202,"text":203},"47538781","greesil","How do you keep it from getting prompt injected? Oh I get it the runtimes are nice and small, you're using Claude for the intelligence. Obv I think I'm just impressed with…",{"id":205,"by":206,"text":207},"47540435","ForHackernews","This reads like it was written by AI. I don't understand how it provides any real security if the \"guardrails\" against prompt injection are just a system prompt telling the…",{"value":209,"source":95,"evidence":210},"How concurrent users are handled",[211],{"id":212,"by":213,"text":214},"47574192","kangraemin","I did something similar with Slack as the transport layer. Threads work well as conversation context — the bot fetches previous thread messages and rebuilds the full history…",[216,228],{"value":217,"source":95,"evidence":218},"Slack threads or HTTP\u002FSSE transports",[219,220,224],{"id":212,"by":213,"text":214},{"id":221,"by":222,"text":223},"47542618","georaa","IRC as transport is great until you need delivery guarantees. It's at-most-once - agent disconnects, whatever happened in between is gone. For chat that's fine, for an agent…",{"id":225,"by":226,"text":227},"47547028","velcee","Similar architecture - we run 4 agents (sales, social, finance, strategy) communicating through a shared message board backed by FastAPI + SQLite instead of IRC. Different…",{"value":229,"source":95,"evidence":230},"Cheaper models such as MiniMax, Gemini Flash, Xiaomi Mimo",[231,232,236],{"id":167,"by":168,"text":169},{"id":233,"by":234,"text":235},"47538471","faangguyindia","just use gemini flash3, it's better than haiku",{"id":237,"by":238,"text":239},"47539007","nl","Xiaomi Mimo v2-Flash is fantastic. I have a relatively hard personal agentic benchmark, and Mimo v2-Flash scores 8% higher in 109 seconds for $0.003 (0.3 cents!) vs Haiku which…",{"comments":39,"answered":37,"key":241},[242],{"id":56,"text":57},{"commenters":244,"max_depth":245,"maker_replies":39,"first_comment_mins":39,"lifespan_hours":246},85,7,329,[248,250,254,258,259,262,265,268,269,273,277,280,284,285,287,289,292,295,299,303,305,308,311,312,315,318,321,324,325,328,331,334,337,340,343,346,350,353,356,358,361,365,369,373,376,379,380,381,383,385,387,389,390,392,394,396,399,403,405,408,410,414,418,422,425,429,432,434,436,439,443,447,452,456,460,462,466,469,471,475,479,483,486,490,493,494,495,497,501,503,505,508,510,512,516,519,522,525,528,532,536,540,542,544],[167,37,18,249,168,37],"project\u002Fneutral\u002Fpricing",[251,37,37,252,253,37],"47538343","commenter\u002Fneutral\u002Fnone","ls612",[255,37,18,256,257,37],"47538374","project\u002Fneutral\u002Fperformance","ruguo",[233,37,18,256,234,37],[260,37,18,249,261,37],"47538953","attentive",[263,37,18,256,264,37],"47540333","0123456789ABCDE",[266,37,18,249,267,37],"47538487","jeremyjh",[237,37,18,256,238,37],[270,37,37,271,272,37],"47543199","other\u002Fneutral\u002Fnone","efromvt",[274,37,47,275,276,37],"47540083","project\u002Fpositive\u002Fperformance","lanyard-textile",[278,37,37,279,168,37],"47543523","commenter\u002Fpositive\u002Fnone",[281,37,39,282,283,37],"47547487","project\u002Fcritical\u002Fprivacy","nickthegreek",[143,39,39,282,144,37],[286,39,37,252,179,37],"47544291",[288,39,37,252,144,37],"47544389",[290,39,37,252,291,37],"47544404","devin",[293,39,37,294,291,37],"47544391","other\u002Fneutral\u002Fprivacy",[296,33,37,297,298,37],"47537678","other\u002Fneutral\u002Fidea","czhu12",[300,33,37,301,302,37],"47537728","other\u002Fcritical\u002Fprivacy","k2xl",[304,33,37,271,298,37],"47537818",[306,18,47,307,234,37],"47538451","project\u002Fpositive\u002Fidea",[309,18,37,252,310,37],"47538527","achille",[124,18,47,307,125,37],[313,18,47,307,314,37],"47539101","chatmasta",[316,18,18,317,314,37],"47539096","project\u002Fneutral\u002Fexecution",[319,18,18,317,320,37],"47539156","entropie",[322,18,18,317,323,37],"47539164","stackghost",[205,48,39,282,206,37],[326,48,39,282,327,37],"47540847","mobilefriendly",[329,47,37,297,330,37],"47537151","0xbadcafebee",[332,47,37,271,333,37],"47537322","eclipxe",[335,47,37,271,336,37],"47538837","NetOpWibby",[338,47,37,297,339,37],"47537448","jaggederest",[341,47,37,271,342,37],"47538559","codebje",[344,47,37,271,345,37],"47538632","gedy",[347,47,37,348,349,37],"47539044","other\u002Fneutral\u002Fexecution","mandeepj",[351,47,37,271,352,37],"47540391","pbhjpbhj",[194,354,47,355,195,37],6,"project\u002Fpositive\u002Fdesign",[357,354,37,252,276,37],"47540108",[359,354,18,360,195,37],"47540448","project\u002Fneutral\u002Fidea",[362,354,39,363,364,37],"47540319","project\u002Fcritical\u002Fdesign","flux3125",[366,245,39,367,368,37],"47537064","project\u002Fcritical\u002Fidea","iLoveOncall",[370,245,18,371,372,37],"47537102","project\u002Fmixed\u002Fidea","petcat",[374,245,37,271,375,37],"47537381","echelon",[377,245,37,252,378,37],"47537485","jazzyjackson",[132,43,39,367,133,37],[136,43,37,252,137,37],[382,43,37,252,133,37],"47538821",[384,43,37,252,137,37],"47538888",[386,43,37,252,133,37],"47562948",[388,43,47,355,314,37],"47539118",[98,41,47,307,99,37],[225,391,37,297,226,37],10,[212,393,37,297,213,37],11,[117,395,18,360,118,37],12,[171,397,18,398,172,37],13,"project\u002Fmixed\u002Fpricing",[400,401,37,271,402,37],"47539597",14,"Imustaskforhelp",[201,404,39,282,202,37],15,[406,31,37,271,407,37],"47538519","jaboostin",[59,409,39,282,60,37],17,[411,412,18,360,413,37],"47538592",18,"anoojb",[415,416,37,271,417,37],"47537819",19,"mememememememo",[419,420,18,249,421,37],"47538402",20,"messh",[102,423,18,424,103,37],21,"project\u002Fneutral\u002Fdesign",[426,427,39,282,428,37],"47541957",22,"xeyownt",[430,427,37,252,431,37],"47542038","dmazin",[147,433,39,282,148,37],23,[186,435,18,424,187,37],24,[437,435,47,355,438,37],"47546062","AgentTax",[440,441,39,282,442,37],"47539426",25,"appstorelottery",[444,445,47,307,446,37],"47539990",26,"iammrpayments",[448,449,18,450,451,37],"47537966",27,"project\u002Fneutral\u002Fprivacy","m00dy",[453,32,47,454,455,37],"47539075","project\u002Fpositive\u002Fnone","ozozozd",[457,458,18,249,459,37],"47538744",29,"topaz0",[190,461,18,424,191,37],30,[463,464,37,271,465,37],"47540724",31,"password4321",[155,467,39,468,156,37],32,"project\u002Fcritical\u002Fperformance",[470,467,18,256,160,37],"47538320",[472,473,47,454,474,37],"47538793",33,"tc1989tc",[476,477,47,307,478,37],"47537881",34,"heyitsaamir",[480,481,39,367,482,37],"47542600",35,"callamdelaney",[56,484,37,485,11,39],36,"maker\u002Fneutral\u002Fdesign",[487,484,47,488,489,37],"47537128","project\u002Fpositive\u002Fexecution","jgrizou",[491,484,18,424,492,37],"47537213","sbinnee",[159,484,39,468,160,37],[178,484,18,256,179,37],[496,484,18,450,160,37],"47538039",[498,484,18,499,500,37],"47538057","project\u002Fneutral\u002Fnone","oceliker",[502,484,37,271,160,37],"47538077",[504,484,37,271,179,37],"47538109",[506,484,37,271,507,37],"47538138","Henchman21",[509,484,18,499,500,37],"47538011",[511,484,18,424,60,37],"47539864",[513,514,37,271,515,37],"47705284",37,"aimemobe",[221,517,39,518,222,37],38,"project\u002Fcritical\u002Fexecution",[520,517,37,252,521,37],"47543313","monsieurbanana",[523,517,37,252,524,37],"47545335","Sohcahtoa82",[526,517,37,252,527,37],"47545373","dymk",[529,530,18,485,531,37],"47560046",39,"edinetdb",[533,534,47,307,535,37],"47539952",40,"shreyssh",[537,538,47,454,539,37],"47551143",41,"AlphaTheGoat",[113,541,47,307,114,37],42,[106,543,18,450,107,37],43,[545,543,37,252,546,37],"47538852","hackeman300",[],[549,553,558,562,567,572],{"id":550,"name":551,"points":552,"category":20},"47593422","1-Bit Bonsai",430,{"id":554,"name":555,"points":556,"category":557},"47557921","Git bayesect",337,"dev_tools",{"id":559,"name":560,"points":561,"category":22},"47580350","30u30.fyi",256,{"id":563,"name":564,"points":565,"category":566},"47571183","korb",205,"consumer_social",{"id":568,"name":569,"points":570,"category":571},"47589856","pg_textsearch",203,"data",{"id":573,"name":574,"points":575,"category":571},"47534283","Turbolite",185,false,"v2",{"id":579,"name":5,"line":6,"ai":576,"cat":20,"year":13,"points":14,"comments":15,"rec":28,"s":580,"top":18,"kw":581,"maker":11,"domain":10,"tier":19,"attempts":37,"strip":582,"url":9,"mix":583,"praise":94,"objection":129,"sub":21},47536761,-0.03,[21,24,25,26,27],"3335100054110051110503112135415313031055",[31,32,33,31],1794036697072]