[{"data":1,"prerenderedAt":248},["ShallowReactive",2],{"project-45737948":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":33,"aspects":34,"strip":39,"post_text":43,"what":44,"said":75,"maker_in_thread":144,"shape":155,"grid":159,"attempts":211,"same_week":212,"maker_shows":145,"maker_hidden":240,"reader_version":241,"card":242},"45737948","Butter","A Behavior Cache for LLMs","title","Show HN: Butter – A Behavior Cache for LLMs","https:\u002F\u002Fwww.butter.dev\u002F","butter.dev","edunteman",1761680391,2025,50,22,1248,3837,33,"notable","dev_tools","llm caching proxy","api",[24,25,26,27],"llm cache","deterministic agents","llm proxy","chat completions","curious",0.049,{"positive":31,"neutral":32,"mixed":31,"critical":31},2,6,12,{"idea":35,"execution":36,"pricing":38},{"positive":31,"critical":31},{"positive":37,"critical":37},0,{"positive":37,"critical":37},[40,41,37,41,37,37,40,37,40,42,40,37,40,37,40,40,37,42,37,37,40,37],3,5,1,"Hi HN! I'm Erik. We built Butter, an LLM proxy that makes agent systems deterministic by caching and replaying responses, so automations behave consistently across runs.\n\n- It’s a chat completions compatible endpoint, making it easy to drop into existing agents with a custom base_url\n\n- The cache is template-aware, meaning lookups can treat dynamic content (names, addresses, etc.) as variables\n\nYou can see it in action in this demo where it memorizes tic-tac-toe games: https:\u002F\u002Fwww.youtube.com\u002Fwatch?v=PWbyeZwPjuY\n\nWhy we built this: before Butter, we were Pig.dev (YC W25), where we built comput",{"problem":45,"audience":51,"pricing":56,"motivation":66,"time_to_build":70,"stack":71,"openness":72,"stage":73,"team_size":74},{"value":46,"source":47,"evidence":48},"Agent systems behave inconsistently across runs and are slow and expensive","maker",[49],{"id":50},"post",{"value":52,"source":53,"evidence":54},"Teams building LLM agents and automations, such as RPA replacements","inferred",[55],{"id":50},{"value":57,"source":47,"evidence":58},"Free to use while in progress; bring-your-own-key, Butter charges only for calls not sent to provider",[59,60,63],{"id":50},{"id":61,"by":11,"text":62},"45741315","It’s bring-your-own-key, so any calls proxied to OpenAI just end up billing directly to your account as normal. You’d only pay Butter for calls that don’t go to the provider.…",{"id":64,"by":11,"text":65},"45741325","I feel the same - we’ll use it as long as we can since it’s customer aligned but I wouldn’t be surprised if competitive or COGs costs force us to change in the future.",{"value":67,"source":47,"evidence":68},"Pig.dev's computer-use agents were slow, expensive and unpredictable, so they built deterministic caching",[69],{"id":50},null,[],"unknown","launched","team",{"praise":76,"objections":89,"requests":110,"questions":125,"alternatives":143},[77],{"value":78,"source":79,"evidence":80},"Deterministic RPA with AI fallback is a common approach","commenter",[81,85],{"id":82,"by":83,"text":84},"45741866","rajit","We spoke to a number of browser agent companies who said deterministic RPA with an AI fallback was their \"secret\" :)",{"id":86,"by":87,"text":88},"45741173","realitysballs","Funny, we are working to implement this same logic in our in-house financial categorization agent. When we have a repeat prompt it goes to a json that stores answers and only…",[90,97,103],{"value":91,"source":79,"evidence":92},"Works only in predictable environments; can get in the way of agents",[93],{"id":94,"by":95,"text":96},"45741613","mountainriver","I also did computer agents with a vc backed startup, ran into the same issues, and we built a fairly similar thing at one point. It’s useful but it has limitations, it seems to…",{"value":98,"source":47,"evidence":99},"Caching a bad run could cause persistent failures",[100],{"id":101,"by":11,"text":102},"45741949","I’d love your opinion here! Right now, we assume first call is correct, and will eagerly take the first match we find while traversing the tree. One of the worst things that…",{"value":104,"source":79,"evidence":105},"Pricing may not last",[106],{"id":107,"by":108,"text":109},"45741283","puppycodes","I like the pricing model but I'm skeptical it will last.",[111,118],{"value":112,"source":79,"evidence":113},"Support for local models",[114],{"id":115,"by":116,"text":117},"45741476","Jayakumark","What local models will it work with ? Also what will be the pricing for local llms?",{"value":119,"source":79,"evidence":120},"Support for OpenRouter",[121],{"id":122,"by":123,"text":124},"45768225","felipe-pathwave","any plans to support https:\u002F\u002Fopenrouter.ai\u002F ?",[126,133],{"value":127,"source":79,"evidence":128},"Is caching appropriate when answers depend on context?",[129],{"id":130,"by":131,"text":132},"45741592","invisibleink","interesting. is the answer not context specific most of the time? even if I ask LLM the same question again and again the answer depends on the context. what are some use cases…",{"value":134,"source":79,"evidence":135},"Is it legal given provider terms?",[136,140],{"id":137,"by":138,"text":139},"45741198","ronbenton","Interesting... is it legal?",{"id":141,"by":138,"text":142},"45741350","it wouldn't be the first API service to disallow someone from selling a cache layer for their API. After all, this should likely result in OpenAI (or whatever provider) making…",[],{"comments":145,"answered":146,"key":147},8,4,[148,151,154],{"id":149,"text":150},"45741363","Awesome to hear you’ve done similar. JSON artifacts from runs seem to be a common approach for building this in house, similar to what we did with the muscle mem. Detecting cache…",{"id":152,"text":153},"45741909","Very, very common approach! Wrote more on that here: https:\u002F\u002Fblog.butter.dev\u002Fthe-messy-world-of-deterministic-agents",{"id":101,"text":102},{"commenters":156,"max_depth":41,"maker_replies":145,"first_comment_mins":157,"lifespan_hours":158},13,280,56,[160,162,164,166,167,169,173,177,179,182,184,186,189,191,192,194,195,197,198,201,205,210],[94,37,40,161,95,37],"project\u002Fmixed\u002Fidea",[86,42,41,163,87,37],"project\u002Fpositive\u002Fidea",[149,42,37,165,11,42],"maker\u002Fpositive\u002Fnone",[82,31,41,163,83,37],[152,31,37,168,11,42],"maker\u002Fpositive\u002Fdocs",[170,31,37,171,172,37],"45743855","other\u002Fneutral\u002Fnone","toobulkeh",[174,40,40,175,176,37],"45741601","project\u002Fneutral\u002Fexecution","barapa",[101,40,37,178,11,42],"maker\u002Fneutral\u002Fexecution",[180,40,40,181,172,37],"45743870","project\u002Fneutral\u002Fidea",[130,146,42,183,131,37],"project\u002Fcritical\u002Fidea",[115,41,40,185,116,37],"project\u002Fneutral\u002Fnone",[187,41,37,188,11,42],"45742037","maker\u002Fneutral\u002Fpricing",[107,32,40,190,108,37],"project\u002Fmixed\u002Fpricing",[64,32,37,188,11,42],[122,193,40,185,123,37],7,[137,145,40,185,138,37],[196,145,37,185,11,42],"45741256",[141,145,42,183,138,37],[199,145,37,200,11,42],"45742020","maker\u002Fneutral\u002Fnone",[202,145,37,203,204,37],"45742146","commenter\u002Fneutral\u002Fnone","RestartKernel",[206,207,40,208,209,37],"45741090",9,"project\u002Fneutral\u002Fpricing","robofanatic",[61,207,37,208,11,42],[],[213,217,222,227,232,236],{"id":214,"name":215,"points":216,"category":20},"45706792","oxdraw",266,{"id":218,"name":219,"points":220,"category":221},"45715055","MyraOS",247,"infrastructure",{"id":223,"name":224,"points":225,"category":226},"45731366","Bash Screensavers",246,"creative",{"id":228,"name":229,"points":230,"category":231},"45684689","Deadstack",188,"productivity",{"id":233,"name":234,"points":235,"category":226},"45721352","ISS in Real Time",165,{"id":237,"name":238,"points":239,"category":20},"45717724","vite-plugin-use-golang",158,false,"v2",{"id":243,"name":5,"line":6,"ai":240,"cat":20,"year":13,"points":14,"comments":15,"rec":28,"s":244,"top":18,"kw":245,"maker":11,"domain":10,"tier":19,"attempts":37,"strip":246,"url":9,"mix":247,"praise":78,"objection":91,"sub":21},45737948,0.05,[24,25,26,27],"3505003031303033010030",[31,32,31,31],1793991133094]