<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: mlaminekane</title>
    <description>The latest articles on DEV Community by mlaminekane (@darkninja).</description>
    <link>https://dev.to/darkninja</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F3823029%2F730517bc-8ac6-4093-8c9d-e7583a442251.jpeg</url>
      <title>DEV Community: mlaminekane</title>
      <link>https://dev.to/darkninja</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/darkninja"/>
    <language>en</language>
    <item>
      <title>Hawkeye update: multi-agent orchestration, remote tasks, and local model support</title>
      <dc:creator>mlaminekane</dc:creator>
      <pubDate>Mon, 30 Mar 2026 04:16:02 +0000</pubDate>
      <link>https://dev.to/darkninja/hawkeye-update-multi-agent-orchestration-remote-tasks-and-local-model-support-2d75</link>
      <guid>https://dev.to/darkninja/hawkeye-update-multi-agent-orchestration-remote-tasks-and-local-model-support-2d75</guid>
      <description>&lt;p&gt;A few weeks ago, I posted Hawkeye here for the first time.&lt;/p&gt;

&lt;p&gt;At the time, the core idea was simple:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Hawkeye is a flight recorder for AI agents.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;It records what an agent does in a repo, helps detect drift, adds guardrails, and gives you a dashboard to inspect what happened when a run goes wrong.&lt;/p&gt;

&lt;p&gt;Since then, I shipped a much bigger update, and Hawkeye feels less like a passive recorder now and more like an operational layer for agent workflows.&lt;/p&gt;

&lt;h2&gt;
  
  
  What Hawkeye is trying to solve
&lt;/h2&gt;

&lt;p&gt;Once agents start doing real work in a repository, basic questions become surprisingly hard to answer:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;What exactly did the agent do?&lt;/li&gt;
&lt;li&gt;When did it start drifting?&lt;/li&gt;
&lt;li&gt;Why did it fail?&lt;/li&gt;
&lt;li&gt;What files did it touch?&lt;/li&gt;
&lt;li&gt;How much did that run cost?&lt;/li&gt;
&lt;li&gt;Was this run better or worse than the last one?&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;That is the problem Hawkeye is built for.&lt;/p&gt;

&lt;p&gt;It is still local-first, still SQLite-backed, and still focused on making agent work inspectable instead of magical.&lt;/p&gt;

&lt;h2&gt;
  
  
  What changed since the first post
&lt;/h2&gt;

&lt;h3&gt;
  
  
  1. Multi-agent orchestration
&lt;/h3&gt;

&lt;p&gt;This is probably the biggest shift.&lt;/p&gt;

&lt;p&gt;Hawkeye now has a real &lt;strong&gt;Swarm&lt;/strong&gt; mode for coordinating multiple agents in parallel.&lt;/p&gt;

&lt;p&gt;Instead of treating each run as an isolated session, you can now work with multiple agents at once and monitor them from one place.&lt;/p&gt;

&lt;p&gt;What that unlocks:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;multiple agents working in parallel&lt;/li&gt;
&lt;li&gt;isolated responsibilities&lt;/li&gt;
&lt;li&gt;live output monitoring&lt;/li&gt;
&lt;li&gt;live drift and cost visibility&lt;/li&gt;
&lt;li&gt;conflict-aware orchestration&lt;/li&gt;
&lt;li&gt;a better overview of what the whole room is doing&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The interesting part is not just “spawn more agents”.&lt;br&gt;
It is being able to &lt;strong&gt;see&lt;/strong&gt; what each one is doing and keep the system legible while they are running.&lt;/p&gt;

&lt;p&gt;That became a recurring theme while building Hawkeye:&lt;br&gt;
the moment you have more than one agent, visibility matters more than raw generation quality.&lt;/p&gt;

&lt;h2&gt;
  
  
  2. Remote tasks + daemon
&lt;/h2&gt;

&lt;p&gt;I also added a stronger task workflow.&lt;/p&gt;

&lt;p&gt;You can now queue tasks, let them run in the background or overnight, and inspect the results from the dashboard.&lt;/p&gt;

&lt;p&gt;That includes:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;a task daemon&lt;/li&gt;
&lt;li&gt;retry flows&lt;/li&gt;
&lt;li&gt;cancel support&lt;/li&gt;
&lt;li&gt;better failure reporting&lt;/li&gt;
&lt;li&gt;more useful output handling&lt;/li&gt;
&lt;li&gt;cleaner separation between live execution and finished results&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;This matters because a lot of real agent usage is not interactive.&lt;br&gt;
Sometimes you want to fire off a job, come back later, and understand what happened without tailing a terminal the whole time.&lt;/p&gt;

&lt;h2&gt;
  
  
  3. Better local model support
&lt;/h2&gt;

&lt;p&gt;Hawkeye now supports &lt;strong&gt;Ollama&lt;/strong&gt; and &lt;strong&gt;LM Studio&lt;/strong&gt; more cleanly across the product.&lt;/p&gt;

&lt;p&gt;That includes:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;local runtime configuration&lt;/li&gt;
&lt;li&gt;local model selection in the relevant CLI flows&lt;/li&gt;
&lt;li&gt;better handling in task/agent workflows&lt;/li&gt;
&lt;li&gt;cleaner integration with the dashboard settings&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;This was important to me because I did not want Hawkeye to be tied to one cloud provider or one commercial runtime.&lt;/p&gt;

&lt;p&gt;The goal is:&lt;br&gt;
if you want to run a local model, Hawkeye should still give you observability, drift detection, and control.&lt;/p&gt;

&lt;h2&gt;
  
  
  4. The dashboard is much more capable now
&lt;/h2&gt;

&lt;p&gt;A lot of work in the past weeks went into turning the dashboard into something you can actually operate from, not just inspect after the fact.&lt;/p&gt;

&lt;p&gt;The biggest improvements were around:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Compare&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
proper visual comparison between runs, links to sessions, export, top cost files, cleaner highlighting&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Firewall&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
better initial loading, clearer live feed behavior, review feedback, clear/reset actions, less stale state&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Tasks&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
retry, cancel, daemon status, clearer runtime selection, better handling of provider/runtime errors&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Agents&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
follow-ups while running, relaunch/clone flows, better runtime choices, cleaner launch studio&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Settings&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
cleaner structure, more obvious save feedback, better local provider handling&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;A lot of this work was not “new feature” work.&lt;br&gt;
It was cleanup.&lt;br&gt;
Removing confusion.&lt;br&gt;
Making the product more coherent when you actually use it every day.&lt;/p&gt;

&lt;h2&gt;
  
  
  5. GitHub PR reporting
&lt;/h2&gt;

&lt;p&gt;I also pushed the GitHub reporting side further.&lt;/p&gt;

&lt;p&gt;&lt;code&gt;hawkeye ci&lt;/code&gt; can now post a structured report back to a PR, including things like:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;drift&lt;/li&gt;
&lt;li&gt;cost&lt;/li&gt;
&lt;li&gt;files touched&lt;/li&gt;
&lt;li&gt;run summary&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;That closes an important loop for me:&lt;br&gt;
not just &lt;em&gt;what happened while the agent ran&lt;/em&gt;, but also &lt;em&gt;how that run gets communicated back into a normal engineering workflow&lt;/em&gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  6. Cleaner runtime story
&lt;/h2&gt;

&lt;p&gt;Another thing I spent time on was making the runtime choices more honest.&lt;/p&gt;

&lt;p&gt;Some agent runtimes are great for broad repo understanding.&lt;br&gt;
Some are better for focused patching.&lt;br&gt;
Some local models work fine for one task and fall apart for another.&lt;/p&gt;

&lt;p&gt;A lot of recent work went into making Hawkeye expose those tradeoffs more cleanly instead of pretending all runtimes behave the same.&lt;/p&gt;

&lt;p&gt;That also meant removing or de-emphasizing flows that were creating more confusion than value.&lt;/p&gt;

&lt;h2&gt;
  
  
  What did not change
&lt;/h2&gt;

&lt;p&gt;The core philosophy is still the same:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;local-first&lt;/li&gt;
&lt;li&gt;SQLite&lt;/li&gt;
&lt;li&gt;no Hawkeye cloud dependency&lt;/li&gt;
&lt;li&gt;useful even if the underlying agent changes&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Right now Hawkeye is most aligned with:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Claude Code&lt;/li&gt;
&lt;li&gt;Codex&lt;/li&gt;
&lt;li&gt;Cline&lt;/li&gt;
&lt;li&gt;custom agent CLIs&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;That feels like a better, cleaner foundation than trying to support everything equally at once.&lt;/p&gt;

&lt;h2&gt;
  
  
  What I learned while building this
&lt;/h2&gt;

&lt;p&gt;A few things became clearer over time.&lt;/p&gt;

&lt;h3&gt;
  
  
  Observability matters more than autonomy
&lt;/h3&gt;

&lt;p&gt;People talk a lot about how capable agents are becoming.&lt;/p&gt;

&lt;p&gt;But once an agent starts touching a real codebase, &lt;strong&gt;debuggability&lt;/strong&gt; becomes just as important as capability.&lt;/p&gt;

&lt;p&gt;Raw autonomy without visibility stops being impressive very quickly.&lt;/p&gt;

&lt;h3&gt;
  
  
  Local-first is still worth it
&lt;/h3&gt;

&lt;p&gt;Keeping Hawkeye local-first forced some tradeoffs, but I still think it is the right call.&lt;/p&gt;

&lt;p&gt;A lot of people experimenting seriously with agent workflows do not want another hosted black box sitting on top of their existing black boxes.&lt;/p&gt;

&lt;h3&gt;
  
  
  UX matters a lot in agent tooling
&lt;/h3&gt;

&lt;p&gt;A huge amount of this update was not about adding “AI”.&lt;br&gt;
It was about removing friction:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;too much noise&lt;/li&gt;
&lt;li&gt;stale state&lt;/li&gt;
&lt;li&gt;misleading labels&lt;/li&gt;
&lt;li&gt;unclear provider behavior&lt;/li&gt;
&lt;li&gt;heavy layouts&lt;/li&gt;
&lt;li&gt;confusing runtime defaults&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;That work is less flashy, but it matters more than it looks.&lt;/p&gt;

&lt;h2&gt;
  
  
  What still needs work
&lt;/h2&gt;

&lt;p&gt;There is still a lot I want to improve.&lt;/p&gt;

&lt;p&gt;A few areas I am actively thinking about:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;even better runtime selection defaults&lt;/li&gt;
&lt;li&gt;stronger live output UX across all task types&lt;/li&gt;
&lt;li&gt;more polished reporting/export flows&lt;/li&gt;
&lt;li&gt;further CLI cleanup&lt;/li&gt;
&lt;li&gt;more consistency between task, agent, and session workflows&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;So this is definitely not “done”.&lt;br&gt;
But it feels much more like a real product now than it did in the first post.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F1vjqbflcfln4kt4af5i6.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F1vjqbflcfln4kt4af5i6.png" alt=" " width="800" height="438"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Try it
&lt;/h2&gt;

&lt;p&gt;GitHub:&lt;br&gt;&lt;br&gt;
&lt;a href="https://github.com/MLaminekane/hawkeye" rel="noopener noreferrer"&gt;github.com/MLaminekane/hawkeye&lt;/a&gt;&lt;br&gt;
Npm:&lt;br&gt;
(&lt;a href="https://www.npmjs.com/package/hawkeye-ai" rel="noopener noreferrer"&gt;https://www.npmjs.com/package/hawkeye-ai&lt;/a&gt;)&lt;/p&gt;

&lt;p&gt;Install:&lt;/p&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;
bash
npm install -g hawkeye-ai
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

</description>
      <category>ai</category>
      <category>programming</category>
      <category>opensource</category>
      <category>agents</category>
    </item>
    <item>
      <title>Hawkeye - open source flight recorder &amp; guardrails for AI agents before things go wrong</title>
      <dc:creator>mlaminekane</dc:creator>
      <pubDate>Fri, 13 Mar 2026 21:04:46 +0000</pubDate>
      <link>https://dev.to/darkninja/hawkeye-open-source-flight-recorder-guardrails-for-ai-agents-before-things-go-wrong-4k31</link>
      <guid>https://dev.to/darkninja/hawkeye-open-source-flight-recorder-guardrails-for-ai-agents-before-things-go-wrong-4k31</guid>
      <description>&lt;p&gt;AI coding agents are incredibly powerful — but they're also black boxes. You give Claude Code, Cursor, or Aider a task, and 5 minutes later you find it's been editing CSS when you asked for auth, burned $3 in tokens, or worse, touched your .env file.&lt;br&gt;&lt;br&gt;
                                                                                 I built &lt;strong&gt;Hawkeye&lt;/strong&gt; to fix this.                                                   &lt;/p&gt;
&lt;h2&gt;
  
  
  What is Hawkeye ?
&lt;/h2&gt;

&lt;p&gt;An open-source observability &amp;amp; security layer for AI agents. Think of it as a flight recorder - it captures everything the agent does, scores its behavior in real-time, and can auto-pause it before things go wrong.&lt;/p&gt;
&lt;h2&gt;
  
  
  How DriftDetect works ?
&lt;/h2&gt;

&lt;p&gt;Every action the agent takes gets a drift score from 0 to 100. The score starts at 100 and drops based on:&lt;/p&gt;

&lt;p&gt;Dangerous commands (-40 pts each)&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;rm -rf /, sudo rm, curl | bash, DROP TABLE...&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Sensitive file access (-15 to -25 pts)&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Files outside the project directory&lt;/li&gt;
&lt;li&gt;System paths: /etc/, ~/.ssh/, ~/.aws/&lt;/li&gt;
&lt;li&gt;Credentials: .env, .pem, .key&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Suspicious behavior (-10 to -15 pts)&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;5+ errors in the last 10 actions (infinite loop?)&lt;/li&gt;
&lt;li&gt;15 actions with zero file changes (token burn)&lt;/li&gt;
&lt;li&gt;High LLM cost with nothing to show for it&lt;/li&gt;
&lt;li&gt;Too many unrelated file types modified&lt;/li&gt;
&lt;li&gt;Dependency explosion (5+ package.json changes)&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;When the score drops below 40, Hawkeye auto-pauses the session. The agent is frozen until you review and resume.&lt;/p&gt;

&lt;p&gt;Optionally, a local LLM (Ollama) can also evaluate whether the actions match the original objective — so it catches semantic drift too, not just dangerous patterns.&lt;/p&gt;
&lt;h2&gt;
  
  
  Guardrails
&lt;/h2&gt;

&lt;p&gt;Rules evaluated before every action. If it violates a rule, the action is blocked before it executes:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight json"&gt;&lt;code&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="nl"&gt;"guardrails"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
        &lt;/span&gt;&lt;span class="nl"&gt;"name"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"Protect secrets"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
        &lt;/span&gt;&lt;span class="nl"&gt;"type"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"file_protect"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
        &lt;/span&gt;&lt;span class="nl"&gt;"action"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"block"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
        &lt;/span&gt;&lt;span class="nl"&gt;"config"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nl"&gt;"paths"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;[&lt;/span&gt;&lt;span class="s2"&gt;"**/.env"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"**/*.key"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"**/*.pem"&lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="p"&gt;},&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt;
        &lt;/span&gt;&lt;span class="nl"&gt;"name"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"Budget limit"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
        &lt;/span&gt;&lt;span class="nl"&gt;"type"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"cost_limit"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
        &lt;/span&gt;&lt;span class="nl"&gt;"action"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"warn"&lt;/span&gt;&lt;span class="p"&gt;,&lt;/span&gt;&lt;span class="w"&gt;
        &lt;/span&gt;&lt;span class="nl"&gt;"config"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;{&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="nl"&gt;"maxUsdPerSession"&lt;/span&gt;&lt;span class="p"&gt;:&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="mf"&gt;5.0&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
      &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
    &lt;/span&gt;&lt;span class="p"&gt;]&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="p"&gt;}&lt;/span&gt;&lt;span class="w"&gt;
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;


&lt;p&gt;7 rule types: file protection, command blocking, cost limits, token limits, directory scoping, network restrictions, and human approval gates. The agent can self-monitor Hawkeye exposes an &lt;em&gt;MCP server&lt;/em&gt; with 27 tools. &lt;/p&gt;

&lt;p&gt;The agent can:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Call check_drift : to see its own score and course-correct&lt;/li&gt;
&lt;li&gt;Call check_guardrail : before a risky action to avoid getting blocked&lt;/li&gt;
&lt;li&gt;Call suggest_correction : when drift is high to get back on track&lt;/li&gt;
&lt;li&gt;Call log_event : to document decisions&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The agent also builds persistent memory — after each task, a journal entry (prompt, files changed, outcome) is saved and injected into future tasks. So it learns from past sessions.&lt;/p&gt;
&lt;h2&gt;
  
  
  Dashboard
&lt;/h2&gt;

&lt;p&gt;A web UI with session replay, drift charts, event timeline, and remote task submission from your phone. Mobile responsive with a Cloudflare tunnel option for remote access.&lt;/p&gt;
&lt;h3&gt;
  
  
  Quick start:
&lt;/h3&gt;


&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight json"&gt;&lt;code&gt;&lt;span class="w"&gt;  &lt;/span&gt;&lt;span class="err"&gt;npm&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;install&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;-g&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;hawkeye-ai&lt;/span&gt;&lt;span class="w"&gt;

  &lt;/span&gt;&lt;span class="err"&gt;-&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;For&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;TUI&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="err"&gt;hawkeye&lt;/span&gt;&lt;span class="w"&gt;

  &lt;/span&gt;&lt;span class="err"&gt;-&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;For&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;Claude&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;Code&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="err"&gt;hawkeye&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;hooks&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;install&lt;/span&gt;&lt;span class="w"&gt;

  &lt;/span&gt;&lt;span class="err"&gt;-&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;For&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;any&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;other&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;agent&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="err"&gt;hawkeye&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;record&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;-o&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="s2"&gt;"Build a REST API"&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;--&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;aider&lt;/span&gt;&lt;span class="w"&gt;

  &lt;/span&gt;&lt;span class="err"&gt;-&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;Launch&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;dashboard&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="err"&gt;hawkeye&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;serve&lt;/span&gt;&lt;span class="w"&gt;

  &lt;/span&gt;&lt;span class="err"&gt;-&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;Remote&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;and&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;use&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;hawkeye&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;on&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;mobile&lt;/span&gt;&lt;span class="w"&gt;
  &lt;/span&gt;&lt;span class="err"&gt;hawkeye&lt;/span&gt;&lt;span class="w"&gt; &lt;/span&gt;&lt;span class="err"&gt;remote&lt;/span&gt;&lt;span class="w"&gt; 
&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;h2&gt;
  
  
  Stack
&lt;/h2&gt;

&lt;p&gt;TypeScript monorepo. SQLite for storage. Everything runs locally — no cloud, no telemetry, no data leaves your machine. MIT licensed.&lt;/p&gt;

&lt;p&gt;GitHub: 

&lt;/p&gt;
&lt;div class="ltag-github-readme-tag"&gt;
  &lt;div class="readme-overview"&gt;
    &lt;h2&gt;
      &lt;img src="https://assets.dev.to/assets/github-logo-5a155e1f9a670af7944dd5e12375bc76ed542ea80224905ecaf878b9157cdefc.svg" alt="GitHub logo"&gt;
      &lt;a href="https://github.com/MLaminekane" rel="noopener noreferrer"&gt;
        MLaminekane
      &lt;/a&gt; / &lt;a href="https://github.com/MLaminekane/hawkeye" rel="noopener noreferrer"&gt;
        hawkeye
      &lt;/a&gt;
    &lt;/h2&gt;
    &lt;h3&gt;
      The flight recorder for AI agents - observability and security for Claude Code, Aider, AutoGPT and more
    &lt;/h3&gt;
  &lt;/div&gt;
  &lt;div class="ltag-github-body"&gt;
    
&lt;div id="readme" class="md"&gt;
&lt;div class="markdown-heading"&gt;
&lt;h1 class="heading-element"&gt;Hawkeye&lt;/h1&gt;
&lt;/div&gt;

&lt;p&gt;
  &lt;strong&gt;The flight recorder for AI agents&lt;/strong&gt;&lt;br&gt;
  Open-source observability &amp;amp; security for Claude Code · Aider · AutoGPT · CrewAI · Open Interpreter · any LLM-powered agent
&lt;/p&gt;

&lt;p&gt;
  &lt;a href="https://www.npmjs.com/package/hawkeye-ai" rel="nofollow noopener noreferrer"&gt;&lt;img src="https://camo.githubusercontent.com/70c0444678c2971392058a53399554b634d06bf22ffef5c01d1ce70ef56d79f0/68747470733a2f2f696d672e736869656c64732e696f2f6e706d2f762f6861776b6579652d61693f636f6c6f723d666635663166266c6162656c3d6e706d" alt="npm version"&gt;&lt;/a&gt;
  &lt;a href="https://github.com/MLaminekane/hawkeye/blob/main/LICENSE" rel="noopener noreferrer"&gt;&lt;img src="https://camo.githubusercontent.com/b8cadaa967891081f8f165695470689986c028821dd8a040132f6e661795dc0d/68747470733a2f2f696d672e736869656c64732e696f2f62616467652f6c6963656e73652d4d49542d626c7565" alt="license"&gt;&lt;/a&gt;
  &lt;a href="https://github.com/MLaminekane/hawkeye" rel="noopener noreferrer"&gt;&lt;img src="https://camo.githubusercontent.com/2bf4b8a4e3e3fe16ccbd2cfc84f1e8fdf0aa82ad46548ad85bf805723cf60e42/68747470733a2f2f696d672e736869656c64732e696f2f6769746875622f73746172732f4d4c616d696e656b616e652f6861776b6579653f7374796c653d736f6369616c" alt="GitHub stars"&gt;&lt;/a&gt;
&lt;/p&gt;

&lt;p&gt;
  &lt;a href="https://github.com/MLaminekane/hawkeye#installation" rel="noopener noreferrer"&gt;Install&lt;/a&gt; •
  &lt;a href="https://github.com/MLaminekane/hawkeye#quick-start" rel="noopener noreferrer"&gt;Quick Start&lt;/a&gt; •
  &lt;a href="https://github.com/MLaminekane/hawkeye#features" rel="noopener noreferrer"&gt;Features&lt;/a&gt; •
  &lt;a href="https://github.com/MLaminekane/hawkeye#cli-commands" rel="noopener noreferrer"&gt;CLI&lt;/a&gt; •
  &lt;a href="https://github.com/MLaminekane/hawkeye#dashboard" rel="noopener noreferrer"&gt;Dashboard&lt;/a&gt; •
  &lt;a href="https://github.com/MLaminekane/hawkeye#driftdetect" rel="noopener noreferrer"&gt;DriftDetect&lt;/a&gt; •
  &lt;a href="https://github.com/MLaminekane/hawkeye#guardrails" rel="noopener noreferrer"&gt;Guardrails&lt;/a&gt; •
  &lt;a href="https://github.com/MLaminekane/hawkeye#security" rel="noopener noreferrer"&gt;Security&lt;/a&gt; •
  &lt;a href="https://github.com/MLaminekane/hawkeye#architecture" rel="noopener noreferrer"&gt;Architecture&lt;/a&gt;
&lt;/p&gt;




&lt;div class="markdown-heading"&gt;
&lt;h2 class="heading-element"&gt;What is Hawkeye?&lt;/h2&gt;
&lt;/div&gt;

&lt;p&gt;Hawkeye is a &lt;strong&gt;flight recorder&lt;/strong&gt; for AI agents. It captures every action an agent performs — terminal commands, file operations, LLM calls, API requests — and provides:&lt;/p&gt;


&lt;ul&gt;

&lt;li&gt;

&lt;strong&gt;Session recording &amp;amp; replay&lt;/strong&gt; — Full timeline of every agent action with costs and metadata&lt;/li&gt;

&lt;li&gt;

&lt;strong&gt;Time Travel Debugging&lt;/strong&gt; — Step-through replay with breakpoints, keyboard shortcuts, interactive SVG timeline, session forking ("replay from here")&lt;/li&gt;

&lt;li&gt;

&lt;strong&gt;Root Cause Analysis&lt;/strong&gt; — Automatic &lt;code&gt;hawkeye analyze&lt;/code&gt; finds primary errors, causal chains, error patterns, and fix suggestions (heuristic + optional LLM)&lt;/li&gt;

&lt;li&gt;

&lt;strong&gt;DriftDetect&lt;/strong&gt; — Real-time objective drift detection using heuristic + LLM scoring&lt;/li&gt;

&lt;li&gt;

&lt;strong&gt;Guardrails&lt;/strong&gt; — File protection, command blocking, cost limits, token limits…&lt;/li&gt;

&lt;/ul&gt;
&lt;/div&gt;
&lt;br&gt;
  &lt;/div&gt;
&lt;br&gt;
  &lt;div class="gh-btn-container"&gt;&lt;a class="gh-btn" href="https://github.com/MLaminekane/hawkeye" rel="noopener noreferrer"&gt;View on GitHub&lt;/a&gt;&lt;/div&gt;
&lt;br&gt;
&lt;/div&gt;





&lt;h3&gt;
  
  
  Npm: 

&lt;div class="crayons-card c-embed text-styles text-styles--secondary"&gt;
    &lt;div class="c-embed__content"&gt;
      &lt;div class="c-embed__body flex items-center justify-between"&gt;
        &lt;a href="npmjs.com/package/hawkeye-ai" rel="noopener noreferrer" class="c-link fw-bold flex items-center"&gt;
          &lt;span class="mr-2"&gt;npmjs.com/package/hawkeye-ai&lt;/span&gt;
          

        &lt;/a&gt;
      &lt;/div&gt;
    &lt;/div&gt;
&lt;/div&gt;



&lt;/h3&gt;




&lt;p&gt;I'd love feedback. One challenge I'm still working on: token/cost tracking is unreliable when agents don't expose usage data in their hooks. If anyone has ideas on this, I'm all ears.&lt;/p&gt;

</description>
      <category>ai</category>
      <category>programming</category>
      <category>career</category>
      <category>agents</category>
    </item>
  </channel>
</rss>
