HN user

nyellin

3,575 karma

Founder at robusta.dev

CNCF SRE Agent

natan@robusta.dev

Posts164
Comments570
View on HN
home.robusta.dev 23d ago

You shouldn't copy-paste errors into Claude Code

nyellin
36pts68
home.robusta.dev 1mo ago

How to Drive an LLM

nyellin
3pts0
news.ycombinator.com 3mo ago

Ask HN: Agent orchestrators / UIs you use on top of Claude?

nyellin
2pts1
news.ycombinator.com 5mo ago

Ask HN: Giving AI agents a credit card

nyellin
2pts0
github.com 1y ago

Show HN: HolmesGPT – OSS AI Agent for On-Call and Observability

nyellin
2pts0
github.com 1y ago

Show HN: We released an AI Agent for Prometheus alerts and on-call

nyellin
1pts0
www.labnol.org 2y ago

How Attachment Reminders work inside Gmail? (2018)

nyellin
2pts0
news.ycombinator.com 3y ago

Ask HN: A bug bounty website for non-security issues?

nyellin
4pts3
news.ycombinator.com 3y ago

Show HN: I wrote a plugin to give ChatGPT access to Kubernetes OpenAPI schemas

nyellin
1pts0
blog.matt-rickard.com 3y ago

ReLLM: Exact Structure for Large Language Model Completions

nyellin
3pts0
github.com 3y ago

Show HN: Prometheus-based resource recommendations for Kubernetes

nyellin
1pts0
natanyellin.com 3y ago

Self-Modifying Prompts

nyellin
3pts0
home.robusta.dev 3y ago

When Is a CPU Not a CPU? Benchmark of Kubernetes Providers and Node Efficiency

nyellin
3pts1
home.robusta.dev 3y ago

Fairness, Kubernetes Pricing, and Burstable CPUs

nyellin
1pts0
github.com 3y ago

Show HN: Use ChatGPT to investigate Kubernetes issues, using webhooks and a bot

nyellin
2pts0
whyk8s.substack.com 3y ago

Why Not DNS?

nyellin
1pts0
home.robusta.dev 3y ago

Hybrid profiling – combining static analysis and dynamic profiling

nyellin
1pts0
home.robusta.dev 3y ago

Modern containers don't use chroot

nyellin
1pts0
home.robusta.dev 3y ago

You can't have both high utilization and high reliability

nyellin
1pts0
matt-rickard.ghost.io 3y ago

Friction as a Proxy for Value

nyellin
2pts0
home.robusta.dev 3y ago

The Importance of Empty States

nyellin
2pts0
world.hey.com 3y ago

I can't save you, nobody can (thoughts on firing)

nyellin
2pts2
home.robusta.dev 3y ago

For the love of god, stop using CPU limits on Kubernetes

nyellin
3pts0
news.ycombinator.com 4y ago

Ask HN: What CRM do you use?

nyellin
2pts2
home.robusta.dev 4y ago

For the love of god, stop using CPU limits on Kubernetes

nyellin
1pts0
home.robusta.dev 4y ago

Why it takes 97.68 seconds to install Robusta on a Kubernetes cluster

nyellin
1pts0
news.ycombinator.com 4y ago

Ask HN: What do you do when competition signs up for your service?

nyellin
176pts161
home.robusta.dev 4y ago

Kubernetes is a cloud operating system

nyellin
29pts16
www.recursionvisualizer.com 4y ago

Recursion Visualizer

nyellin
1pts0
home.robusta.dev 4y ago

Kubernetes Is the New POSIX

nyellin
16pts6

I'm the OP and wanted to clarify. We do not give Claude Code access to production API keys. The intent was staging databases and I've updated the post to make it more clear.

We assume that every API key we put into Claude Code can be leaked and therefore make sure there's nothing sensitive behind them.

I'm the OP and this is the exact point of the post. Whoever handed you that project did not have Claude code running it end to end in a production-like environment.

Whether you like the vibe coded app or not, you would have had fewer errors if Claude had been testing it end to end while vibe coding.

Is it possible to run a Kubernetes cluster inside one? (E.g. via KIND.)

If so, we'd very much like to test this. We make extensive use of Claude Code web but it can't effectively test our product inside the sandbox without running a K8s cluster

HolmesGPT maintainer here: our benchmarks [1] tell a very different story, as does anecdotal evidence from our customers- including Fortune 500 using SRE agents in incredibly complex production environments.

We're actually struggling a bit with benchmark saturation right now. Opus does much better in the real world than Sonnet but it's hard to create sophisticated enough benchmarks to show that in the lab. When we run benchmarks with a small number of iterations Sonnet even wins sometimes.

[1] https://holmesgpt.dev/development/evaluations/history/

Haiku is called often, but not always the way you think. E.g. every time you write something CC invokes Haiku multiple times to generate the 'delightful 1-2 word phrase used to indicate progress to the user' (Doing Stuff, Wizarding, etc)

Not necessarily true. Subagents allow for parallelization but they can decrease accuracy dramatically if you're not careful because there are often dependencies between tasks and swapping context windows with a summary is extremely lossy.

For the longest time, Claude Code itself didnt really use subagents much by default, other than supporting them as a feature eager users could configure. (Source is reverse engineering we did on Claude code using the fantastic CC tracing tool Simon Willison wrote about once. This is also no longer true on latest versions that have e.g. an Explore subagent that is actively used.)

Forgot to address the easiest part:

- how can I reliably call tools with the right schema?

This is typically done by enabling strict mode for tool calling which is a hermetic solution. Makes llm unable to generate tokens that would violate the schema. (I.e. LLM samples tokens only from the subset of tokens that lead to valid schema generation.)

There's a bit more to it!

For example, the agent in the post will demonstrate 'early stopping' where it finishes before the task is really done. You'd think you can solve this with reasoning models, but it doesn't actually work on SOTA models.

To fix 'early stopping' you need extra features in the agent harness. Claude Code does this with TODOs that are injected back into every prompt to remind the LLM what tasks remain open. (If you're curious somewhere in the public repo for HolmesGPT we have benchamrks with all the experiments we ran to solve this - from hypothesis tracking to other exotic approaches - but TODOs always performed best.)

Still, good article. Agents really are just tools in a loop. It's not rocket science.

We've open sourced something with similar goals that you can use today: https://github.com/robusta-dev/holmesgpt/

We're taking a slightly different angle than what Facebook published, in that we're primarily using tool calling and observability data to run investigations.

What we've released really shines at surfacing up relevant observability data automatically, and we're soon planning to add the change-tracking elements mentioned in the Facebook post.

If anyone is curious, I did a webinar with PagerDuty on this recently.

Claude 3.5 Sonnet 2 years ago

Interesting. We're finding that it's more verbose than GPT-4o (and often ignores instructions to give output in a specific format), but does better when faced with ambiguity and potentially confusing situations.

Here is an example using http://github.com/robusta-dev/holmesgpt/ where ask it to troubleshoot a payment processing workload in a Kubernetes cluster vs the GPT-4o output underneath:

  holmes ask --model="bedrock/anthropic.claude-3-5-sonnet-20240620-v1:0" "what is wrong with the payment processor?"
  AI: To investigate what's wrong with the payment processor, we'll need to gather more information about it. First, let's try to find the relevant Kubernetes resources related to the payment processor.

  Running `kubectl get -A --show-labels pod | grep payment`

  Thank you for your question about the payment processor. initial search, I've found two pods related to payment processing. Let's investigate the one that seems to be having issues:

  1. In the default namespace, there's a pod named "payment-processing-worker-5bb5bd75cd-x4g99" which is in a CrashLoopBackOff state. This indicates that the pod is repeatedly crashing and restarting.

  2. In the sock-shop namespace, there's a pod named "payment-ff86cd6f8-rs47b" which appears to be running normally.

  Let's focus on the problematic pod in the default namespace. To get more information about what's wrong, we'll need to look at its logs and description.

  Running `kubectl describe pod payment-processing-worker-5bb5bd75cd-x4g99 -n default`

  AI: Based on the information gathered, it appears that there is an issue with the payment processor in the Kubernetes cluster. Let me explain what's wrong:

  1 The payment processing worker pod is in a CrashLoopBackOff state:
    • Pod name: payment-processing-worker-5bb5bd75cd-x4g99
    • Namespace: default
    • Status: CrashLoopBackOff
  2 The pod is continuously restarting and failing:
    • Restart Count: 242
    • The container is in a "Waiting" state with the reason "CrashLoopBackOff"
  3 The root cause of the issue appears to be related to an environment variable:
    • The container is running a bash script that checks for the presence of the DEPLOY_ENV environment variable.
    • If DEPLOY_ENV is not set, the container exits immediately after printing an error message.
    • The command being run is:

       if [[ -z "${DEPLOY_ENV}" ]]; then echo Environment variable DEPLOY_ENV is undefined ; else while true; do echo hello; sleep 10;done; fi

  4 The environment section in the pod description shows:

    Environment: <none>

   This indicates that no environment variables are set for the container.
  5 The container is exiting with a status of "Completed" and an exit code of 0, which suggests that it's running the script, finding that DEPLOY_E

  To fix this issue:

  1 The DEPLOY_ENV environment variable needs to be set for the payment-processing-worker deployment.
  2 You should update the deployment configuration to include this environment variable.
  3 After setting the environment variable, the pod should stop crashing and enter a running state where it prints "hello" every 10 seconds.

  To resolve this, you'll need to update the deployment configuration for the payment-processing-worker. You can do this by editing the deployment and adding the DEPLOY_ENV environment variable with an appropriate value.

  Would you like me to show you how to update the deployment with the required environment variable?

Note that it explicitly picks up on the ambiguity in the question and notes that there are 2 payment related workloads and one is healthy.

GPT-4o:

  $ holmes ask "what is wrong with the payment processor?"

  Running `kubectl get -A --show-labels pod | grep payment-processor`                     
  Running `kubectl get -A --show-labels deployment | grep payment-processor`                    
  Running `kubectl get -A --show-labels service | grep payment-processor`              
  Running `kubectl get -A --show-labels pod | grep payment`
  Running `kubectl describe pod payment-processing-worker-5bb5bd75cd-x4g99 -n default`
  Running `kubectl logs payment-processing-worker-5bb5bd75cd-x4g99 -n default --previous`
  
  AI: payment-processing-worker-5bb5bd75cd-x4g99 in namespace default crashes due to missing DEPLOY_ENV environment variable.

  Fix: Define DEPLOY_ENV in the deployment spec.

  Example patch:

  env:
   - name: DEPLOY_ENV
     value: "production"

Most of the cli tools just wrap an LLM, but don't give it access to the data it needs to be useful. Aider is an exception of course - it gives great results because it feeds the LLM your source files.

We built http://github.com/robusta-dev/holmesgpt/ to investigate Prometheus/Jira/PagerDuty issues. We're able to get pretty good results (we benchmark extensively) because we use function-calling to give the LLM read acess to relevant data. I think we're the only open source AIOps tool, and the only AIOps tool period that does something more complex than RAG + summarization.