<rss version="2.0" xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:atom="http://www.w3.org/2005/Atom"><channel><title>Hacker News: cloudkj</title><link>https://news.ycombinator.com/user?id=cloudkj</link><description>Hacker News RSS</description><docs>https://hnrss.org/</docs><generator>hnrss v2.1.1</generator><lastBuildDate>Tue, 30 Jun 2026 21:12:15 +0000</lastBuildDate><atom:link href="https://hnrss.org/user?id=cloudkj" rel="self" type="application/rss+xml"></atom:link><item><title><![CDATA[New comment by cloudkj in "Show HN: Bash4LLM+ – A lightweight, dependency-free Bash wrapper for LLM APIs"]]></title><description><![CDATA[
<p>Heh, I just wrote something very similar - bash, curl, and jq scripts that wrap local Ollama calls to produce a REPL/agent: <a href="https://github.com/cloudkj/llayer" rel="nofollow">https://github.com/cloudkj/llayer</a><p>Seems like the core idea is the same, but I took it farther down the Unix philosophy line of thinking and tried to make the individual components small and composable.<p>Feel free to check it out and compare!</p>
]]></description><pubDate>Tue, 30 Jun 2026 17:15:20 +0000</pubDate><link>https://news.ycombinator.com/item?id=48735900</link><dc:creator>cloudkj</dc:creator><comments>https://news.ycombinator.com/item?id=48735900</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=48735900</guid></item><item><title><![CDATA[Show HN: Bash is All You Need for a language model REPL]]></title><description><![CDATA[
<p>I’ve recently just started tinkering with using local large language models, focusing on simple, low-dependency CLI setups. I ended up going down a bit of a rabbit hole: I wanted to see if I could build a functional model interaction REPL using exclusively standard command-line building blocks.<p>I tried to abide by the Unix philosophy, breaking the REPL into the composition of a few small, single-purpose program. Because the data flow is just text streams fed through pipes, at any step you can inject tools to inspect or modify the data—like using `grep` to filter out strings before they hit the model, or `pv` to benchmark model throughput. Everything is ultimately tied together into an `agent` Bash script that codifies the interaction into a REPL. To my surprise, this setup seemed to be sufficient to get a working “agent” that largely resembles ones built by more complex frameworks.<p>One motivation I have for sharing this here is to embed some semi-rhetorical questions: is that really all there is to a “modern agent”? Are the frameworks and libraries being tossed around overly complex and we really just need to keep it simpler?<p>A few more details of potential interest:<p>- Zero heavy dependencies: No `pip`, `npm`, package managers, virtual environments, etc. It just requires `bash`, `jq`, and `curl` to talk to the local model server. These should be available in most modern CLI environments.<p>- Transparent, file-based state: The agent's memory is just an append-only `.jsonl` file (like `.bash_history`). If you want to rewind the agent's memory, you just run head on the log to drop the last few lines.<p>- Standard exit codes for control flow: Tool execution is handled by checking standard Unix exit codes within a basic bash while loop.<p>I suspect there are scaling limits to doing this all in shell, and I'm still figuring out the most elegant way to handle some of the edge cases, particularly around tool calling - but those appear to mostly be limitations of the underlying models. Nevertheless it's been a really fun experiment in stripping out bloat, and as I mentioned above, somewhat surprising at least from a neophyte perspective.<p>Would love to hear thoughts and comments, particularly around the limitations to this orchestration and what features are otherwise missing due to bypassing the popular frameworks and libraries.</p>
<hr>
<p>Comments URL: <a href="https://news.ycombinator.com/item?id=48733677">https://news.ycombinator.com/item?id=48733677</a></p>
<p>Points: 1</p>
<p># Comments: 0</p>
]]></description><pubDate>Tue, 30 Jun 2026 15:00:24 +0000</pubDate><link>https://github.com/cloudkj/llayer</link><dc:creator>cloudkj</dc:creator><comments>https://news.ycombinator.com/item?id=48733677</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=48733677</guid></item><item><title><![CDATA[New comment by cloudkj in "Show HN: I made Google Trends for Hacker News by indexing 18 years of comments"]]></title><description><![CDATA[
<p>This is great, I was just hoping to find a tool like this and specifically scoped to "Show HN" posts? Is there a way to do that?</p>
]]></description><pubDate>Thu, 25 Jun 2026 15:19:56 +0000</pubDate><link>https://news.ycombinator.com/item?id=48674738</link><dc:creator>cloudkj</dc:creator><comments>https://news.ycombinator.com/item?id=48674738</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=48674738</guid></item><item><title><![CDATA[Show HN: AI Agents the Unix Way – built with bash, curl, and jq]]></title><description><![CDATA[
<p>While working on an educational exercise tinkering with local models and trying my hand at setting up agents, I went down a rabbit hole: to see how far I could build a custom agent loop using exclusively command-line building blocks and stripping out dependencies wherever possible.<p>It turns out you can get pretty far with pipes, text streams, append only logs, and standard command-line components - concepts pretty well aligned with classic Unix philosophy. The agent is a wrapper composed of a handful of smaller programs, which should allow for flexibly injecting various tool to inspect, filter, redirect, and audit different stages of the agent loop.<p>This project as it stands is a proof-of-concept, but packs enough punch with tool calling support - which in theory should make it indefinitely extensible. With that said, it does appear that the sophistication of tool calling is largely limited by the underlying model, and so far I’ve only experimented with lightweight local models (e.g. llama3.2:1b) that have modest success for tools.<p>Nevertheless, I wanted to share this here and am curious to see if others find it interesting enough to build upon or extend!</p>
<hr>
<p>Comments URL: <a href="https://news.ycombinator.com/item?id=48645683">https://news.ycombinator.com/item?id=48645683</a></p>
<p>Points: 2</p>
<p># Comments: 0</p>
]]></description><pubDate>Tue, 23 Jun 2026 14:38:29 +0000</pubDate><link>https://github.com/cloudkj/llayer</link><dc:creator>cloudkj</dc:creator><comments>https://news.ycombinator.com/item?id=48645683</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=48645683</guid></item><item><title><![CDATA[New comment by cloudkj in "Ask HN: What Are You Working On? (April 2026)"]]></title><description><![CDATA[
<p>Some of my recent projects in case anyone finds them useful and/or interesting:<p>Automatic differentiation library in Clojure (<a href="https://github.com/cloudkj/lambda-autodiff" rel="nofollow">https://github.com/cloudkj/lambda-autodiff</a>) - inspired by Karpathy's `micrograd` from a few years ago; dusted it off recently, fixed a few issues, and was able to use it to implement a version of `microgpt` - <a href="https://cloudkj.github.io/lambda-autodiff/doc/examples/gpt/" rel="nofollow">https://cloudkj.github.io/lambda-autodiff/doc/examples/gpt/</a><p>PG&E "Share My Data" self-access library (<a href="https://github.com/cloudkj/pgesmd_self_access" rel="nofollow">https://github.com/cloudkj/pgesmd_self_access</a>) - been tinkering with various home automation and monitoring ideas, and was able to get an end-to-end prototype for ingesting and visualizing PG&E meter data using a combination of the (forked) aforementioned library, an old circa 2015 Raspberry Pi, and a handful of dollars spent on AWS services (certificate manager, load balancer) to get the full mTLS PG&E integration working. Probably deserves a blog post to document all the gory details.<p>Geo data mashups (<a href="https://github.com/cloudkj/snowpack" rel="nofollow">https://github.com/cloudkj/snowpack</a>) - small frontend utilities to overlay custom data on top of each other; was able to satisfy two recent personal use cases: (1) visualize snow depth across California ski destinations and (2) heat map of national park traffic by entrance. Previously posted at <a href="https://news.ycombinator.com/item?id=46649103">https://news.ycombinator.com/item?id=46649103</a><p>REST interface for Gymnasium reinforcement learning (fka OpenAI Gym) (<a href="https://github.com/cloudkj/gymnasium-http-api" rel="nofollow">https://github.com/cloudkj/gymnasium-http-api</a>) - simple wrapper around the forked version of OpenAI Gym to allow for language-agnostic development of RL algorithms.</p>
]]></description><pubDate>Mon, 13 Apr 2026 20:56:02 +0000</pubDate><link>https://news.ycombinator.com/item?id=47757703</link><dc:creator>cloudkj</dc:creator><comments>https://news.ycombinator.com/item?id=47757703</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=47757703</guid></item><item><title><![CDATA[Show HN: REST API for Gymnasium (fka OpenAI Gym) reinforcement learning library]]></title><description><![CDATA[
<p>I was looking through some of my past personal projects tinkering with reinforcement learning, and noticed that the REST/HTTP API for the OpenAI gym available at the time is no longer supported. The API was pretty useful back then since most of ML and deep learning hadn't quite stabilized on the various Python libraries today.<p>gymnasium-http-api is an attempt at bringing back the same type of language-agnostic support. It mostly wraps the forked and supported Gymnasium library, with some endpoints specifically for making it easier to render and visualize the training and learning process.<p>Check out the README for some examples. Hope others find it useful!</p>
<hr>
<p>Comments URL: <a href="https://news.ycombinator.com/item?id=47657165">https://news.ycombinator.com/item?id=47657165</a></p>
<p>Points: 1</p>
<p># Comments: 1</p>
]]></description><pubDate>Mon, 06 Apr 2026 04:59:00 +0000</pubDate><link>https://github.com/cloudkj/gymnasium-http-api</link><dc:creator>cloudkj</dc:creator><comments>https://news.ycombinator.com/item?id=47657165</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=47657165</guid></item><item><title><![CDATA[Show HN: Map of California SNO-Parks with current snow depth data]]></title><description><![CDATA[
<p>I was looking for a way to quickly overlay geo data (e.g. current snow depth <a href="https://www.fs.usda.gov/sites/nfs/files/r05/publication/R5_SnowDepth_Map.html" rel="nofollow">https://www.fs.usda.gov/sites/nfs/files/r05/publication/R5_S...</a>) on top of a map of points of interest, and couldn't find anything straightforward. This proof-of-concept allows for an example workflow of exporting points of interest from Google Maps (either public or your own creation) as KML files, and plotting this data against arbitrary data in GeoJSON format.<p>In the motivating example, the main challenge was in converting the raw snow depth data into the proper format, for which I've included some sample adapter code. Sharing this here in case anyone finds it useful for upcoming weekend trips, has recommendations for different tools to solve the same problem, or suggestions for improvement!</p>
<hr>
<p>Comments URL: <a href="https://news.ycombinator.com/item?id=46649103">https://news.ycombinator.com/item?id=46649103</a></p>
<p>Points: 1</p>
<p># Comments: 0</p>
]]></description><pubDate>Fri, 16 Jan 2026 17:29:51 +0000</pubDate><link>https://cloudkj.github.io/snowpack/examples/ca_sno_parks/</link><dc:creator>cloudkj</dc:creator><comments>https://news.ycombinator.com/item?id=46649103</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=46649103</guid></item><item><title><![CDATA[New comment by cloudkj in "Reddit's favorite products in one place"]]></title><description><![CDATA[
<p>Just curious - how long have you been running the site and how sustainable of a model you feel it is? Sustainable in the sense that the affiliate or ad revenue it brings in is consistent enough to justify continued maintenance, improvement, etc.<p>I'm also interested in starting up something similar for a particular niche, and would like to hear first hand accounts of the return on investment for aggregators such as these.</p>
]]></description><pubDate>Thu, 08 Sep 2022 16:49:58 +0000</pubDate><link>https://news.ycombinator.com/item?id=32768217</link><dc:creator>cloudkj</dc:creator><comments>https://news.ycombinator.com/item?id=32768217</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=32768217</guid></item><item><title><![CDATA[New comment by cloudkj in "Biden wins White House, vowing new direction for divided U.S."]]></title><description><![CDATA[
<p>+1 my thoughts as well. He's been a stellar QA, stress testing various facets of government, politics, and media.</p>
]]></description><pubDate>Sat, 07 Nov 2020 19:34:58 +0000</pubDate><link>https://news.ycombinator.com/item?id=25018138</link><dc:creator>cloudkj</dc:creator><comments>https://news.ycombinator.com/item?id=25018138</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=25018138</guid></item><item><title><![CDATA[New comment by cloudkj in "MixedName – Bilingual baby name finder"]]></title><description><![CDATA[
<p>I worked on a project with similar motivations; in my case, I had a list of criteria in mind, one of which was the number of syllables in a name. I couldn't find a good source for name syllabification, so built an n-gram language model trained on the CMUdict corpus.<p><a href="https://github.com/cloudkj/ngram-syllables" rel="nofollow">https://github.com/cloudkj/ngram-syllables</a></p>
]]></description><pubDate>Wed, 26 Aug 2020 21:12:33 +0000</pubDate><link>https://news.ycombinator.com/item?id=24287324</link><dc:creator>cloudkj</dc:creator><comments>https://news.ycombinator.com/item?id=24287324</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=24287324</guid></item><item><title><![CDATA[New comment by cloudkj in "Build yourself a weather station"]]></title><description><![CDATA[
<p>Just saw some of the references to RTL-SDR in the thread comments and started down the rabbit hole, and it looks like a fascinating area for hobbyists.<p>Can you provide some links to temperature sensors you've tried that work well with an RTL-SDR receiver? I'm also interested in setting something up with a Raspberry Pi.</p>
]]></description><pubDate>Mon, 15 Jun 2020 21:37:44 +0000</pubDate><link>https://news.ycombinator.com/item?id=23533288</link><dc:creator>cloudkj</dc:creator><comments>https://news.ycombinator.com/item?id=23533288</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=23533288</guid></item><item><title><![CDATA[New comment by cloudkj in "Ask HN: What is your blog and why should I read it?"]]></title><description><![CDATA[
<p>I'm at <a href="https://www.kelvinjiang.com/" rel="nofollow">https://www.kelvinjiang.com/</a><p>Mostly a small collection of posts about programming and personal finance. Also been running for around fifteen years.<p>Most popular post is about currency arbitrage, which seems to have had a small resurgence in interest as of late from various crypto folks: <a href="https://www.kelvinjiang.com/2010/10/currency-arbitrage-in-99-lines-of-ruby.html" rel="nofollow">https://www.kelvinjiang.com/2010/10/currency-arbitrage-in-99...</a><p>Side note: not sure if it's just a funny coincidence, but it seems like a good number of folks here have been running their sites for around fifteen years. Perhaps the timing just happens to match the typical career arc of software professionals, or maybe it was due to the popularity of blogging fifteen years ago.</p>
]]></description><pubDate>Tue, 07 Apr 2020 16:48:11 +0000</pubDate><link>https://news.ycombinator.com/item?id=22804872</link><dc:creator>cloudkj</dc:creator><comments>https://news.ycombinator.com/item?id=22804872</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=22804872</guid></item><item><title><![CDATA[Stoicism in the Time of Coronavirus]]></title><description><![CDATA[
<p>Article URL: <a href="https://www.kelvinjiang.com/2020/03/stoicism-in-the-time-of-coronavirus.html">https://www.kelvinjiang.com/2020/03/stoicism-in-the-time-of-coronavirus.html</a></p>
<p>Comments URL: <a href="https://news.ycombinator.com/item?id=22760782">https://news.ycombinator.com/item?id=22760782</a></p>
<p>Points: 3</p>
<p># Comments: 0</p>
]]></description><pubDate>Thu, 02 Apr 2020 16:33:41 +0000</pubDate><link>https://www.kelvinjiang.com/2020/03/stoicism-in-the-time-of-coronavirus.html</link><dc:creator>cloudkj</dc:creator><comments>https://news.ycombinator.com/item?id=22760782</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=22760782</guid></item><item><title><![CDATA[New comment by cloudkj in "How strong is your knot?"]]></title><description><![CDATA[
<p>Indeed. Fishing knot strength is always a hot topic of debate, particularly during the slower, off-season winter months when everyone's hunkering down and doing tackle maintenance. Here's a pretty good breakdown of the line breaking strength of various fishing knots across monofilament, fluorocarbon, and braided line: <a href="https://www.knotsforfishing.com/knot-strength-chart/" rel="nofollow">https://www.knotsforfishing.com/knot-strength-chart/</a><p>I personally prefer the Palomar Knot as it is probably the strongest knot that is also easy to tie. The Improved Clinch Knot and its brethren are also handy to know since there are so many variants that have high breaking strength; I typically teach the Improved Clinch Knot to folks new to fishing.</p>
]]></description><pubDate>Fri, 03 Jan 2020 05:29:47 +0000</pubDate><link>https://news.ycombinator.com/item?id=21943498</link><dc:creator>cloudkj</dc:creator><comments>https://news.ycombinator.com/item?id=21943498</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=21943498</guid></item><item><title><![CDATA[Top PDFs and Papers Submitted to Hacker News in 2019]]></title><description><![CDATA[
<p>Article URL: <a href="https://www.hackernewspapers.com/2019/">https://www.hackernewspapers.com/2019/</a></p>
<p>Comments URL: <a href="https://news.ycombinator.com/item?id=21931400">https://news.ycombinator.com/item?id=21931400</a></p>
<p>Points: 3</p>
<p># Comments: 0</p>
]]></description><pubDate>Wed, 01 Jan 2020 23:07:18 +0000</pubDate><link>https://www.hackernewspapers.com/2019/</link><dc:creator>cloudkj</dc:creator><comments>https://news.ycombinator.com/item?id=21931400</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=21931400</guid></item><item><title><![CDATA[New comment by cloudkj in "Bad JSON Parsers"]]></title><description><![CDATA[
<p>Coincidentally, I just wrote a simple JSON parser the other day as a toy exercise. A simplified snippet of parsing code (handling only arrays) relevant to the discussion here would be something like:<p><pre><code>  def parse(text):
      stack = []
      index = 0
      result = None
      while index < len(text):
          char = text[index]
          val = None
          if char == '[':
              stack.append([])
          elif char == ']':
              val = stack.pop()
          index += 1
          if val is not None:
              if stack:
                  stack[-1].append(val)
              else:
                  result = val
      return result
</code></pre>
Using the test utilities in the repo indicate that the parsing logic can handle arbitrarily nested arrays (e.g. up to the 5,000,000 max in the test script), bound by the limits of the heap.<p>It seems like the main criticism here is against recursive implementations. Or am I missing something?</p>
]]></description><pubDate>Fri, 08 Nov 2019 23:15:12 +0000</pubDate><link>https://news.ycombinator.com/item?id=21487928</link><dc:creator>cloudkj</dc:creator><comments>https://news.ycombinator.com/item?id=21487928</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=21487928</guid></item><item><title><![CDATA[Wrath of the Amazon Mechanical Turks]]></title><description><![CDATA[
<p>Article URL: <a href="https://www.kelvinjiang.com/2019/07/wrath-amazon-mechanical-turks.html">https://www.kelvinjiang.com/2019/07/wrath-amazon-mechanical-turks.html</a></p>
<p>Comments URL: <a href="https://news.ycombinator.com/item?id=20344991">https://news.ycombinator.com/item?id=20344991</a></p>
<p>Points: 2</p>
<p># Comments: 0</p>
]]></description><pubDate>Wed, 03 Jul 2019 15:17:45 +0000</pubDate><link>https://www.kelvinjiang.com/2019/07/wrath-amazon-mechanical-turks.html</link><dc:creator>cloudkj</dc:creator><comments>https://news.ycombinator.com/item?id=20344991</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=20344991</guid></item><item><title><![CDATA[New comment by cloudkj in "Show HN: Scar – Static websites with HTTPS, a global CDN, and custom domains"]]></title><description><![CDATA[
<p>Wow, that is a fun coincidence! Indeed, I was going for a catchy four-letter acronym in the same vein as popular stacks like LAMP or MEAN. Perhaps the fact that we both landed on the same components and permutation of components means that there's something there :)<p>I also started off in the same manner of implementation - bash scripts wrapping AWS CLI calls - then stumbled upon the more straightforward, template based approach.</p>
]]></description><pubDate>Wed, 22 May 2019 21:07:26 +0000</pubDate><link>https://news.ycombinator.com/item?id=19985509</link><dc:creator>cloudkj</dc:creator><comments>https://news.ycombinator.com/item?id=19985509</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=19985509</guid></item><item><title><![CDATA[New comment by cloudkj in "Show HN: Scar – Static websites with HTTPS, a global CDN, and custom domains"]]></title><description><![CDATA[
<p>I was actually wondering that myself: Is there interest in a hosted service? It'd be quite similar to (as many comments have suggested) Netlify and the one you linked to.<p>I was mostly going for a DIY solution since I wanted to "own" the bits being deployed while remaining as close to the infrastructure as possible. Providing a hosted service somewhat moves away from the DIY spirit; I suppose additional tools/UIs could be offered to simplify setup and deployment and still run everything directly on AWS, but at that point one might be inclined to just move to one of the other hosted solutions for the simplicity.</p>
]]></description><pubDate>Wed, 22 May 2019 18:44:30 +0000</pubDate><link>https://news.ycombinator.com/item?id=19984173</link><dc:creator>cloudkj</dc:creator><comments>https://news.ycombinator.com/item?id=19984173</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=19984173</guid></item><item><title><![CDATA[New comment by cloudkj in "Show HN: Scar – Static websites with HTTPS, a global CDN, and custom domains"]]></title><description><![CDATA[
<p>The AWS CloudFormation console has a "Designer" tool that allows drag-and-drop creation of template files, and also visualizes existing JSON or YAML template files with these diagrams.</p>
]]></description><pubDate>Wed, 22 May 2019 18:28:56 +0000</pubDate><link>https://news.ycombinator.com/item?id=19984025</link><dc:creator>cloudkj</dc:creator><comments>https://news.ycombinator.com/item?id=19984025</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=19984025</guid></item></channel></rss>