HN user

shad42

652 karma

Building https://www.mendral.com/ - prev. Dagger co-Founder; Docker 1st eng

Posts43
Comments48
View on HN
www.mendral.com 1mo ago

Automating the engineering work that isn't your product

shad42
2pts0
www.mendral.com 1mo ago

How we know if our agent is right

shad42
3pts0
www.mendral.com 1mo ago

Not update your dependencies in 2026

shad42
1pts0
www.mendral.com 2mo ago

Supply chain attacks don't wait for CVEs

shad42
3pts0
www.mendral.com 2mo ago

We built an agent for CI despite using Claude Code for everything else

shad42
2pts0
www.mendral.com 2mo ago

We built an agent specialized for CI (using the 3 Claude models)

shad42
2pts0
www.mendral.com 2mo ago

How we know if our agent is right

shad42
2pts0
www.mendral.com 2mo ago

How we know if our agent is right

shad42
5pts0
www.mendral.com 2mo ago

The agent harness belongs outside the sandbox

shad42
182pts121
www.mendral.com 2mo ago

We decreased our LLM costs with Opus

shad42
106pts31
www.mendral.com 2mo ago

Multi-player agents don't fit in the sandbox

shad42
2pts0
www.mendral.com 3mo ago

We built our AI agent, for analyzing CI logs

shad42
1pts0
www.mendral.com 3mo ago

Same LLM, different agent: a CI debugger built on Claude

shad42
2pts0
www.mendral.com 3mo ago

Agent Harness: Inside vs. Outside the Sandbox

shad42
3pts0
www.mendral.com 3mo ago

Same LLM but different output: we built a CI specialist

shad42
1pts0
www.mendral.com 3mo ago

We upgraded our agent to Opus and our costs went down

shad42
2pts0
www.mendral.com 3mo ago

Same LLM, Different Agent: What Changes When You Specialize for CI

shad42
3pts0
www.mendral.com 4mo ago

We decreased our LLM costs by switching to Opus

shad42
2pts0
www.mendral.com 4mo ago

What CI looks like at a 100-person team (PostHog)

shad42
56pts30
www.mendral.com 4mo ago

We upgraded to a frontier model and our costs went down

shad42
1pts0
www.mendral.com 4mo ago

We gave terabytes of CI logs to an LLM

shad42
233pts111
www.mendral.com 4mo ago

Anatomy of a Production AI Agent

shad42
2pts0
www.mendral.com 4mo ago

What CI Looks Like at a 100-Person Team

shad42
3pts0
www.mendral.com 5mo ago

What CI looks like at a 100-person team

shad42
4pts0
dagger.io 11mo ago

Evals as Code: CI for LLMs with Dagger

shad42
2pts1
pgbovine.net 11y ago

CPython internals: A 10 hour walk through the Python interpreter source (2014)

shad42
9pts0
github.com 11y ago

DockerBoot: Boot your machine with a fig.yml and docker

shad42
2pts0
ipython.org 12y ago

IPython 2.0 released

shad42
1pts1
www.businessinsider.com 12y ago

The Key Rules Behind Every Great Startup Idea

shad42
5pts2
lists.openstack.org 12y ago

OpenStack 2013.2 ("Havana") is released

shad42
8pts2

Dependabot is focused on upgrading dependencies, and nothing else. One of your dep is outdated, here is an update.

Mendral is smarter when updating deps, it looks at newer version, scans for vulnerabilities or upgrade patterns that can put you at risk (eg. the update was published few hours ago, you should update it now).

No, for example a tool call calling an API. So the llm does not have access to the API keys, the tool does. For example an API call that fetches some data remotely and return it to the llm. You don’t need a sandbox for it. It’s faster and more efficient to keep this out of the sandbox.

We don't host 3rd party agents (I don't know if this what you implied). We built an agent that monitors CI pipelines, tests failures, performance and auto opens PR to address issues we find. We host our agent loop on a backend (it's in go), and we call to the sandbox when we run operations involving the user code.

Yes, it's also because the agent described in the post is doing some operations on the user code (fix CI pipelines, rerun tests, fix them, etc...). So another big reason to use the sandbox is to run things like bash on a user code. you don't want credentials or anything trusted inside that sandbox, including the LLM api key.

We considered wrapping Claude Code when we started building Mendral (this agent in the article). We ended up building our own agent, it's lot more work because we followed all the right patterns as the models evolved (sub-agents, proper token caching, redo basic tools like read,write,edit,bash, etc...). But it paid off over time when you build an agent that is focused on a specific task (not a general coding agent).

The main driver for writing our own agent was to leave it out of the sandbox (the agent loop runs on our backend, we call the sandbox only when needed). We wrote another post about that (it's the latest post on the blog).

However, I am curious how would you implement the triager pattern by only using Claude Code as harness.

IMO RAG is mostly dead. The game changer with newer models like Opus is the reasoning. So instead of pushing all the context up front (RAG style), it's better to give strong primitives (eg. bash, SQL) and let the agent figure it out.

It's what Claude Code is doing now and the principles we applied for Mendral as well.

That said, you're right that some smaller models can outperform Haiku and we're thinking supporting oss models at some point. But it does not change the core design principles IMO.

We're dealing with CI logs, produced by a variety of frameworks, languages, etc... And the tough ones to look into are e2e tests, with outputs from infrastructure. I wish a re.match() would be enough, but we often don't even know what to match in the first place.

We started to add deterministic matching on the patterns that the agent sees the most so we don't have to go through the whole thing (for example a flake on PostHog can occurs 100+ times during a day, you don't need to reinvestigate every time). But for new errors, it's tricky.

It's the same as an escalation. Something we omitted from the post is that we often use Sonnet to write SQL queries.

We wrote another post that was on HN some time ago that goes into the details of SQL queries (linked at the top of this article). Sonnet is perfect for this.

I am one of Mendral co-founder (my co-founder wrote the article), I am the one to blame for changing the title when posting. I thought our original one was too clickbait and I wanted to better summarize with this title.

Despite the original title, a lot of what we learned comes to how Opus evolved and the ability to reason. And also the fact that Haiku is quite capable if scoped properly, that's the whole purpose of the article.

Mendral co-founder here. What happens at PostHog is not uncommon. While building Mendral, we talked to hundreds of team and they all have a similar situation. Initially they come to us to make their CI pipelines faster. But as the agent dives in, the urgency becomes keeping all pipelines reliable. It comes from growing a code base with a test suite. Of course it has to change eventually: splitting the test suite, running specific part of the CI depending on the code, etc... But the situation described in the article is widespread with a product that grows quickly.

We did not want to make the post engineering-focused, but we have 18 companies in production today (we wrote about PostHog in the blog). At some point we should post some case studies. The metric we track for usefulness is our monthly revenue :)

There is a cost associated with each investigation (that the Mendral agent is doing). And we spend time tuning the orchestration between agents. Yes expensive but we're making money on top of what it costs us. So far we were able to take the cost down while increasing the relevance of each root cause analysis.

We're writing another post about that specifically, we'll publish it sometimes next week

I agree, we automated in the Mendral agent what is time consuming for human (like debugging a flaky test), but it will need permission to confirm the remediation and open a PR.

But it's night and day to fix your CI when someone (in this case an agent) already dug into the logs, the code of the test and propose options to fix. We have several customers asking us to automate the rest (all the way to merge code), but we haven't done it for the reasons you mention. Although I am sure we'll get there sometimes this year.

LLMs are better now at pulling the context (as opposed to feeding everything you can inside the prompt). So you can expose enough query primitives to the LLM so it's able to filter out the noise.

I don't think implementing filtering on log ingestion is the right approach, because you don't know what is noise at this stage. We spent more time on thinking about the schema and indexes to make sure complex queries perform at scale.

I am sure you heard before: there are only two hard things in CS: cache invalidation and naming things.

In the history of this company, I can honestly say that this SQL/LLM thing wasn't the hardest :)

From own experience it's true, and I think it's due to the amount of SQL content (docs, best practices, code) that you can find online, which is now in all LLM's corpus data.

Same applies when picking a programming language nowadays.

Yeah it sounds very familiar with what we went through while building this agent. We're focused on CI logs for now because we wanted something that works really well for things like flaky tests, but planning to expand the context to infrastructure logs very soon.

What we learned while building this is every token matters in the context, we spend lot of time watching logs of agent sessions, changing the tool params, errors returned by tools, agent prompts, etc...

We noticed for example the importance of letting the model pull from the context, instead of pushing lots of data in the prompt. We have a "complex" error reporting because we have to differentiate between real non-retryable errors and errors that teach the model to retry differently. It changes the model behavior completely.

Also I agree with "significant weight of human input and judgement", we spent lots of time optimizing the index and thinking about how to organize data so queries perform at scale. Claude wasn't very helpful there.

Mendral co-founder here, we built this infra to have our agent detect CI issues like flaky tests and fix them. Observing logs are useful to detect anomalies but we also use those to confirm a fix after the agent opens a PR (we have long coding sessions that verifies a fixe and re-run the CI if needed, all in the same agent loop).

So yes it works, we have customers in production.

LLMs are powerful assistants—as long as the user keeps a firm mental model of the problem. That’s why, for now, they complement software engineers rather than replace them (at least today).

When you already know exactly what needs to be built and simply want to skip the drudgery of boilerplate or repetitive tasks, a coding CLI is great: it handles the grunt work so you can stay focused on the high-level design and decision-making that truly matter (and also more fun).

Replaced Desktop with `colima` as well few months ago. I've been using it daily since then. I did not have any issue, sometimes I just delete / start a instance to upgrade the docker version, it only takes few minutes.

I like the fact that I decide when I upgrade, not Docker Desktop nagging me every week.