<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: amterp</title><link>https://news.ycombinator.com/user?id=amterp</link><description>Hacker News RSS</description><docs>https://hnrss.org/</docs><generator>hnrss v2.1.1</generator><lastBuildDate>Wed, 15 Apr 2026 09:32:19 +0000</lastBuildDate><atom:link href="https://hnrss.org/user?id=amterp" rel="self" type="application/rss+xml"></atom:link><item><title><![CDATA[New comment by amterp in "Astral to Join OpenAI"]]></title><description><![CDATA[
<p>Happy for the devs, they deserve the presumably massive payout for the amount of value they’ve brought to the Python community.</p>
]]></description><pubDate>Thu, 19 Mar 2026 13:46:45 +0000</pubDate><link>https://news.ycombinator.com/item?id=47439371</link><dc:creator>amterp</dc:creator><comments>https://news.ycombinator.com/item?id=47439371</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=47439371</guid></item><item><title><![CDATA[New comment by amterp in "Ask HN: What Are You Working On? (March 2026)"]]></title><description><![CDATA[
<p>I am continuing to work on Kan [0], a dev-focused kanban board that works via plain text files in your repository. I am finding it really useful for solo projects, giving a really simple way to get per-project Kanban boards that I can sync via Git. Since it's local only, it's really snappy, and given the dev-focus, it can offer some pretty nice workflows with local hooks, customization, etc.<p>The other project I am continuing to work on is Rad [1], a programming language tailor made for writing CLI scripts. It's not for enterprise software, it specializes specifically in CLI, offering all the essentials built-in, such as a declarative approach to arguments and generated help (as opposed to Bash where you have to roll your own arg parsing and help strings each time).<p>[0] <a href="https://github.com/amterp/kan" rel="nofollow">https://github.com/amterp/kan</a><p>[1] <a href="https://github.com/amterp/rad" rel="nofollow">https://github.com/amterp/rad</a></p>
]]></description><pubDate>Mon, 09 Mar 2026 15:47:35 +0000</pubDate><link>https://news.ycombinator.com/item?id=47310609</link><dc:creator>amterp</dc:creator><comments>https://news.ycombinator.com/item?id=47310609</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=47310609</guid></item><item><title><![CDATA[New comment by amterp in "Ask HN: What are you working on? (February 2026)"]]></title><description><![CDATA[
<p>I've been working on Kan [0] which is a CLI written in Go that can serve a Kanban board ( `kan serve` ). Serving the Kanban board means opening up a localhost page for a Kanban board which acts on files stored locally on your machine, in your repo. Just plaintext JSON & TOML files. The Kanban board is written in TypeScript. You commit Kanban board changes like any other files.<p>I use it for all my personal projects. Any new project where I will have todo lists, I'll run `kan init` and `kan serve`, and begin tracking tasks. Because it's a CLI, you can interact with the board thru the CLI with commands like `kan add` and `kan edit`, so I've even included a SKILL markdown file in the repo which I use to let Claude read and interact with my boards. You can also navigate all your boards from a single `kan serve`, so it's convenient and snappy cross-project too.<p>[0] <a href="https://github.com/amterp/kan" rel="nofollow">https://github.com/amterp/kan</a></p>
]]></description><pubDate>Wed, 11 Feb 2026 04:23:53 +0000</pubDate><link>https://news.ycombinator.com/item?id=46970799</link><dc:creator>amterp</dc:creator><comments>https://news.ycombinator.com/item?id=46970799</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=46970799</guid></item><item><title><![CDATA[New comment by amterp in "My AI Adoption Journey"]]></title><description><![CDATA[
<p>Really appreciated this perspective. Much more tempered and less hype than a lot of other articles I see.<p>I thought the "dont let agents finishing interrupt you" workflow was an interesting point. I've set up chime hooks to basically do the opposite, and this gives me pause to wonder if I'm underestimating the cost of context switching. I'll give it a go.</p>
]]></description><pubDate>Sat, 07 Feb 2026 15:10:05 +0000</pubDate><link>https://news.ycombinator.com/item?id=46924464</link><dc:creator>amterp</dc:creator><comments>https://news.ycombinator.com/item?id=46924464</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=46924464</guid></item><item><title><![CDATA[New comment by amterp in "Make.ts"]]></title><description><![CDATA[
<p>Yep each one is a fresh session. Are you asking because you'd like a persistent one?</p>
]]></description><pubDate>Wed, 28 Jan 2026 19:57:20 +0000</pubDate><link>https://news.ycombinator.com/item?id=46800718</link><dc:creator>amterp</dc:creator><comments>https://news.ycombinator.com/item?id=46800718</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=46800718</guid></item><item><title><![CDATA[New comment by amterp in "Make.ts"]]></title><description><![CDATA[
<p>This is exactly the frustration that lead me to write Rad [0] (the README leads with an example). I've been working on it for over a year and the goal is basically to offer a programming language <i>specifically for writing CLIs</i>. It aims for declarative args (no Bash ops parsing each time), automatic --help generation, friendly (Python-like) syntax, and it's perfect for dev build scripts. I'll typically have something like this:<p><pre><code>    #!/usr/bin/env rad
    ---
    Dev automation script.
    ---

    args:
        build   b bool    # Build the project
        test    t bool    # Run tests
        lint    l bool    # Run linter
        run     r bool    # Start dev server
        release R bool    # Release mode
        filter  f str?    # Test filter pattern

        filter requires test

    if build:
        mode = release ? "--release" : ""
        print("Building ({release ? 'release' : 'debug'})...")
        $`cargo build {mode}`

    if lint:
        print("Linting...")
        $`cargo clippy -- -D warnings`

    if test:
        f = filter ? "-- {filter}" : ""
        print("Running tests{filter ? ' (filter: {filter})' : ''}...")
        $`cargo test {f}`

    if run:
        bin = release ? "target/release/server" : "target/debug/server"
        $`./{bin}`


    Usage: ./dev -b (build), ./dev -blt -f "test_auth" (build, lint, test auth), ./dev -r (just run).
</code></pre>
Actively being developed!<p>[0] <a href="https://github.com/amterp/rad" rel="nofollow">https://github.com/amterp/rad</a></p>
]]></description><pubDate>Wed, 28 Jan 2026 15:01:33 +0000</pubDate><link>https://news.ycombinator.com/item?id=46796206</link><dc:creator>amterp</dc:creator><comments>https://news.ycombinator.com/item?id=46796206</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=46796206</guid></item><item><title><![CDATA[New comment by amterp in "Ask HN: What Are You Working On? (Nov 2025)"]]></title><description><![CDATA[
<p>I am working on Rad [0], a programming language built specifically for CLI scripts, so you don't need to write Bash, and it offers CLI-tailored features which make it a better choice than Python.<p>Lately I've mainly been working on stability and bug fixes. I've released some big features the past few months so I'm doing a big push on polish, before I again tackle some larger features that I'd like to implement.<p>If CLI scripts is something you're interested in at all, give it a go! We have docs and a guide [1] for getting started, feedback very welcome :)<p>[0] <a href="https://github.com/amterp/rad" rel="nofollow">https://github.com/amterp/rad</a>
[1] <a href="https://amterp.github.io/rad/guide/getting-started/" rel="nofollow">https://amterp.github.io/rad/guide/getting-started/</a></p>
]]></description><pubDate>Mon, 10 Nov 2025 08:33:18 +0000</pubDate><link>https://news.ycombinator.com/item?id=45873795</link><dc:creator>amterp</dc:creator><comments>https://news.ycombinator.com/item?id=45873795</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=45873795</guid></item><item><title><![CDATA[New comment by amterp in "Zensical – A modern static site generator built by the Material for MkDocs team"]]></title><description><![CDATA[
<p>This looks great!<p>I'm currently using Material for MkDocs but was thinking of switching off it, in part due to the lack of options around having custom highlighting in code blocks (my docs website is for a programming language I am working on). What are Zensical's plans here? Tree sitter highlighting would be perfect in my case.</p>
]]></description><pubDate>Mon, 10 Nov 2025 07:55:24 +0000</pubDate><link>https://news.ycombinator.com/item?id=45873541</link><dc:creator>amterp</dc:creator><comments>https://news.ycombinator.com/item?id=45873541</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=45873541</guid></item><item><title><![CDATA[New comment by amterp in "Scripts I wrote that I use all the time"]]></title><description><![CDATA[
<p>Love this, lots of great ideas I'll be stealing :)<p>Folks interested in scripting like this might like this tool I'm working on <a href="https://github.com/amterp/rad" rel="nofollow">https://github.com/amterp/rad</a><p>Rad is built specifically for writing CLI scripts and is perfect for these sorts of small to medium scripts, takes a declarative approach to script arguments, and has first-class shell command integration. I basically don't write scripts in anything else anymore.</p>
]]></description><pubDate>Wed, 22 Oct 2025 21:44:01 +0000</pubDate><link>https://news.ycombinator.com/item?id=45675543</link><dc:creator>amterp</dc:creator><comments>https://news.ycombinator.com/item?id=45675543</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=45675543</guid></item><item><title><![CDATA[New comment by amterp in "Ask HN: What are you working on? (October 2025)"]]></title><description><![CDATA[
<p>Working hard on Rad, which is aiming to be a Bash-replacement for writing CLI scripts. The goal is to allow users to write maintainable scripts with declarative argument parsing, built-in JSON processing, HTTP requests, and interactive
prompts - all in a familiar, readable syntax (Python-like!). Here's an example of the declarative approach to script args:<p><pre><code>  args:
      username str           # Required string
      password str?          # Optional string
      token str?             # Optional auth token
      age int                # Required integer
      status str             # Required string
  
      username requires password     // If username is provided, password must also be provided
      token excludes password        // Token and password cannot be used together
      age range [18, 99]             // Inclusive range from 18 to 99
      status enum ["active", "inactive", "pending"]
</code></pre>
Rad does all the arg parsing for you (unlike Bash), including validation for those constraints you wrote, and you can get on with writing the rest of your script is a nice, friendly syntax!<p>Very keen for feedback so if any of that sounds interesting, feel free to give it a go!<p><a href="https://github.com/amterp/rad" rel="nofollow">https://github.com/amterp/rad</a></p>
]]></description><pubDate>Mon, 13 Oct 2025 09:58:28 +0000</pubDate><link>https://news.ycombinator.com/item?id=45566620</link><dc:creator>amterp</dc:creator><comments>https://news.ycombinator.com/item?id=45566620</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=45566620</guid></item><item><title><![CDATA[New comment by amterp in "Ask HN: What are you working on? (September 2025)"]]></title><description><![CDATA[
<p>Work continues for me on Rad[0]. It's a programming language designed specifically for CLI scripts. I was sick of writing Bash scripts and thought we could do much, much better, so that's the goal with this project.
Been working on it for a bit over a year now, and I'm using it every day! Still have many big features in mind, such as commands, I suspect I'm still only at the beginning at this journey!<p>[0] <a href="https://github.com/amterp/rad" rel="nofollow">https://github.com/amterp/rad</a></p>
]]></description><pubDate>Tue, 30 Sep 2025 12:05:18 +0000</pubDate><link>https://news.ycombinator.com/item?id=45424437</link><dc:creator>amterp</dc:creator><comments>https://news.ycombinator.com/item?id=45424437</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=45424437</guid></item><item><title><![CDATA[New comment by amterp in "Stop writing CLI validation. Parse it right the first time"]]></title><description><![CDATA[
<p>Very much agree with the article, this is one of the reasons why I wrote Rad [0], which people here might find interesting.
The idea is you write CLI scripts with a <i>declarative</i> approach to script arguments, including all the constraints on them, including relational ones.
So you don't write your own CLI validation - you declare the shape that args should take, let Rad check user input for you, and you can focus your script on the interesting stuff.
For example<p><pre><code>  args:
      username str           # Required string
      password str?          # Optional string
      token str?             # Optional auth token
      age int                # Required integer
      status str             # Required string
  
      username requires password     // If username is provided, password must also be provided
      token excludes password        // Token and password cannot be used together
      age range [18, 99]             // Inclusive range from 18 to 99
      status enum ["active", "inactive", "pending"]
</code></pre>
Rad will handle all the validation for you, you can just write the rest of your script assuming the constraints you declared are met.<p>[0]: <a href="https://github.com/amterp/rad" rel="nofollow">https://github.com/amterp/rad</a></p>
]]></description><pubDate>Mon, 08 Sep 2025 09:51:10 +0000</pubDate><link>https://news.ycombinator.com/item?id=45166356</link><dc:creator>amterp</dc:creator><comments>https://news.ycombinator.com/item?id=45166356</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=45166356</guid></item><item><title><![CDATA[New comment by amterp in "Modernish – A library for writing programs for POSIX-based shells and utilities"]]></title><description><![CDATA[
<p>Modern cmd line scripting is an interesting area and I like seeing people's different approaches to improving it. Personally, I want to get as far away from writing control flow, loops, etc in Bash as I can. I'm working on <a href="https://github.com/amterp/rad">https://github.com/amterp/rad</a> which is a CLI scripting language that takes a more Python-like approach, which people here might find interesting, though it serves slightly different cases than Modernish.</p>
]]></description><pubDate>Fri, 25 Jul 2025 11:08:44 +0000</pubDate><link>https://news.ycombinator.com/item?id=44681856</link><dc:creator>amterp</dc:creator><comments>https://news.ycombinator.com/item?id=44681856</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=44681856</guid></item><item><title><![CDATA[New comment by amterp in "Ask HN: What Are You Working On? (June 2025)"]]></title><description><![CDATA[
<p>Been working on <a href="https://github.com/amterp/rad">https://github.com/amterp/rad</a> for almost a year now. It's a programming language designed for writing good CLI scripts, so it's aiming to replace Bash but is much more Python-like, and offers unique syntax and a bunch of in-built support for scripting.<p>Please check it out if it sounds at all interesting! Keen for feedback :) I've written some docs, including a "getting started" guide, linked in the GitHub page.</p>
]]></description><pubDate>Mon, 30 Jun 2025 12:57:25 +0000</pubDate><link>https://news.ycombinator.com/item?id=44422711</link><dc:creator>amterp</dc:creator><comments>https://news.ycombinator.com/item?id=44422711</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=44422711</guid></item><item><title><![CDATA[New comment by amterp in "LLMs pose an interesting problem for DSL designers"]]></title><description><![CDATA[
<p>Thanks! :) Yeah in my experience they're <i>okay</i> at Bash but I'm never happy with the scripts it makes, I feel like the ceiling is pretty low on how good Bash scripts can get without a disproportionate amount of effort.<p>I'm taking a lot of inspiration from Python in the syntax and I'm actually worried it will trip up any LLM I train on my language since I think it will risk probabilistically just reverting to Python mid-answer  Time will tell</p>
]]></description><pubDate>Wed, 18 Jun 2025 10:46:54 +0000</pubDate><link>https://news.ycombinator.com/item?id=44308674</link><dc:creator>amterp</dc:creator><comments>https://news.ycombinator.com/item?id=44308674</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=44308674</guid></item><item><title><![CDATA[New comment by amterp in "LLMs pose an interesting problem for DSL designers"]]></title><description><![CDATA[
<p>I've been working on a programming language for about a year which aims to replace Bash for scripting but is far closer to Python. It's something I hope to see used by many other people in the future, but a very common objection I hear from people I pitch it to is "yeah but an LLM could just generate me a Python script to do this, sure it might be uglier, twice as long, and not work quite as well, but it saved me from learning a new language and is probably <i>fine</i>", to which I have lots of counters on why that's a flawed argument, but it still demonstrates what I think is an increase in people's skepticism towards new languages which will contribute to the stagnation the author is talking about. If you're writing a new language, it's demotivating to see people's receptiveness to something new diminish.<p>I don't blame anyone in the picture, I don't disagree that time saved with LLMs can be well worth it, but it still is a topic I think we in the PL community need to wrestle more with.</p>
]]></description><pubDate>Tue, 17 Jun 2025 22:03:47 +0000</pubDate><link>https://news.ycombinator.com/item?id=44304454</link><dc:creator>amterp</dc:creator><comments>https://news.ycombinator.com/item?id=44304454</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=44304454</guid></item><item><title><![CDATA[New comment by amterp in "Ask HN: What are you working on? (May 2025)"]]></title><description><![CDATA[
<p>I'm working on a programming language aiming to replace Bash. It specifically targets CLI scripts where Python or Rust are overkill, but it contains a bunch of constructs that make it particularly well suited for CLI scripts, including arg parsing, table formatting, HTTP querying, Bash command invocation, etc.<p>Keen to hear people's thoughts and feedback! GitHub here: <a href="https://github.com/amterp/rad">https://github.com/amterp/rad</a><p>The docs site also contains a guide for getting started, including some of the unique features: <a href="https://amterp.github.io/rad/guide/getting-started/" rel="nofollow">https://amterp.github.io/rad/guide/getting-started/</a></p>
]]></description><pubDate>Mon, 26 May 2025 21:33:15 +0000</pubDate><link>https://news.ycombinator.com/item?id=44101884</link><dc:creator>amterp</dc:creator><comments>https://news.ycombinator.com/item?id=44101884</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=44101884</guid></item></channel></rss>