<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: _sinelaw_</title><link>https://news.ycombinator.com/user?id=_sinelaw_</link><description>Hacker News RSS</description><docs>https://hnrss.org/</docs><generator>hnrss v2.1.1</generator><lastBuildDate>Thu, 09 Apr 2026 05:24:34 +0000</lastBuildDate><atom:link href="https://hnrss.org/user?id=_sinelaw_" rel="self" type="application/rss+xml"></atom:link><item><title><![CDATA[New comment by _sinelaw_ in "Ask HN: Are you using an agent orchestrator to write code?"]]></title><description><![CDATA[
<p>The harder problem is conflicting design choices, or duplicating similar infra. It means I need to be much more involved in steering individual agents and planning up front (waterfall style), which limits the parallelism further</p>
]]></description><pubDate>Fri, 13 Feb 2026 06:36:38 +0000</pubDate><link>https://news.ycombinator.com/item?id=46999625</link><dc:creator>_sinelaw_</dc:creator><comments>https://news.ycombinator.com/item?id=46999625</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=46999625</guid></item><item><title><![CDATA[New comment by _sinelaw_ in "Ask HN: Are you using an agent orchestrator to write code?"]]></title><description><![CDATA[
<p>I did when just starting on a new project, it was working well when I had many new components to implement.
But as the project matured and stabilized every new feature is cross-cutting and it's impossible to parallelize the work without running into conflicts (design conflicts, where two agents would add similar overlapping mechanisms, and also the usual code conflicts, touching the same files). Also, with project maturity I'm much more concerned about keeping it stable and correct, which is hard to do with parallel agents running amok.</p>
]]></description><pubDate>Fri, 13 Feb 2026 05:53:25 +0000</pubDate><link>https://news.ycombinator.com/item?id=46999369</link><dc:creator>_sinelaw_</dc:creator><comments>https://news.ycombinator.com/item?id=46999369</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=46999369</guid></item><item><title><![CDATA[New comment by _sinelaw_ in "Termux"]]></title><description><![CDATA[
<p>It even runs Fresh so you can have a mini VSCode-like experience on your phone (pkg update && pkg install fresh-editor)</p>
]]></description><pubDate>Mon, 02 Feb 2026 14:05:56 +0000</pubDate><link>https://news.ycombinator.com/item?id=46856173</link><dc:creator>_sinelaw_</dc:creator><comments>https://news.ycombinator.com/item?id=46856173</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=46856173</guid></item><item><title><![CDATA[New comment by _sinelaw_ in "Show HN: PNANA - A TUI Text Editor"]]></title><description><![CDATA[
<p>Let me know if you still have issues, I'll look into it</p>
]]></description><pubDate>Thu, 29 Jan 2026 09:03:39 +0000</pubDate><link>https://news.ycombinator.com/item?id=46807580</link><dc:creator>_sinelaw_</dc:creator><comments>https://news.ycombinator.com/item?id=46807580</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=46807580</guid></item><item><title><![CDATA[New comment by _sinelaw_ in "Threat actors expand abuse of Microsoft Visual Studio Code"]]></title><description><![CDATA[
<p>Is this 'task' feature really useful? I'd say applications like IDEs and text editors should not have automatic arbitrary execution of code in the first place. 'eval' should be blocked and extensions/plugins should have only very limited power to execute external logic (such as processes for LSP) or require allowlisting manually every process.</p>
]]></description><pubDate>Thu, 22 Jan 2026 11:45:52 +0000</pubDate><link>https://news.ycombinator.com/item?id=46718010</link><dc:creator>_sinelaw_</dc:creator><comments>https://news.ycombinator.com/item?id=46718010</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=46718010</guid></item><item><title><![CDATA[New comment by _sinelaw_ in "ASCII-Driven Development"]]></title><description><![CDATA[
<p>For Claude, it's enough to prompt "use tmux to test", that usually does the work out of the box. If colors are important I also add "use -e option with capture-pane to see colors". It just works. I used it regularly with Claude and my TUI. For other agents other than Claude I need to use a more specific set of instructions ("use send-keys, capture-pane and mouse control via tmux" etc.)<p>Since I have e2e tests, I only use the agent for: guiding it on how to write the e2e test ("use tmux to try the new UI and then write a test") or to evaluate its overall usability (fake user testing, before actual user testing): "use tmux to evaluate the feature X and compile a list of usability issues"</p>
]]></description><pubDate>Sun, 11 Jan 2026 07:03:50 +0000</pubDate><link>https://news.ycombinator.com/item?id=46573333</link><dc:creator>_sinelaw_</dc:creator><comments>https://news.ycombinator.com/item?id=46573333</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=46573333</guid></item><item><title><![CDATA[New comment by _sinelaw_ in "I switched from VSCode to Zed"]]></title><description><![CDATA[
<p>I'm also a long time emacs user (>15 years) but got tired of the endless config fiddling, with some packages breaking over emacs versions, other packages which were cool at the time slowly getting stale and need to switch to yet another similar incarnation of the same idea.
And most of all having to recover the config every time I use a new computer or just connect to a new VM.<p>I'm building an alternative, and I haven't opened emacs for a month now</p>
]]></description><pubDate>Tue, 06 Jan 2026 11:57:00 +0000</pubDate><link>https://news.ycombinator.com/item?id=46511247</link><dc:creator>_sinelaw_</dc:creator><comments>https://news.ycombinator.com/item?id=46511247</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=46511247</guid></item><item><title><![CDATA[New comment by _sinelaw_ in "I switched from VSCode to Zed"]]></title><description><![CDATA[
<p>What specifically are you missing from Zed? (not a Zed user but curious to know)</p>
]]></description><pubDate>Tue, 06 Jan 2026 11:52:14 +0000</pubDate><link>https://news.ycombinator.com/item?id=46511213</link><dc:creator>_sinelaw_</dc:creator><comments>https://news.ycombinator.com/item?id=46511213</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=46511213</guid></item><item><title><![CDATA[New comment by _sinelaw_ in "I switched from VSCode to Zed"]]></title><description><![CDATA[
<p>I also got tired of the bloat and also prefer working from the terminal.<p>I'm building Fresh [0] [1] as an alternative to VSCode that runs in your terminal, with the main goal being ease-of-use out of the box (not a vi-clone modal editor), for example supports mouse, menu, command palette, etc out of the box. LSP as well. I'm focused on making it easy to use with minimum or zero configuration.<p>[0] <a href="https://github.com/sinelaw/fresh" rel="nofollow">https://github.com/sinelaw/fresh</a>
[1] <a href="https://sinelaw.github.io/fresh/" rel="nofollow">https://sinelaw.github.io/fresh/</a></p>
]]></description><pubDate>Tue, 06 Jan 2026 11:50:25 +0000</pubDate><link>https://news.ycombinator.com/item?id=46511200</link><dc:creator>_sinelaw_</dc:creator><comments>https://news.ycombinator.com/item?id=46511200</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=46511200</guid></item><item><title><![CDATA[New comment by _sinelaw_ in "Show HN: minfern – Type inference for JavaScript without transpilation"]]></title><description><![CDATA[
<p>For a long time I watched TypeScript take over the JavaScript ecosystem as a reasonable way to add structure and safety. But even before TypeScript existed I was thinking about how to approach this differently, ripping out the "bad parts" of JavaScript instead of accommodating them with a complex and partially strict type system.<p>Also, recently I found out just how expensive (runtime-wise) it is to host a full-blown TypeScript host, such as Deno. This is very cool tech but kind of bloated when all you want is to run some JavaScript, e.g. as a plugin system. It's possible to just pre-compile (transpile) your .ts files and then ship only the JavaScript output and use a lightweight runtime (QuickJS or even the new Micro QuickJS), but then compilation becomes a neccessary step for what could've been purely dynamic, ad-hoc and quick plugins (think elisp in emacs).<p>minfern is my second shot at this, and I'm exploring just how much JavaScript idioms are "must have" for it to be useful.</p>
]]></description><pubDate>Sun, 28 Dec 2025 18:54:13 +0000</pubDate><link>https://news.ycombinator.com/item?id=46413435</link><dc:creator>_sinelaw_</dc:creator><comments>https://news.ycombinator.com/item?id=46413435</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=46413435</guid></item><item><title><![CDATA[Show HN: minfern – Type inference for JavaScript without transpilation]]></title><description><![CDATA[
<p>I wrote a type checker (minfern - <a href="https://github.com/sinelaw/minfern" rel="nofollow">https://github.com/sinelaw/minfern</a>) for a subset of javascript with no transpilation. It accepts valid JS as input and allows a subset of JS code to pass the checking. There’s no transpilation or compilation needed. The input code can be run directly.<p>Try it online at: <a href="https://sinelaw.github.io/minfern/" rel="nofollow">https://sinelaw.github.io/minfern/</a><p>It could be used for checking code targeting normal JS runtimes, or runtimes like mquickjs (though minfern is more strict but also allows things like ‘const’ which mquickjs doesn’t). minfern is based on the type system for Infernu, which I wrote back in 2015, but is less hacky and has a cleaner implementation.<p>Very simple example:<p><pre><code>  function calculateTotal(product, quantity) {
    return product.price * quantity;
  }
  var item = {
    name: "Wireless Mouse",
    cost: 25 // Note the property name is 'cost', not 'price'
  };
  console.log(calculateTotal(item, 2));
</code></pre>
Output:<p><pre><code>  Error: Property 'price' not found in type {cost: Number, name: String}
      ╭─[ tests/example_error.js:11:13 ]
      │
   11 │ console.log(calculateTotal(item, 2));
      │             ───────────┬───────────  
      │                        ╰───────────── Property 'price' not found in type {cost: Number, name: String}
  ────╯
</code></pre>
Type system features:<p>- Full type inference with principle typing, support for type annotations<p>- Parameteric polymorphism (aka “generic functions”)<p>- Structural typing with row-type polymorphism<p>- Object method typing with equi-recursive types (for self/“this”)<p>- Polymorphic object methods (still considered rank-1)<p>- Basic constraints “Plus a” and “Indexable a” to allow + and [] to apply to different types like numbers, strings, arrays.<p>This allows a subset of JS expressions to be checked.<p>Some JS idioms are not allowed by this system:<p>- No union types (design choice) - return values, variables, arrays, etc must have a single type. Currently it doesn’t support returning null/undefined either, this can be fixed in the future by adding Optional as a type, but makes principle typing harder.<p>- No sum types (yet) - this explains why I haven’t added Optional<T>, I think sum types will fit in the type system and are doable. Once added also enums could be expressed.<p>- Value restriction forbids reassigning to polymorphic variables after declaration (ML-style).<p>- As a result of the above - can’t use && / || operators like some people do in JS. The operators are required to have the same type on both sides (no allowing “undefined” on one side)<p>- No type coercion, converting a number to a string (for example) requires using String() constructor.<p>- And probably other limitations that people might see as a limitation rather than a feature of the type system.<p>Disclaimer: this type checker comes with NO WARRANTY. I am not a language expert. I didn’t prove soundness, and would love someone who’s an expert to look at it. That being said - it looks correct on all the tests I’ve tried. It’s based on HMF and other published type systems but combines things in a different way.<p>GitHub: <a href="https://github.com/sinelaw/minfern" rel="nofollow">https://github.com/sinelaw/minfern</a></p>
<hr>
<p>Comments URL: <a href="https://news.ycombinator.com/item?id=46410720">https://news.ycombinator.com/item?id=46410720</a></p>
<p>Points: 2</p>
<p># Comments: 1</p>
]]></description><pubDate>Sun, 28 Dec 2025 12:50:42 +0000</pubDate><link>https://github.com/sinelaw/minfern</link><dc:creator>_sinelaw_</dc:creator><comments>https://news.ycombinator.com/item?id=46410720</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=46410720</guid></item><item><title><![CDATA[New comment by _sinelaw_ in "Show HN: Fresh – A new terminal editor built in Rust"]]></title><description><![CDATA[
<p>Added GPM support, try latest master or release >= 0.1.25 (rolling out now)</p>
]]></description><pubDate>Sun, 07 Dec 2025 14:10:36 +0000</pubDate><link>https://news.ycombinator.com/item?id=46181789</link><dc:creator>_sinelaw_</dc:creator><comments>https://news.ycombinator.com/item?id=46181789</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=46181789</guid></item><item><title><![CDATA[New comment by _sinelaw_ in "Show HN: Fresh – A new terminal editor built in Rust"]]></title><description><![CDATA[
<p>Did you try "use option as meta key"? <a href="https://superuser.com/questions/1038947/using-the-option-key-properly-on-mac-terminal" rel="nofollow">https://superuser.com/questions/1038947/using-the-option-key...</a></p>
]]></description><pubDate>Sun, 07 Dec 2025 08:16:46 +0000</pubDate><link>https://news.ycombinator.com/item?id=46180099</link><dc:creator>_sinelaw_</dc:creator><comments>https://news.ycombinator.com/item?id=46180099</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=46180099</guid></item><item><title><![CDATA[New comment by _sinelaw_ in "Show HN: Fresh – A new terminal editor built in Rust"]]></title><description><![CDATA[
<p>Done, you can pass now file, or file:line, or file:line:column in the cli</p>
]]></description><pubDate>Sun, 07 Dec 2025 00:14:53 +0000</pubDate><link>https://news.ycombinator.com/item?id=46177948</link><dc:creator>_sinelaw_</dc:creator><comments>https://news.ycombinator.com/item?id=46177948</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=46177948</guid></item><item><title><![CDATA[New comment by _sinelaw_ in "Show HN: Fresh – A new terminal editor built in Rust"]]></title><description><![CDATA[
<p>zed: ~20 seconds to open the file, 4.7gb RAM<p>no ansi color rendering</p>
]]></description><pubDate>Sat, 06 Dec 2025 23:04:57 +0000</pubDate><link>https://news.ycombinator.com/item?id=46177410</link><dc:creator>_sinelaw_</dc:creator><comments>https://news.ycombinator.com/item?id=46177410</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=46177410</guid></item><item><title><![CDATA[New comment by _sinelaw_ in "Show HN: Fresh – A new terminal editor built in Rust"]]></title><description><![CDATA[
<p>I took the feedback and now you can install binaries in any of these methods:<p>- Homebrew (MacOS)<p>- Arch Linux AUR<p>- Debian/Ubuntu .deb<p>- Fedora/RHEL .rpm<p>as well as cargo install (which builds from source), npm, npx or building from source by cloning</p>
]]></description><pubDate>Fri, 05 Dec 2025 09:10:59 +0000</pubDate><link>https://news.ycombinator.com/item?id=46158620</link><dc:creator>_sinelaw_</dc:creator><comments>https://news.ycombinator.com/item?id=46158620</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=46158620</guid></item><item><title><![CDATA[New comment by _sinelaw_ in "Show HN: Fresh – A new terminal editor built in Rust"]]></title><description><![CDATA[
<p>It does and it boils down to deno (typescript plugin support)<p>I hate it, and I'll keep working on reducing it</p>
]]></description><pubDate>Fri, 05 Dec 2025 08:14:16 +0000</pubDate><link>https://news.ycombinator.com/item?id=46157961</link><dc:creator>_sinelaw_</dc:creator><comments>https://news.ycombinator.com/item?id=46157961</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=46157961</guid></item><item><title><![CDATA[New comment by _sinelaw_ in "Show HN: Fresh – A new terminal editor built in Rust"]]></title><description><![CDATA[
<p>Either because I move to a new machine, or because new version of emacs breaks some (no longer maintained) packages</p>
]]></description><pubDate>Thu, 04 Dec 2025 18:58:03 +0000</pubDate><link>https://news.ycombinator.com/item?id=46151384</link><dc:creator>_sinelaw_</dc:creator><comments>https://news.ycombinator.com/item?id=46151384</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=46151384</guid></item><item><title><![CDATA[New comment by _sinelaw_ in "Show HN: Fresh – A new terminal editor built in Rust"]]></title><description><![CDATA[
<p>LSP is working but requires polish. Go to definition, completion suggestions, inlay type hints and symbol highlighting are all working (probably not as pretty as they should)<p>Tree-sitter is supported and used internally for a subset of languages for syntax highlighting (other languages use textmate grammars). What exactly do you mean by support for tree-sitter parsers?<p>I wasn't aware of Debug Adapter Protocol! I'll take a look at that.</p>
]]></description><pubDate>Thu, 04 Dec 2025 17:05:33 +0000</pubDate><link>https://news.ycombinator.com/item?id=46149909</link><dc:creator>_sinelaw_</dc:creator><comments>https://news.ycombinator.com/item?id=46149909</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=46149909</guid></item><item><title><![CDATA[New comment by _sinelaw_ in "Show HN: Fresh – A new terminal editor built in Rust"]]></title><description><![CDATA[
<p>Thanks! Will take a look. Opened <a href="https://github.com/sinelaw/fresh/issues/231" rel="nofollow">https://github.com/sinelaw/fresh/issues/231</a></p>
]]></description><pubDate>Thu, 04 Dec 2025 15:48:43 +0000</pubDate><link>https://news.ycombinator.com/item?id=46148918</link><dc:creator>_sinelaw_</dc:creator><comments>https://news.ycombinator.com/item?id=46148918</comments><guid isPermaLink="false">https://news.ycombinator.com/item?id=46148918</guid></item></channel></rss>