Pull to refresh

My feed

Type
Rating limit
Level of difficulty
Warning
To set up filters sign in or sign up
Post

Gaunt Sloth 2.0: new package name, new commands, stricter config

About a year ago I wrote about Gaunt Sloth reaching 1.0, and in March about a couple of smaller additions. Today 2.0 is out, the biggest release so far, big enough to ship under a new npm name.

GitHub: https://github.com/pukeko-robotics/gaunt-sloth Docs: https://gauntsloth.app/docs/ Release notes: https://github.com/pukeko-robotics/gaunt-sloth/releases/tag/v2.0.0

Renamed: remove the old package first

2.0 is published as gaunt-sloth; gaunt-sloth-assistant is deprecated.

npm rm -g gaunt-sloth-assistant
npm i -g gaunt-sloth
gth --version

Both own the gth binary, so installing over 1.x can fail with EEXIST and leave 1.x running.

Packages

The CLI now sits on scoped packages: @gaunt-sloth/core, agent, review, batch, and JUnit and TeamCity eval reporters. @gaunt-sloth/review embeds standalone in CI with no commander, MCP or A2A dependency. gaunt-sloth-acp lets editors such as Zed use Gaunt Sloth as their agent.

New commands

The CLI went from eight commands to sixteen:

  • gth exec runs a markdown prompt as a pipe-clean script with an exit code.

  • gth eval grades YAML test cases with assertions and an LLM judge; think pytest for prompts. More in the next post.

  • gth batch runs one prompt over a CSV/JSONL of inputs, across several models if you like.

  • gth workflow runs a JS file that orchestrates the agent.

  • gth models lists callable models with context limits and cost from models.dev.

  • gth history / gth insights search and summarise recorded sessions.

Sessions

chat and code open a full-screen UI with markdown, collapsible tool panels and slash commands. Mouse reporting is on, so Shift-drag to select text, or /mouse off.

Sessions are recorded to ~/.gsloth/history.db by default, so --resume and /resume pick a conversation up again. /compact folds a long one into a summary, and the session does it by itself near the context limit. History stores tool output unredacted; history.enabled: false turns it off.

Shell commands, with brakes

In 1.x the agent only ran fixed commands you configured. Now it can compose its own, and approvals picks one of five modes: manual, write, assisted (default: a rater lets safe commands run and asks about the rest), auto (risky commands go back to the agent first) and bypass. A deterministic floor refuses the worst commands in every mode, bypass included. approvals.rater can point the rater at a stronger model. gth init ollama gets you running on local hardware.

Reviews find their own requirements

Like gth pr, gth review can now fetch the issue for a branch (commands.review.discovery), directly from Jira or through a discovery agent with tools you allow. With mergeBase it reviews a branch as its PR will show it. See the Jira example.

Strict config: the breaking part

Config is validated against one schema with no back-compat coercion. Old 1.x shapes (top-level command keys, boolean rating, devTools, *Provider keys, flat prompt keys) are hard errors. Run gth config validate before upgrading and read the migration guide.

Changes that raise no error:

  • the output header is one compact line, report files are no longer written, history is on;

  • gth api ag-ui binds to 127.0.0.1;

  • review and pr exit non-zero when the agent fails;

  • embedders import from @gaunt-sloth/*.

A JSON Schema gives editor autocomplete, .gsloth.config.ts works, and config is found by walking up from the current folder. New docs start at the Quickstart.

Try it, file an issue, or drop feedback in Discussions. Thanks to everyone who contributed to 2.0.

Tags:
+3
Comments0
Article

The Same Linux Failure, Debugged Twice: 2008 Sysadmin Tools vs a 2026 DevOps Stack

Level of difficultyHard
Reading time11 min
Reach and readers4.3K

A Linux gateway began dropping new connections even though CPU usage was low, memory looked healthy, disks were almost idle, and the application itself continued responding normally. The same failure was reproduced twice in a small lab and investigated using two completely different approaches. The first run relied on tools that would have been familiar to a Linux sysadmin in 2008: top, vmstat, dmesg, proc, sysctl, netstat, and tcpdump. The second run started with Prometheus, Grafana, historical metrics, and modern observability. Both approaches eventually reached the same kernel-level problem, but the path to the answer was very different.

Read more
Article

The MUSe Framework: How to Measure the Functional Scale of a Digital Product

Level of difficultyEasy
Reading time6 min
Reach and readers3.8K

A practical method for comparing B2B products by their structure, unique components, and key user scenarios.

If you are planning to design or update a user interface for a B2B product and do not want to appear as an outsider in the eyes of the business, you need to identify the product’s objective complexity — or, more precisely, its functional scale.

This helps you estimate the time and resources required, justify those estimates, and decide which product to work on first when all other conditions are equal.

Read more
Article

When PostgreSQL Throughput Looks Fine but p99 Is Already Falling Apart

Level of difficultyHard
Reading time11 min
Reach and readers4.5K

A PostgreSQL service can keep processing almost the same number of requests per second while its slowest requests become several times worse. CPU may still look comfortable, query execution time may barely move, and throughput may remain almost flat. The problem can appear one layer earlier, inside the connection pool, where requests start waiting before PostgreSQL even sees them. This experiment shows how that happens and why p99 usually notices it long before RPS does.

Read more
Article

Centrifugal. A flexible user interface for creating standalone web applications

Level of difficultyEasy
Reading time4 min
Reach and readers6.3K

Hi everyone! Today I’d like to talk about another open-source project of mine for building web applications based on Angular.

Over the past few years, I have conducted numerous successful experiments with high-performance web interfaces, which has given me a clear understanding of the structure and architecture for the project discussed below.

So, meet Centrifugal. Check out the project’s official website—there are plenty of cool use cases there!

The project was originally conceived to create a set of high-performance, flexible tools and components for building web applications. However, during one of the development iterations, I decided to add support for creating “all-in-one” interfaces—specifically, a standalone application mode featuring a fully customizable virtual keyboard. This enabled full support for building user interfaces for applications such as self-service kiosks and similar systems.

Read more
Article

The Anthill Paradox: Why «Safe» AI Agents Build Unsafe Systems

Level of difficultyEasy
Reading time10 min
Reach and readers5.2K

Researchers and developers are increasingly warning that LLM-based agents exhibit dangerous, unpredictable properties. These properties potentially threaten not just the stability of internet platforms, but humanity as a whole.

Some propose halting model development until policies and tools guaranteeing safe agent behavior are designed and implemented. I believe this might yield some effect, but overall, these efforts will fall short of the expected results.

In this article, I examine anthills, humans, and LLMs to demonstrate exactly when an agent ceases to be merely an agent. The properties developers are trying to guarantee at the individual agent level actually emerge at the level of the "agent plus environment" system, where the individual agent does not dictate the overall trajectory of the system.

Read more
Article

I Stopped Coding After 8 PM for 30 Days. The First Thing That Improved Wasn’t My Sleep

Level of difficultyHard
Reading time13 min
Reach and readers4.8K

For 30 days, the IDE stayed closed after 8 PM. I expected the experiment to affect sleep, but the more interesting result appeared somewhere else: in Git history. The month produced fewer bug-fix commits, shorter debugging sessions, and a surprisingly different defect pattern. So I wrote a couple of scripts, reconstructed where several bugs had actually come from, compared the results with the previous month, and ended up changing the way I think about late-night coding.

Read more
Article

ESP32-CAM Security Watchdog

Level of difficultyMedium
Reading time8 min
Reach and readers3.9K

A practical task arose: in a confined space (a narrow hallway, stairwell, or vestibule), monitor activity, take a photo of the area, and notify the user by forwarding the photos to Telegram. It is known that a standard household motion sensor, which turns on the lighting, is installed in the monitored area.

Read more
Article

I Forced an AI to Program Like It Was 1995. After 20 Changes, It Started Reinventing Modern Software

Level of difficultyHard
Reading time11 min
Reach and readers5.2K

What happens if a modern coding AI is allowed to solve new requirements but forbidden from using modern tools? I built a tiny contact database in ANSI C, gave the model a deliberately 1995-style environment, and then kept changing the requirements. No SQL database, no package manager, no JSON library, no framework, no containers and no external dependencies. Twenty changes later, the program was still valid C89, but somewhere along the way it had acquired schema versions, migrations, an audit log, safer file replacement, a storage interface, validation and query structures. The interesting part was not that the AI ignored the rules. Most of the time it followed them surprisingly well. The interesting part was how quickly it started rebuilding the ideas those rules were supposed to remove.

Read more
Article

Simulating 30 Million Microbes in the Browser

Level of difficultyEasy
Reading time4 min
Reach and readers5.3K

WebGPU gives the browser direct access to modern GPU capabilities — not just for rendering, but also for general-purpose computation through compute shaders.

But how far can we actually push it? What happens if, instead of running a small compute demo, we try to build a full simulation with tens of millions of active objects? That is what I wanted to find out.

Read more
Article

How I Built a Diagnostic Tool for a Legacy System With No Dev Budget, and Cut Incident Triage From 6 Hours to 20 Minutes

Level of difficultyMedium
Reading time4 min
Reach and readers4.6K

I'm part of a systems support team, where alongside diagnostics and incident troubleshooting I also do development work. One of the systems we support ingests telemetry from a large fleet of IoT trackers installed on vehicles. Every few seconds each device reports its coordinates and status parameters. An internal processing service turns that raw stream into higher level business objects: events, incidents, trips, that the rest of the platform consumes.

The system has been in pure maintenance mode for years. No development budget, no vendor to call. It still has to be supported though, people use it every day.

Every so often one device develops a hardware fault and starts “spamming”: emitting an abnormal volume of points or malformed events in a short window. That degrades the processing pipeline not only for that device, but for everyone sharing it.

Finding the culprit used to mean a first line engineer manually pulling several raw tables for the relevant day (events, incidents, raw points), cross referencing them by timestamp and device ID, and eyeballing the result for anomalous patterns.

With the events table alone running 2 to 3 million rows a day, that was a 6 to 7 hour job, basically an entire shift, with no guarantee of actually finding the source.

Read more
Article

10 Best AI Companion Apps in 2026 for Long-Term Memory and Daily Chat

Level of difficultyMedium
Reading time17 min
Reach and readers7K

This list of AI companion platforms is ordered by what you get for what you put in — entry cost, how usable the free tier is, and whether the money buys the thing people actually stay for. It is not ordered by feature count, because the platform with the most features is rarely the one worth your first month.

Read more
Article

I Kept the Same 300 Test Durations and Changed Only Their Order. p95 and p99 Missed the Slow Streaks

Level of difficultyMedium
Reading time10 min
Reach and readers5.3K

After my previous experiments with test latency, I started wondering whether I was still looking at the wrong statistic.

Mean latency is obviously incomplete.

p95 is better.

p99 is useful when rare slow runs matter.

But all of these measurements have one property that is easy to overlook:

They do not care about order.

If I take 300 test durations and randomly rearrange them, the mean remains identical.

So do p50, p95 and p99.

The total waiting time is identical too.

Yet from a developer perspective, ten slow runs scattered across an afternoon do not necessarily feel like ten slow runs arriving almost back to back.

That gave me a very specific experiment.

I generated one set of 300 test durations.

Then I created two timelines from exactly the same values.

In the first timeline, durations were randomly ordered.

In the second, slow runs were deliberately clustered.

Nothing else changed.

The result surprised me more than changing the latency distribution itself.

Both timelines had:

Read more
Post

I built Youta: TUI for YouTube, Yandex Music, local files (good for audiobooks), radio (with current track name and ability to record in original quality), podcasts, and other sources.

Integration with Wikidata.

Heterogenous history (history from multiple sources), playlists.

Audio only. Playing backend: mpv, yt-dlp. With YouTube Shorts - and with the toggle to disable them.

Low on system resources: on Rust, instant startup. The code is generated by Codex. Usually I run in TTY - so no fan noise on my old laptop. Single executable. With Gentoo ebuilds - source and binary. i686 binary is also available - good for your old hardware.

Ability to leave private notes.

Integration with AcoustID - so it can fingerprint your local files and provide Wikidata links.

Render local files artworks, youtube thumbnails.

Skip ad by SponsorBlock, show additional titles from DeArrow.

Ability to get YouTube comments, LLM summary.

Ability to upload to Wikimedia Commons, Evernote.

Hotkeys and mouse are supported.

Ability to download a full youtube channel.

Jumps between youtube chapters.

Ability to get a QR for a youtube channel as an audio podcast xml feed - so scan by your phone - for any podcast app. And for a local folder too - nice way to transfer your local audio to your phone. Without an intermediate server - just LAN links.

Ability to share local folder/file on LAN.

GUI version is also available.

If the config folder is under git - youta will commit/push on exit - to preserve your subscriptions, preferences, history.

https://github.com/vitaly-zdanevich/youta

License: MIT.

In Kitty terminal
In Kitty terminal

You are welcome to share your feedback.

My lecture about it - in Russian https://www.youtube.com/watch?v=swzZX4Y30Ak

Tags:
Rating0
Comments0
Article

AGI Benchmark. If ARC-AGI-3 is solved, do we have AGI?

Level of difficultyEasy
Reading time11 min
Reach and readers3.6K

Benchmarks exist so that engineers can test their projects, observe competitors, and compare their performance. Each benchmark serves a specific purpose.

ARC-AGI-3 was created by the ARC Prize Foundation, founded by François Chollet, to evaluate general intelligence and the learning capabilities of AI agents. The premise behind its complex, game-like interactive tasks was that they could only be solved by an artificial intelligence capable of exploring an unfamiliar environment, grasping rules on the fly, planning actions, and adapting to new conditions. In other words, an AI that truly knows how to learn.

A number of projects claim a 100% success rate on this benchmark. But this is not a victory. In this article, I will explain why.

Read more
Article

Looking for lateral movement with a neural network trained on synthetic data

Level of difficultyMedium
Reading time38 min
Reach and readers3.3K

Can you train a cyberattack detector without ever showing it a real cyberattack?

It sounds like a contradiction. If you want a neural network to detect lateral movement, you would expect to show it lateral movement. I did the opposite: I generated an entire corporate network with its login history, staged an attack inside that artificial world, and trained networks on it. Not a single real row in the training data. The whole world is a 135-line config; each network has four thousand parameters and trains in seconds on a laptop, and the best result came from six of them, trained on six different invented worlds.

Then I pointed them at real data: the authentication logs of Los Alamos National Laboratory, 1.65 billion events, with red-team exercises labelled in them.

And it worked. The networks rank 3.6 million windows by suspicion, and the top twenty-three rows of that list hold sixteen real attacks and seven false alarms: all the analyst has to do is open those rows. A threshold counter on the same data needs a hundred and sixty-one thousand false alarms to reach the sixteenth attack. By AUC the synthetic training landed inside the range of published research trained on real labelled data, although the two cannot be compared head-on, and I will explain why.

Read more
Article

sync.Map Was 2.8x Faster Than RWMutex. My Go API Barely Got Faster

Level of difficultyMedium
Reading time9 min
Reach and readers3.2K

I have become suspicious of optimizations that look spectacular in microbenchmarks.

The pattern is easy to recognize.

You benchmark two implementations. One is two, three, maybe five times faster. The result looks convincing enough to justify changing the production code.

Then you put the faster implementation back into the actual application.

Almost nothing happens.

I wanted to reproduce this effect with something much smaller than a database, so I tested three ways of building a simple in-memory cache in Go:

Read more
Article

I Gave 11 LLMs a False Premise. All 11 Confirmed It

Level of difficultyMedium
Reading time15 min
Reach and readers4.7K

I benchmark models on a repo of my own. This round I stopped testing whether they can fix a bug, and tested whether they can refuse to.

Eleven models got a ticket. Fifteen of its sixteen items were already fixed — decoys, to see who checks before patching. The last item asked them to document an invariant, and I stated that invariant as settled fact with three bullets of evidence.

All eleven agreed with me. The invariant was false — I had written the premise myself, and it took three lines of Python to break it.

Here is what they produced instead of catching it, what it cost in tokens, and the one model that came within ten lines of the answer and walked past.

See the three lines that broke it
Article

Your Desktop Anti‑Detect Setup Doesn't Survive Mobile

Reading time4 min
Reach and readers6K

When I added mobile personas to a browser that already had desktop ones working, I assumed the work was mostly string substitution: swap the user agent, set touch points to 5, shrink the viewport, done. That assumption survived about a day.

Mobile fingerprints aren’t a variant of desktop fingerprints. They’re a different set of constraints, and most of the desktop toolkit either doesn’t apply or actively gives you away. Here’s what I ran into, in the order it hurt.

Read more