<?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: ALSOPS</title>
    <description>The latest articles on DEV Community by ALSOPS (@alsops).</description>
    <link>https://dev.to/alsops</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.us-east-2.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F3652372%2Fc21d6a86-1e6c-43a0-94a4-9153f2baa0d8.png</url>
      <title>DEV Community: ALSOPS</title>
      <link>https://dev.to/alsops</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/alsops"/>
    <language>en</language>
    <item>
      <title>How I Built a Linux Threat Detection Engine That Explains Why It Fired</title>
      <dc:creator>ALSOPS</dc:creator>
      <pubDate>Fri, 14 Aug 2026 19:07:01 +0000</pubDate>
      <link>https://dev.to/alsops/how-i-built-a-linux-threat-detection-engine-that-explains-why-it-fired-1ng2</link>
      <guid>https://dev.to/alsops/how-i-built-a-linux-threat-detection-engine-that-explains-why-it-fired-1ng2</guid>
      <description>&lt;p&gt;Security alerts are easy to generate.&lt;br&gt;
Useful security alerts are much harder.&lt;br&gt;
After dealing with enough alerts that turned out to be false positives, I started asking a different question:&lt;br&gt;
What if a threat detection system didn't just tell you what happened, but explained why it thinks it matters?&lt;br&gt;
That's what led me to build the detection engine behind Watch Cortex.&lt;br&gt;
This isn't a post about building another SIEM. It's about the detection and reasoning layer: how it correlates Linux security events, builds context, evaluates competing hypotheses, matches attack sequences, and produces an investigation you can actually understand.&lt;br&gt;
The Problem: An Alert Isn't an Investigation&lt;br&gt;
A traditional rule might look something like:&lt;br&gt;
if failed_ssh_logins &amp;gt; 5:&lt;br&gt;
    alert("possible brute force")&lt;br&gt;
The problem is that the rule doesn't know what happened afterward.&lt;br&gt;
Five failed SSH logins followed by nothing might be automated internet noise.&lt;br&gt;
Five failed logins followed by a successful login, a privilege escalation, a new process, and a configuration change are a very different situation.&lt;br&gt;
Those two events shouldn't produce the same response.&lt;br&gt;
So instead of treating every event independently, I designed Cortex around context and event sequences.&lt;br&gt;
The Architecture: Five Context Trees + A Reasoner&lt;br&gt;
The detection pipeline has two major stages.&lt;br&gt;
Stage 1: Build Context Trees&lt;br&gt;
For each Linux server, Cortex builds five independent context trees.&lt;br&gt;
The database queries run concurrently using Promise.all, with a warm-cache target of under 60 ms for the context-building stage.&lt;br&gt;
The five trees are:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Health Tree
Tracks deviations from a server's normal behavior.
Instead of saying:
CPU &amp;gt; 80% = suspicious
Cortex builds a seven-day baseline for each server and uses statistical deviation instead.
That matters because 80% CPU can be completely normal for one server and highly unusual for another.
For new servers without enough historical data, the system can fall back to peer-group behavior.&lt;/li&gt;
&lt;li&gt;Network Tree
Tracks things such as:
New connections
Unusual ports
Port scanning behavior
Potential lateral movement
Suspicious outbound connections
Beacon-like communication patterns&lt;/li&gt;
&lt;li&gt;Process Tree
Tracks:
Running processes
Parent/child relationships
Process ancestry
File activity
Suspicious executables
YARA matches
The process ancestry is particularly useful.
A process isn't necessarily suspicious because of its name. How it got there can be much more interesting.&lt;/li&gt;
&lt;li&gt;Threat Tree
Correlates:
IOC matches
CVE exposure
MITRE ATT&amp;amp;CK techniques
Known malicious indicators
Other threat intelligence signals&lt;/li&gt;
&lt;li&gt;Authentication Tree
Tracks:
Failed logins
Successful logins
Sudo activity
New accounts
Privilege changes
Credential-related behavior
Each signal receives a weight and severity score.
There's also an important distinction between new behavior and persistent behavior.
If a server has continuously shown the same condition for more than 24 hours, Cortex marks that signal as chronic and reduces its impact.
A server that has always been running at 90% CPU isn't necessarily experiencing a new security event.
Stage 2: The Reasoner Evaluates Competing Hypotheses
Once the five context trees are built, the reasoner evaluates possible explanations.
Some of the hypotheses include:
brute_force_campaign
active_intrusion
apt_intrusion
malware_execution
lateral_movement_attempt
data_exfiltration
ransomware
resource_abuse
reconnaissance
supply_chain_compromise
Instead of asking:
"Did rule X fire?"
the system asks:
"Given all of the evidence available right now, which explanation best fits what we're seeing?"
Each hypothesis evaluates the five context axes independently on a 0–100 scale.
The weighting is hypothesis-specific.
For example, a brute-force hypothesis puts more emphasis on authentication activity, while an APT-style hypothesis may put more emphasis on process behavior and its relationship with network activity.
Just as importantly, the system tracks evidence against a hypothesis.
If there's no internet exposure, no recent authentication activity, and no plausible entry point, that should reduce confidence in certain intrusion hypotheses even if other anomalies exist.
That's an important difference between simply adding more alerts and actually correlating evidence.
Detecting Attack Chains Instead of Isolated Events
The hypothesis engine isn't the only detection layer.
There's also a TTP sequence matcher that looks for multi-step attack patterns.
Each pattern contains ordered signal steps and time constraints.
For example:
SSH Brute Force → Process Anomaly → Configuration Change
Step 1:
brute_force or auth_fail
minimum: 5 events&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Step 2:&lt;br&gt;
suspicious_process&lt;br&gt;
within: 2 hours&lt;br&gt;
source correlation: Step 1&lt;/p&gt;

&lt;p&gt;Step 3:&lt;br&gt;
fim_change&lt;br&gt;
within: 2 hours&lt;/p&gt;

&lt;p&gt;Result:&lt;br&gt;
increase confidence in active intrusion&lt;br&gt;
The important part isn't that any individual event is necessarily malicious.&lt;br&gt;
It's that the sequence makes the events more meaningful together.&lt;br&gt;
Another example is cryptocurrency-mining persistence:&lt;br&gt;
Step 1:&lt;br&gt;
known miner indicator or mining-pool connection&lt;/p&gt;

&lt;p&gt;Step 2:&lt;br&gt;
cron modification or systemd unit creation&lt;br&gt;
within: 4 hours&lt;/p&gt;

&lt;p&gt;Result:&lt;br&gt;
increase confidence in resource abuse&lt;br&gt;
And a reverse-shell pattern:&lt;br&gt;
Step 1:&lt;br&gt;
process spawns shell&lt;/p&gt;

&lt;p&gt;Step 2:&lt;br&gt;
shell establishes outbound connection&lt;/p&gt;

&lt;p&gt;Result:&lt;br&gt;
increase confidence in command execution&lt;br&gt;
When a TTP chain matches, it can increase the confidence of the relevant hypothesis and, depending on the policy, contribute to an automated response.&lt;br&gt;
Possible responses include:&lt;br&gt;
Temporarily blocking an IP&lt;br&gt;
Isolating a network interface&lt;br&gt;
Terminating a suspicious process&lt;br&gt;
Collecting forensic information&lt;br&gt;
The important design principle is that detection and response are separate decisions. A detection can increase confidence without automatically taking destructive action.&lt;br&gt;
The Feature That Made the System Actually Useful: Explainability&lt;br&gt;
This is probably the part I'm most proud of.&lt;br&gt;
Every investigation plan contains the reasoning behind the decision.&lt;br&gt;
Instead of:&lt;br&gt;
Threat detected — confidence: 87%&lt;br&gt;
you can see:&lt;br&gt;
Which hypothesis won&lt;br&gt;
Why it won&lt;br&gt;
Supporting evidence&lt;br&gt;
Against-evidence&lt;br&gt;
Relevant processes and PIDs&lt;br&gt;
File paths&lt;br&gt;
IOC values&lt;br&gt;
Matched TTP chains&lt;br&gt;
Confidence adjustments&lt;br&gt;
The final confidence score&lt;br&gt;
For example, the system can explain that confidence was affected by:&lt;br&gt;
False-positive dampening&lt;br&gt;
If a server has repeatedly generated false-positive plans for the same behavior, the system can reduce the confidence of similar future detections.&lt;br&gt;
Temporal escalation&lt;br&gt;
If the same threat class appeared recently and wasn't dismissed or cancelled, confidence can increase.&lt;br&gt;
Persistence matters.&lt;br&gt;
Fleet correlation&lt;br&gt;
If multiple servers in the same organization exhibit the same threat class at approximately the same time, Cortex can flag the behavior as potentially campaign-wide.&lt;br&gt;
This makes the output much more useful than a generic severity number.&lt;br&gt;
You can actually inspect why the system believes something is happening.&lt;br&gt;
What I Got Wrong&lt;br&gt;
The first version had several problems.&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Chronic Signals Created Alert Fatigue
Early versions would repeatedly rediscover the same condition.
A misconfigured process could appear in every detection sweep and continuously generate another "suspicious process" investigation.
The solution was to distinguish persistent conditions from newly emerging behavior.
Signals that remain continuously present for more than 24 hours receive a chronic penalty.
The goal isn't to hide the condition.
It's to stop treating yesterday's condition as today's new incident.&lt;/li&gt;
&lt;li&gt;Hardcoded Thresholds Don't Generalize
My first attempt was basically:
CPU &amp;gt; 80% = anomaly
That didn't work.
A database server running at 80% CPU may be completely normal.
A lightly loaded web server suddenly reaching 80% at 3 AM could be much more interesting.
Switching to per-server baselines and statistical deviation made the health signals considerably more useful.&lt;/li&gt;
&lt;li&gt;I Wanted Real-Time Reasoning
Cortex currently separates event detection from the heavier reasoning sweep.
The agent can react to events as they're ingested, while the contextual reasoning layer runs on a 15-minute cycle.
I initially wanted to make the reasoning cycle much faster.
But the context-building stage queries five different areas of server state for every server. On a larger fleet, running that continuously becomes expensive very quickly.
So I ended up with a hybrid approach:
Fast event detection + periodic deeper reasoning.
It's not perfectly real-time, but it gives me a better tradeoff between detection depth and infrastructure cost.
Why I Built It This Way
The goal wasn't to create another tool that generates more alerts.
The goal was to reduce the distance between:
Event → Context → Hypothesis → Evidence → Decision
That's also why I don't want the system to be a black box.
If Cortex says something looks like an active intrusion, I want an operator to be able to open the investigation and ask:
"Why?"
And get an answer based on the actual evidence collected from the server.
Try the Detection Engine
The system is currently available through Watch Cortex.
You can try the interactive demo without creating an account:
&lt;a href="https://watch.alsopss.com/demo" rel="noopener noreferrer"&gt;https://watch.alsopss.com/demo&lt;/a&gt;
The demo shows the investigation workflow, reasoning chain, confidence scoring, and TTP matching.
There's also a 14-day trial for the full platform.
If you're building Linux security tooling, detection pipelines, SIEMs, EDRs, or homelab security systems, I'd genuinely like to hear how you approach the same problem.
What signals do you find most useful for distinguishing a real intrusion from normal Linux noise?
I'd especially like to hear from people running their own homelabs or small server fleets.&lt;/li&gt;
&lt;/ol&gt;

</description>
      <category>security</category>
      <category>linux</category>
      <category>devops</category>
      <category>homelab</category>
    </item>
    <item>
      <title>I Built an Autonomous AI Security Brain for Linux Servers (It Actually Responds, Not Just Alerts)</title>
      <dc:creator>ALSOPS</dc:creator>
      <pubDate>Sun, 21 Jun 2026 13:22:08 +0000</pubDate>
      <link>https://dev.to/alsops/i-built-an-autonomous-ai-security-brain-for-linux-servers-it-actually-responds-not-just-alerts-4kp6</link>
      <guid>https://dev.to/alsops/i-built-an-autonomous-ai-security-brain-for-linux-servers-it-actually-responds-not-just-alerts-4kp6</guid>
      <description>&lt;p&gt;I got tired of security tools that wake me up at 3am with alerts but leave all the real work to me.&lt;/p&gt;

&lt;p&gt;So I built &lt;strong&gt;Cortex&lt;/strong&gt; — the autonomous decision engine that powers &lt;a href="https://watch.alsopss.com" rel="noopener noreferrer"&gt;Watch&lt;/a&gt;.&lt;/p&gt;

&lt;h3&gt;
  
  
  The Problem Most Linux Security Tools Share
&lt;/h3&gt;

&lt;p&gt;Most tools (Falco, Wazuh, OSSEC, etc.) are great at &lt;strong&gt;detecting&lt;/strong&gt; things, but terrible at &lt;strong&gt;deciding&lt;/strong&gt; what to do about them. You end up with alert fatigue and manual investigation every single time.&lt;/p&gt;

&lt;p&gt;I wanted something different.&lt;/p&gt;

&lt;h3&gt;
  
  
  Introducing Cortex: Context → Reason → Plan → Actuate
&lt;/h3&gt;

&lt;p&gt;Cortex is the AI-powered security brain inside Watch. It runs on every server and works like this:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Context&lt;/strong&gt; — Automatically builds a rich snapshot of the system (processes with ancestry, network connections, file integrity, SSH activity, DNS queries, etc.)&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;
&lt;p&gt;&lt;strong&gt;Reason&lt;/strong&gt; — The on-device AI analyzes everything and answers:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;What is the most likely threat?&lt;/li&gt;
&lt;li&gt;How confident are we?&lt;/li&gt;
&lt;li&gt;How urgent is this?&lt;/li&gt;
&lt;/ul&gt;
&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Plan&lt;/strong&gt; — If action is needed, it creates a clear, safe response plan (ban IP, kill process, revert file changes, etc.). It also &lt;strong&gt;deduplicates&lt;/strong&gt; plans so you don’t get spammed with the same alert 50 times.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Actuate&lt;/strong&gt; — It can act autonomously (in Autopilot or Sovereign mode) or queue the plan for your one-click approval.&lt;/p&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;All of this happens &lt;strong&gt;on-device&lt;/strong&gt;, in milliseconds, even if the backend is unreachable.&lt;/p&gt;

&lt;h3&gt;
  
  
  Real Example from the Live Demo
&lt;/h3&gt;

&lt;p&gt;When a brute-force attack hits, you can literally watch Cortex:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Gather context&lt;/li&gt;
&lt;li&gt;Reason: “High confidence SSH brute force + suspicious process”&lt;/li&gt;
&lt;li&gt;Plan: Ban the IP via nftables + kill the malicious process&lt;/li&gt;
&lt;li&gt;Actuate: Execute (or wait for approval)&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;You see the full reasoning chain in plain English.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;&lt;a href="https://watch.alsopss.com/demo" rel="noopener noreferrer"&gt;Try the Public Demo Right Now (No Account Needed)&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  Why I Built This
&lt;/h3&gt;

&lt;p&gt;I run a small independent software company (AL'S-OPS LLC) and got frustrated with the existing tools. Either they were:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Too noisy (constant alerts)&lt;/li&gt;
&lt;li&gt;Too heavy (ate all my RAM)&lt;/li&gt;
&lt;li&gt;Too cloud-dependent&lt;/li&gt;
&lt;li&gt;Or completely passive&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Cortex was designed to fix all four problems.&lt;/p&gt;

&lt;h3&gt;
  
  
  Current Status &amp;amp; Roadmap
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;Works great on bare metal and VMs (Ubuntu, Debian, RHEL, etc.)&lt;/li&gt;
&lt;li&gt;Docker support is live&lt;/li&gt;
&lt;li&gt;Kubernetes support is rolling out now&lt;/li&gt;
&lt;li&gt;Extremely lightweight agent (&amp;lt;8MB)&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Try It Yourself
&lt;/h3&gt;

&lt;p&gt;One-line install:&lt;/p&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;
bash
curl -fsSL https://watch.alsopss.com/install.sh | sudo bash
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

</description>
      <category>security</category>
      <category>linux</category>
      <category>selfhosted</category>
      <category>ai</category>
    </item>
    <item>
      <title>Building the Future of Automation: The Al's-Ops LLC Story</title>
      <dc:creator>ALSOPS</dc:creator>
      <pubDate>Sat, 20 Jun 2026 20:06:50 +0000</pubDate>
      <link>https://dev.to/alsops/building-the-future-of-automation-the-als-ops-llc-story-47ih</link>
      <guid>https://dev.to/alsops/building-the-future-of-automation-the-als-ops-llc-story-47ih</guid>
      <description>&lt;p&gt;Hey Dev.to community! 👋&lt;br&gt;
I wanted to take a moment to introduce myself and share the journey behind the company I founded. My name is Aiden McElroy, and I am the CEO and Founder of Al's-Ops LLC.&lt;br&gt;
If you love DevOps, automation, and building scalable infrastructure, you're in the right place.&lt;br&gt;
The Vision Behind Al's-Ops&lt;br&gt;
Every developer knows the pain of repetitive tasks, fragile deployment pipelines, and the dreaded "well, it worked on my machine" excuse. I started Al's-Ops LLC with a clear mission: to streamline operations, eliminate friction, and help teams deploy with absolute confidence.&lt;br&gt;
We focus on creating robust operational frameworks and automation strategies that allow developers to focus on what they do best—writing great code—while we handle the heavy lifting of the infrastructure.&lt;br&gt;
What We Are Obsessed With:&lt;br&gt;
Infrastructure as Code (IaC): Making environments reproducible, scalable, and secure.&lt;br&gt;
CI/CD Pipeline Optimization: Cutting down build times and removing deployment bottlenecks.&lt;br&gt;
Smart Monitoring &amp;amp; Observability: Finding and fixing bugs before your users even notice them.&lt;br&gt;
Leadership in Tech: The Founder's Journey&lt;br&gt;
Stepping into the role of CEO and Founder has been an incredible masterclass in both tech and business. Balancing the technical roadmap with strategic growth isn't always easy, but seeing the direct impact our solutions have on development teams makes every late-night coding session completely worth it.&lt;br&gt;
My goal for Al's-Ops LLC isn't just to build another tech company; it’s to foster a culture of efficiency, continuous learning, and open-source collaboration.&lt;br&gt;
Let’s Connect!&lt;br&gt;
We are always looking to connect with brilliant developers, system architects, and tech enthusiasts.&lt;br&gt;
What are the biggest DevOps or automation bottlenecks your team faces today?&lt;br&gt;
What tools are you currently utilizing in your stack?&lt;br&gt;
Drop a comment below, let’s chat tech, and feel free to follow along as we continue to scale Al's-Ops LLC! 🚀&lt;br&gt;
Follow me here on Dev.to or connect with me to stay updated on our latest projects and technical insights!&lt;/p&gt;

</description>
      <category>devops</category>
      <category>automation</category>
      <category>founder</category>
      <category>opensource</category>
    </item>
    <item>
      <title>How I got a threat-classification AI running on-agent in under 8ms — no GPU, no cloud</title>
      <dc:creator>ALSOPS</dc:creator>
      <pubDate>Mon, 15 Jun 2026 18:16:36 +0000</pubDate>
      <link>https://dev.to/alsops/how-i-got-a-threat-classification-ai-running-on-agent-in-under-8ms-no-gpu-no-cloud-4cge</link>
      <guid>https://dev.to/alsops/how-i-got-a-threat-classification-ai-running-on-agent-in-under-8ms-no-gpu-no-cloud-4cge</guid>
      <description>&lt;p&gt;When I tell people that Watch Cortex classifies threats in under 8ms on-agent — no cloud call, no GPU, no round-trip — the first question is usually: &lt;em&gt;how?&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;The second question is: &lt;em&gt;why bother? Just send it to the cloud.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;Let me answer the second one first, because it explains all the engineering decisions that follow.&lt;/p&gt;




&lt;h2&gt;
  
  
  Why on-agent matters
&lt;/h2&gt;

&lt;p&gt;The cloud-call model for security agents has a fundamental problem: it fails when you need it most.&lt;/p&gt;

&lt;p&gt;Network incidents, backend outages, high-latency connections — all of these happen. And they correlate with attacks. An attacker who can disrupt your monitoring before escalating isn't a theoretical threat; it's a documented technique (T1562.001 in MITRE ATT&amp;amp;CK).&lt;/p&gt;

&lt;p&gt;If your security agent phones home and gets no answer, you're flying blind during an attack. That's not a tradeoff I'm willing to make.&lt;/p&gt;

&lt;p&gt;Beyond reliability: latency. A cloud round-trip is 50-200ms under good conditions. That's an eternity in an SSH brute-force sequence. Cortex needs to classify and respond before the attacker's next attempt lands — sub-second total, which means the classification step has to be under 10ms.&lt;/p&gt;

&lt;p&gt;So: on-agent, &amp;lt;8ms, no GPU. Those were the constraints. Here's how I built to them.&lt;/p&gt;




&lt;h2&gt;
  
  
  What "classification" actually means here
&lt;/h2&gt;

&lt;p&gt;First, let's be precise about what Cortex is doing. It's not doing NLP. It's not running a large model. It's doing &lt;strong&gt;behavioral event classification&lt;/strong&gt; — looking at structured telemetry events and deciding: is this a threat, and if so, what kind?&lt;/p&gt;

&lt;p&gt;Input: a stream of structured events — process forks, network connections, file writes, auth attempts — with context (parent process, timestamp, user, path, connection direction).&lt;/p&gt;

&lt;p&gt;Output: a threat classification with confidence score, threat category, and recommended response action.&lt;/p&gt;

&lt;p&gt;That framing changes the problem significantly. I'm not asking "what does this log line mean in English?" I'm asking "does this pattern of events match known attack behavior?"&lt;/p&gt;




&lt;h2&gt;
  
  
  The model architecture
&lt;/h2&gt;

&lt;p&gt;Cortex uses a &lt;strong&gt;gradient-boosted decision tree ensemble&lt;/strong&gt; (XGBoost, specifically) for the primary classifier, with a lightweight neural layer for anomaly scoring on top.&lt;/p&gt;

&lt;p&gt;Why GBT instead of a neural network?&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Inference speed.&lt;/strong&gt; A well-tuned XGBoost model with ~200 trees classifies a feature vector in under 1ms on a modern CPU. Neural networks at equivalent accuracy are 10-50x slower for structured tabular data.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;No GPU required.&lt;/strong&gt; GBT inference is pure CPU arithmetic — matrix multiplications over narrow feature vectors. An EC2 t3.micro can run it comfortably alongside the monitoring agent without noticeable CPU impact.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Explainability.&lt;/strong&gt; SHAP values let me tell the operator &lt;em&gt;exactly&lt;/em&gt; which features drove the classification. That's how Cortex generates plain-language investigation summaries — not LLM-generated prose, but template-filled explanations grounded in feature importance scores.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Small model size.&lt;/strong&gt; The serialized Cortex model is ~1.2MB. It ships with the agent binary, pre-synced. No cold-start, no download-on-first-use.&lt;/p&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;The anomaly layer is a small autoencoder (3 layers, ~15K parameters) that learns each server's baseline behavior over the first 72 hours. It flags events that deviate from that baseline even when they don't match known attack patterns. This is what catches novel techniques that the GBT hasn't been trained on.&lt;/p&gt;




&lt;h2&gt;
  
  
  Feature engineering: where the real work is
&lt;/h2&gt;

&lt;p&gt;The model is the easy part. Feature engineering is where I spent 80% of the time.&lt;/p&gt;

&lt;p&gt;Raw events are useless to a classifier. What matters is the &lt;em&gt;context&lt;/em&gt; around an event — the temporal patterns, the process ancestry, the prior history of the entities involved.&lt;/p&gt;

&lt;p&gt;Cortex computes ~140 features per event. A few illustrative examples:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Process ancestry features:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Depth of the process tree from init&lt;/li&gt;
&lt;li&gt;Whether the parent is a known-good daemon vs. a user shell&lt;/li&gt;
&lt;li&gt;Number of unique children spawned by this parent in the last 60 seconds&lt;/li&gt;
&lt;li&gt;Whether this process name has been seen under this parent before (binary: novel lineage)&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Network features:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Is the destination IP in a known-bad range (Tor exit nodes, bulletproof hosting ASNs)?&lt;/li&gt;
&lt;li&gt;Is this the first time this process has made a network connection?&lt;/li&gt;
&lt;li&gt;Is the destination port non-standard for this process's typical behavior?&lt;/li&gt;
&lt;li&gt;Is the connection outbound from a process that typically doesn't make outbound connections?&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;Temporal features:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Auth failure rate per source IP in a rolling 60-second window&lt;/li&gt;
&lt;li&gt;Time since last successful auth from this IP&lt;/li&gt;
&lt;li&gt;Number of distinct usernames targeted by this source IP&lt;/li&gt;
&lt;li&gt;Whether this event is occurring during an unusual time window for this server&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;File integrity features:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Was the file path modified by a process in the authorized-writer set?&lt;/li&gt;
&lt;li&gt;Is the path in a high-sensitivity directory (authorized_keys, sudoers, cron.d)?&lt;/li&gt;
&lt;li&gt;How recently was this file last modified?&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The key insight: most of these features require &lt;strong&gt;stateful context&lt;/strong&gt;, not just the current event. The agent maintains an in-memory state store — process tables, connection history, auth attempt logs, file write history — that the feature extractor queries in microseconds. This is why the agent runs as a persistent daemon rather than a per-event script.&lt;/p&gt;




&lt;h2&gt;
  
  
  The 8ms breakdown
&lt;/h2&gt;

&lt;p&gt;Here's where the time actually goes:&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Step&lt;/th&gt;
&lt;th&gt;Time&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Event receipt from kernel (eBPF probe)&lt;/td&gt;
&lt;td&gt;~0.1ms&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;State store lookup + feature extraction&lt;/td&gt;
&lt;td&gt;~1.5ms&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;GBT inference (XGBoost, 200 trees)&lt;/td&gt;
&lt;td&gt;~0.8ms&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Anomaly score (autoencoder)&lt;/td&gt;
&lt;td&gt;~1.2ms&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Threat category resolution + confidence calibration&lt;/td&gt;
&lt;td&gt;~0.3ms&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Response decision + action dispatch&lt;/td&gt;
&lt;td&gt;~0.5ms&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;SHAP explanation generation&lt;/td&gt;
&lt;td&gt;~3.5ms&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Total&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;&lt;strong&gt;~8ms&lt;/strong&gt;&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;SHAP generation is surprisingly expensive — it's the largest chunk. In a future version I may cache SHAP values for common event types and only run full SHAP on novel patterns. But 8ms total is fast enough that I haven't prioritized it.&lt;/p&gt;

&lt;p&gt;The eBPF kernel probes are the other interesting piece. Cortex uses a small eBPF program (compiled with libbpf) attached to kprobes for &lt;code&gt;execve&lt;/code&gt;, &lt;code&gt;connect&lt;/code&gt;, &lt;code&gt;openat&lt;/code&gt;, and a handful of others. The probe captures the raw event and writes it to a ring buffer; the userspace agent reads the ring buffer in a tight loop. This gives sub-millisecond event delivery from kernel to userspace — much faster than reading audit logs from &lt;code&gt;/var/log/audit/&lt;/code&gt;.&lt;/p&gt;




&lt;h2&gt;
  
  
  Training data: the unglamorous part
&lt;/h2&gt;

&lt;p&gt;A model is only as good as its training data, and training data for Linux attack behavior is genuinely hard to get.&lt;/p&gt;

&lt;p&gt;I ended up with four sources:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Public datasets.&lt;/strong&gt; DARPA VAST, CERT Insider Threat, CIC-IDS2017/2018. These are academic datasets with labeled attack traffic. Useful for broad coverage, but they're old and the attack patterns don't match modern techniques.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Honeypots.&lt;/strong&gt; I run a small fleet of intentionally vulnerable Linux VMs (minimal hardening, weak SSH passwords) exposed to the public internet. They get attacked constantly. I log everything and use it as labeled attack data after manual review.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Red team exercises.&lt;/strong&gt; I've run controlled red team scenarios against test VMs — mimicking common MITRE ATT&amp;amp;CK techniques — and captured the resulting telemetry as positive training examples.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Production negatives.&lt;/strong&gt; Telemetry from normal server operation — cron jobs, package installs, legitimate SSH sessions, monitoring agents — gives me the negative class (normal behavior). This is the largest portion of the training set by volume.&lt;/p&gt;&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;The hardest problem: class imbalance. In production, attacks are rare events. A naive classifier learns to just say "not attack" and achieves 99.9% accuracy, which is useless. Cortex uses SMOTE oversampling on the minority class during training, plus a heavily tuned decision threshold that optimizes for false-negative minimization rather than accuracy. I'd rather have a false positive (unnecessary alert) than a false negative (missed attack).&lt;/p&gt;




&lt;h2&gt;
  
  
  Fleet immune memory: how threat signatures propagate
&lt;/h2&gt;

&lt;p&gt;When Cortex detects and confirms a novel threat pattern on one agent, it extracts a compact threat signature: a vector of the most discriminative features that characterized the attack.&lt;/p&gt;

&lt;p&gt;This signature is broadcast to all other agents in the fleet over an encrypted WebSocket connection to the backend, which fans it out immediately. Each receiving agent adds the signature to its local threat library.&lt;/p&gt;

&lt;p&gt;The signature is not the full model — it's a set of rules derived from feature importance: "if source IP is in this /24, and auth failure rate exceeds X/min, and targeted usernames include 'admin' or 'root', classify as brute force with 0.95 confidence."&lt;/p&gt;

&lt;p&gt;These derived rules are fast to evaluate — microseconds, not milliseconds — and supplement the GBT classifier for known-active attack campaigns.&lt;/p&gt;

&lt;p&gt;When a human operator corrects a Cortex decision (false positive or false negative), the correction is also broadcast fleet-wide. The correction adjusts the confidence calibration for that threat category and, if it's a false positive on a specific process/path combination, adds it to a server-specific allowlist that propagates to similar servers in the fleet (matched by OS version and installed packages).&lt;/p&gt;




&lt;h2&gt;
  
  
  What I got wrong the first time
&lt;/h2&gt;

&lt;p&gt;A few things I had to unlearn:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;I started with a larger model.&lt;/strong&gt; My first attempt used a 1,000-tree ensemble with deeper trees and more features. It was more accurate on benchmarks. It was also 40ms inference time, which broke the latency requirement. Ruthlessly pruning to 200 shallower trees while maintaining accuracy was a week of work.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;I underestimated feature extraction time.&lt;/strong&gt; I assumed feature extraction was trivial. It's not — especially the temporal features that require querying rolling windows over the state store. Most of my latency wins came from optimizing the state store (switched from SQLite to a hand-rolled ring-buffer structure in memory) rather than the model itself.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;I tried to make the model explain itself in prose.&lt;/strong&gt; My first attempt at investigation summaries used a small language model to generate natural-language explanations from the feature values. It added 50ms and the explanations were worse than what I ended up with: structured templates filled in by SHAP feature importance. "High-frequency SSH auth failures from new IP (3,800 attempts / 4 min)" is more useful than a paragraph.&lt;/p&gt;




&lt;h2&gt;
  
  
  Where it goes from here
&lt;/h2&gt;

&lt;p&gt;A few things on the roadmap:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Per-server model fine-tuning.&lt;/strong&gt; Right now Cortex ships one global model and adapts at inference time using the anomaly layer. Long-term, I want to fine-tune the GBT on each server's specific behavior profile after a 30-day baseline period.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;eBPF program hot-reload.&lt;/strong&gt; Currently, updating the kernel probes requires an agent restart. I'm working on a mechanism to push updated eBPF programs without dropping the ring buffer or interrupting monitoring.&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;&lt;strong&gt;Threat intelligence federation.&lt;/strong&gt; Beyond fleet immune memory, I'm looking at integrating with external threat intel feeds (VirusTotal, AbuseIPDB, Shodan) to supplement the classifier's context for external IPs and file hashes.&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;




&lt;p&gt;If you're building something in this space — autonomous security agents, on-device ML inference, eBPF-based monitoring — I'm happy to trade notes. Drop a comment or reach out directly.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://watch.alsopss.com" rel="noopener noreferrer"&gt;Watch Cortex&lt;/a&gt; — 14-day free trial, no credit card.&lt;/p&gt;




&lt;p&gt;&lt;em&gt;Built by &lt;a href="https://watch.alsopss.com" rel="noopener noreferrer"&gt;AL'S-OPS LLC&lt;/a&gt;. Feedback and security disclosures: &lt;a href="mailto:security@alsopss.com"&gt;security@alsopss.com&lt;/a&gt;.&lt;/em&gt;&lt;/p&gt;

</description>
      <category>ai</category>
      <category>architecture</category>
      <category>performance</category>
      <category>security</category>
    </item>
    <item>
      <title>I built an AI that autonomously bans attackers on Linux — no human in the loop</title>
      <dc:creator>ALSOPS</dc:creator>
      <pubDate>Sun, 07 Jun 2026 06:47:09 +0000</pubDate>
      <link>https://dev.to/alsops/i-built-an-ai-that-autonomously-bans-attackers-on-linux-no-human-in-the-loop-4l49</link>
      <guid>https://dev.to/alsops/i-built-an-ai-that-autonomously-bans-attackers-on-linux-no-human-in-the-loop-4l49</guid>
      <description>&lt;p&gt;Last year I got paged at 2am because someone was brute-forcing SSH on one of my servers. I woke up, fumbled for my phone, opened the dashboard, confirmed it was real, and banned the IP. By the time I did that — maybe 4 minutes — they'd tried 3,800 passwords.&lt;/p&gt;

&lt;p&gt;They didn't get in. But that's not the point.&lt;/p&gt;

&lt;p&gt;The point is: &lt;strong&gt;why did that require a human?&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;The pattern was unambiguous. High-frequency auth failures from a single IP, no prior connection history, no valid user account targeted. An intern could have made that call. So why was I woken up at 2am to rubber-stamp a decision that was already obvious?&lt;/p&gt;

&lt;p&gt;That question is why I built &lt;a href="https://watch.alsopss.com" rel="noopener noreferrer"&gt;Watch Cortex&lt;/a&gt;.&lt;/p&gt;




&lt;h2&gt;
  
  
  The actual problem with Linux security tooling
&lt;/h2&gt;

&lt;p&gt;Most Linux security tools are good at one thing: &lt;strong&gt;generating alerts&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;Wazuh fires alerts. Datadog fires alerts. Falco fires alerts. Auditd fires alerts. If you're lucky, your SIEM correlates those alerts into a bigger alert that you also have to manually act on.&lt;/p&gt;

&lt;p&gt;The human is always in the loop. And the human is always the bottleneck.&lt;/p&gt;

&lt;p&gt;This creates a well-documented failure mode: &lt;strong&gt;alert fatigue&lt;/strong&gt;. You get so many alerts that you stop trusting them. You start dismissing things. And then you miss the one that mattered.&lt;/p&gt;

&lt;p&gt;I wanted to build something different. Not "detect and alert." &lt;strong&gt;Detect, reason, and respond&lt;/strong&gt; — in the time it takes the attacker to try their next password.&lt;/p&gt;




&lt;h2&gt;
  
  
  How Watch Cortex works
&lt;/h2&gt;

&lt;p&gt;The architecture is built around three components:&lt;/p&gt;

&lt;h3&gt;
  
  
  1. The Watch agent
&lt;/h3&gt;

&lt;p&gt;A single binary (~8MB) that deploys as a systemd service. Install:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;curl &lt;span class="nt"&gt;-fsSL&lt;/span&gt; https://watch.alsopss.com/install-agent.sh | &lt;span class="nb"&gt;sudo &lt;/span&gt;bash &lt;span class="nt"&gt;-s&lt;/span&gt; &lt;span class="nt"&gt;--&lt;/span&gt; &lt;span class="nt"&gt;--token&lt;/span&gt; YOUR_TOKEN
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Done in under 60 seconds. The agent connects outbound over WSS on port 443 — no inbound firewall changes, no open ports.&lt;/p&gt;

&lt;p&gt;It monitors:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Process creation and termination with full ancestry trees&lt;/li&gt;
&lt;li&gt;Network connections and DNS queries&lt;/li&gt;
&lt;li&gt;File integrity changes (configs, SSH authorized_keys, crontabs)&lt;/li&gt;
&lt;li&gt;SSH authentication events&lt;/li&gt;
&lt;li&gt;Systemd unit additions&lt;/li&gt;
&lt;li&gt;User/group mutations&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  2. Cortex AI — the on-agent reasoning engine
&lt;/h3&gt;

&lt;p&gt;This is the part I'm most proud of. Cortex runs &lt;strong&gt;locally on the agent&lt;/strong&gt; — no cloud call, no round-trip latency, no "cloud service is unreachable" failure mode.&lt;/p&gt;

&lt;p&gt;It classifies threats in &lt;strong&gt;under 8 milliseconds&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;Cortex doesn't just match signatures. It correlates signals across process trees, network activity, and file writes to identify behavioral patterns:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Brute force followed by a successful login from a new IP → escalate&lt;/li&gt;
&lt;li&gt;Process that opens a network socket and writes to &lt;code&gt;/tmp&lt;/code&gt; → suspicious regardless of name&lt;/li&gt;
&lt;li&gt;SSH key added to authorized_keys by a process that isn't the user's shell → respond immediately&lt;/li&gt;
&lt;li&gt;Cron job added by a process with no history → flag&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Every alert comes with a plain-language investigation summary explaining &lt;em&gt;what triggered&lt;/em&gt;, &lt;em&gt;what it correlates to&lt;/em&gt;, and &lt;em&gt;what action was taken or recommended&lt;/em&gt;. Not &lt;code&gt;RULE_5023_TRIGGERED&lt;/code&gt;. An actual explanation.&lt;/p&gt;

&lt;h3&gt;
  
  
  3. Cortex Hive — fleet immune memory
&lt;/h3&gt;

&lt;p&gt;When Watch catches something on one server, it broadcasts that threat signature to &lt;strong&gt;every other agent in your fleet&lt;/strong&gt; immediately.&lt;/p&gt;

&lt;p&gt;One server gets hit with a new cryptominer variant → every other server learns to recognize and block it before it arrives. The fleet develops collective immunity.&lt;/p&gt;

&lt;p&gt;When you correct a Cortex decision — "that was actually legitimate, don't block that next time" — that correction propagates fleet-wide automatically. The whole fleet gets smarter from one operator's feedback.&lt;/p&gt;




&lt;h2&gt;
  
  
  The four automation modes
&lt;/h2&gt;

&lt;p&gt;I don't want to force everyone into full autonomous mode on day one. So Watch has a mode ladder:&lt;/p&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Mode&lt;/th&gt;
&lt;th&gt;What it does&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Watch&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;AI observes and alerts. Every action requires your approval.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Assist&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Non-destructive actions (logging, enrichment) run auto. Destructive actions (IP ban, process kill) surface as one-click suggestions.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Autopilot&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;High-confidence threats acted on immediately. Low-confidence threats queue for your override.&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Sovereign&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;AI acts on everything confirmed. You override rather than approve — system never waits.&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;p&gt;Most people start on Assist. They see the one-click suggestions coming in, they confirm a few, they realize Cortex is right 95%+ of the time, and they bump to Autopilot. Some teams — especially infrastructure-heavy ones with no 24/7 security staff — run full Sovereign.&lt;/p&gt;

&lt;p&gt;The key insight is: &lt;strong&gt;humans should be the override path, not the approval path&lt;/strong&gt;.&lt;/p&gt;




&lt;h2&gt;
  
  
  What happens during a real attack sequence
&lt;/h2&gt;

&lt;p&gt;Here's a realistic SSH brute-force → persistence scenario and how Watch handles it in Autopilot mode:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;T+0s:&lt;/strong&gt; Attacker begins SSH brute force from 185.220.101.x&lt;br&gt;&lt;br&gt;
&lt;strong&gt;T+0.3s:&lt;/strong&gt; Watch agent detects high-frequency auth failures&lt;br&gt;&lt;br&gt;
&lt;strong&gt;T+0.8s:&lt;/strong&gt; Cortex classifies: brute force, high confidence&lt;br&gt;&lt;br&gt;
&lt;strong&gt;T+1.1s:&lt;/strong&gt; iptables rule added — IP banned&lt;br&gt;&lt;br&gt;
&lt;strong&gt;T+1.2s:&lt;/strong&gt; Threat broadcast to all fleet agents via Cortex Hive&lt;br&gt;&lt;br&gt;
&lt;strong&gt;T+1.5s:&lt;/strong&gt; Alert + investigation summary sent to dashboard  &lt;/p&gt;

&lt;p&gt;&lt;strong&gt;T+0s:&lt;/strong&gt; Attacker tries again from a different IP in same /24 subnet&lt;br&gt;&lt;br&gt;
&lt;strong&gt;T+0.3s:&lt;/strong&gt; Cortex correlates new IP to same campaign (same user targets, same timing pattern)&lt;br&gt;&lt;br&gt;
&lt;strong&gt;T+0.8s:&lt;/strong&gt; Subnet banned preemptively  &lt;/p&gt;

&lt;p&gt;&lt;strong&gt;T+0s:&lt;/strong&gt; Attacker somehow gets in (compromised credential, different vector)&lt;br&gt;&lt;br&gt;
&lt;strong&gt;T+2s:&lt;/strong&gt; New process spawned by sshd with unusual ancestry&lt;br&gt;&lt;br&gt;
&lt;strong&gt;T+3s:&lt;/strong&gt; Process opens outbound connection to known C2 range&lt;br&gt;&lt;br&gt;
&lt;strong&gt;T+3.2s:&lt;/strong&gt; Cortex classifies: reverse shell / lateral movement, high confidence&lt;br&gt;&lt;br&gt;
&lt;strong&gt;T+3.5s:&lt;/strong&gt; Process killed by PID&lt;br&gt;&lt;br&gt;
&lt;strong&gt;T+3.6s:&lt;/strong&gt; File integrity check initiated on affected paths&lt;br&gt;&lt;br&gt;
&lt;strong&gt;T+4s:&lt;/strong&gt; Operator notified with full chain-of-events summary  &lt;/p&gt;

&lt;p&gt;Total time from first detection to lateral movement blocked: &lt;strong&gt;4 seconds.&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
Time I need to be awake: &lt;strong&gt;0.&lt;/strong&gt;&lt;/p&gt;




&lt;h2&gt;
  
  
  Why I didn't just use Wazuh
&lt;/h2&gt;

&lt;p&gt;Wazuh is genuinely good. It's open-source, extensible, and has a massive rule set. I used it for two years.&lt;/p&gt;

&lt;p&gt;But Wazuh is a SIEM. It collects events, matches rules, and fires alerts. That's it. Everything after the alert is on you.&lt;/p&gt;

&lt;p&gt;Watch is an autonomous response platform. The detection is table stakes. The response — especially the AI-reasoned, fleet-aware, offline-capable response — is the thing.&lt;/p&gt;

&lt;p&gt;The other thing: Wazuh alert noise. Out of the box, you'll tune it for weeks before it's quiet enough to trust. Cortex learns your specific server's baseline. It's not "process X is always suspicious" — it's "process X is suspicious on &lt;em&gt;this server&lt;/em&gt; because it's never done this before."&lt;/p&gt;




&lt;h2&gt;
  
  
  Offline operation
&lt;/h2&gt;

&lt;p&gt;This is a requirement I'm firm about. An agent that stops working when the backend is unreachable isn't actually protecting you — it's just making you feel protected.&lt;/p&gt;

&lt;p&gt;Cortex AI, threat signatures, contingency plans, and response policies are all pre-synced to each agent. When the backend is unreachable, detection and response continue at full capability. Actions taken offline are logged locally with cryptographic timestamps and synced when connectivity returns.&lt;/p&gt;

&lt;p&gt;If someone is actively attacking your server during a network incident, the last thing you need is your security agent phoning home and getting no answer.&lt;/p&gt;




&lt;h2&gt;
  
  
  The compliance angle
&lt;/h2&gt;

&lt;p&gt;Most teams I talk to are running on vibes for Linux compliance. "We have auditd enabled" doesn't get you through a SOC 2 audit. Watch automates the parts that actually matter:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;CIS Benchmark Level 1 &amp;amp; 2&lt;/strong&gt; — continuous posture monitoring&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;SOC 2 Type II&lt;/strong&gt; — automated control mapping + evidence collection&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;PCI-DSS v4&lt;/strong&gt; — cardholder data environment monitoring&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;HIPAA&lt;/strong&gt; — access events and audit controls&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;ISO 27001&lt;/strong&gt;, &lt;strong&gt;NIST 800-207 Zero Trust&lt;/strong&gt;, &lt;strong&gt;GDPR&lt;/strong&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Business plan generates on-demand compliance reports. Enterprise/Empire run a continuous compliance forge — gaps are identified and closed automatically without you pulling a report and manually remediating.&lt;/p&gt;




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

&lt;p&gt;14-day free trial, no credit card, under 60 seconds to install:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://watch.alsopss.com" rel="noopener noreferrer"&gt;watch.alsopss.com&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Developer plan is $39/month for 5 servers. Business is $149/month for 25 servers with Autopilot mode, fleet immune memory, and compliance automation.&lt;/p&gt;

&lt;p&gt;If you're running Linux in production with limited security headcount — or you've been paged at 2am one too many times to rubber-stamp an obvious brute-force — it's worth a look.&lt;/p&gt;

&lt;p&gt;Happy to answer questions in the comments. I've been building this for two years and I can talk about the architecture all day.&lt;/p&gt;




&lt;p&gt;&lt;em&gt;Built by &lt;a href="https://watch.alsopss.com" rel="noopener noreferrer"&gt;AL'S-OPS LLC&lt;/a&gt;. Feedback, issues, and security disclosures: &lt;a href="mailto:security@alsopss.com"&gt;security@alsopss.com&lt;/a&gt;.&lt;/em&gt;&lt;/p&gt;

</description>
      <category>linux</category>
      <category>security</category>
      <category>ai</category>
      <category>devops</category>
    </item>
    <item>
      <title>From Idea to Product: How We Build Modern Web Applications</title>
      <dc:creator>ALSOPS</dc:creator>
      <pubDate>Fri, 13 Mar 2026 00:12:43 +0000</pubDate>
      <link>https://dev.to/alsops/from-idea-to-product-how-we-build-modern-web-applications-29gk</link>
      <guid>https://dev.to/alsops/from-idea-to-product-how-we-build-modern-web-applications-29gk</guid>
      <description>&lt;p&gt;Building a modern web application today is very different from even a few years ago. Users expect fast performance, seamless design, AI-powered features, and products that work flawlessly across devices.&lt;/p&gt;

&lt;p&gt;At Al’s-Ops LLC, we spend a lot of time thinking about how to build digital products that not only function well but also create meaningful user experiences.&lt;/p&gt;

&lt;p&gt;In this article, I want to share some of the principles and development practices we follow when building web applications, from early-stage concepts to production platforms.&lt;/p&gt;

&lt;p&gt;⸻&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Start With the Problem, Not the Technology&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;One of the biggest mistakes we see in product development is starting with technology instead of the user problem.&lt;/p&gt;

&lt;p&gt;Before writing a single line of code, we ask questions like:&lt;br&gt;
    • What real problem does this solve?&lt;br&gt;
    • Who is the user?&lt;br&gt;
    • How often will they use this product?&lt;br&gt;
    • What would make them return?&lt;/p&gt;

&lt;p&gt;This approach helps avoid over-engineering and ensures the product is actually valuable.&lt;/p&gt;

&lt;p&gt;For example, when building SwiftChef, our recipe discovery and meal planning platform, the focus wasn’t simply on storing recipes. The real challenge was helping users quickly find meals they want to cook and plan their week efficiently.&lt;/p&gt;

&lt;p&gt;That focus shaped everything that followed in the product.&lt;/p&gt;

&lt;p&gt;⸻&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Build an MVP That Can Scale&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Many founders hear the phrase “build an MVP” but misunderstand what it actually means.&lt;/p&gt;

&lt;p&gt;A good MVP should be:&lt;br&gt;
    • Minimal in features&lt;br&gt;
    • High quality in execution&lt;br&gt;
    • Designed with future scaling in mind&lt;/p&gt;

&lt;p&gt;The goal isn’t to launch something temporary. It’s to launch something small but strong.&lt;/p&gt;

&lt;p&gt;When designing architectures for new platforms, we typically aim for:&lt;br&gt;
    • Modular backend systems&lt;br&gt;
    • Clean API design&lt;br&gt;
    • Component-based frontend frameworks&lt;br&gt;
    • Cloud-native infrastructure&lt;/p&gt;

&lt;p&gt;This allows products to grow without requiring a full rewrite later.&lt;/p&gt;

&lt;p&gt;⸻&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;User Experience Is a Competitive Advantage&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;The difference between successful apps and forgotten apps often comes down to UX.&lt;/p&gt;

&lt;p&gt;Great software should feel:&lt;br&gt;
    • Fast&lt;br&gt;
    • Intuitive&lt;br&gt;
    • Effortless&lt;/p&gt;

&lt;p&gt;This means developers need to think beyond functionality and consider:&lt;br&gt;
    • Load performance&lt;br&gt;
    • Visual hierarchy&lt;br&gt;
    • Interaction feedback&lt;br&gt;
    • Mobile responsiveness&lt;/p&gt;

&lt;p&gt;Even small improvements in usability can dramatically increase user retention.&lt;/p&gt;

&lt;p&gt;⸻&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;AI Is Changing Product Development&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Artificial intelligence is quickly becoming a core feature in many digital products.&lt;/p&gt;

&lt;p&gt;We’re seeing AI used for:&lt;br&gt;
    • Personalization&lt;br&gt;
    • Smart recommendations&lt;br&gt;
    • Natural language search&lt;br&gt;
    • Automated workflows&lt;/p&gt;

&lt;p&gt;The key is integrating AI in ways that actually improve the user experience, rather than adding it just because it’s trendy.&lt;/p&gt;

&lt;p&gt;For consumer platforms like SwiftChef, AI-driven discovery and intelligent filtering can dramatically improve how users find content.&lt;/p&gt;

&lt;p&gt;For SaaS tools, AI can automate tasks that previously required manual effort.&lt;/p&gt;

&lt;p&gt;⸻&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Speed Matters in Modern Development&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Startups and early-stage products need to move fast.&lt;/p&gt;

&lt;p&gt;This means focusing on development processes that prioritize:&lt;br&gt;
    • Rapid iteration&lt;br&gt;
    • Continuous deployment&lt;br&gt;
    • Feedback loops with real users&lt;/p&gt;

&lt;p&gt;Shipping quickly doesn’t mean sacrificing quality. It means building systems that allow you to improve the product continuously.&lt;/p&gt;

&lt;p&gt;⸻&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Collaboration Is Key to Great Products&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Great software rarely comes from one person working alone.&lt;/p&gt;

&lt;p&gt;The best products come from collaboration between:&lt;br&gt;
    • Developers&lt;br&gt;
    • Designers&lt;br&gt;
    • Product thinkers&lt;br&gt;
    • Founders&lt;br&gt;
    • Users&lt;/p&gt;

&lt;p&gt;At Al’s-Ops LLC, we work closely with teams to transform ideas into scalable digital products across areas like:&lt;br&gt;
    • Web applications&lt;br&gt;
    • E-commerce platforms&lt;br&gt;
    • AI-powered tools&lt;br&gt;
    • Gaming-related services&lt;/p&gt;

&lt;p&gt;⸻&lt;/p&gt;

&lt;p&gt;Final Thoughts&lt;/p&gt;

&lt;p&gt;The web is evolving faster than ever. New technologies appear constantly, but the fundamentals of building great products remain the same:&lt;br&gt;
    • Solve real problems&lt;br&gt;
    • Focus on the user experience&lt;br&gt;
    • Build systems that scale&lt;br&gt;
    • Iterate quickly&lt;/p&gt;

&lt;p&gt;If you’re building a new digital product or experimenting with a startup idea, these principles can help you move from concept to production more effectively.&lt;/p&gt;

&lt;p&gt;⸻&lt;/p&gt;

&lt;p&gt;About the Author&lt;/p&gt;

&lt;p&gt;Al’s-Ops LLC is a software development company building innovative web applications and digital products across gaming, e-commerce, web development, and artificial intelligence.&lt;/p&gt;

&lt;p&gt;Our flagship product, SwiftChef, is a premium recipe discovery and meal planning platform used by home cooks every day.&lt;/p&gt;

&lt;p&gt;🌐 &lt;a href="https://alsopss.com" rel="noopener noreferrer"&gt;https://alsopss.com&lt;/a&gt;&lt;br&gt;
📧 &lt;a href="mailto:b2b@alsopss.com"&gt;b2b@alsopss.com&lt;/a&gt;&lt;/p&gt;

</description>
      <category>webdev</category>
      <category>startup</category>
      <category>productivity</category>
      <category>softwaredevelopment</category>
    </item>
    <item>
      <title>metaForge: A Multi-Language Build &amp; Automation Compiler</title>
      <dc:creator>ALSOPS</dc:creator>
      <pubDate>Mon, 08 Dec 2025 17:07:22 +0000</pubDate>
      <link>https://dev.to/alsops/metaforge-a-multi-language-build-automation-compiler-251k</link>
      <guid>https://dev.to/alsops/metaforge-a-multi-language-build-automation-compiler-251k</guid>
      <description>&lt;p&gt;I’m excited to share metaForge, a multi-language MFG compiler that makes building, running, and managing code files across languages easy.&lt;br&gt;
MetaForge parses .mfg files containing groups, blocks, arguments, and raw commands, expands variables, writes code files, and executes commands automatically. It’s designed for developers who want a flexible, multi-language build system.&lt;br&gt;
📌 Key Features&lt;br&gt;
Parse .mfg files into:&lt;br&gt;
Groups: collections of blocks with variables&lt;br&gt;
Blocks: named code files with optional run commands&lt;br&gt;
Args blocks: conditional blocks triggered by CLI arguments&lt;br&gt;
Raw variables &amp;amp; commands: global scope&lt;br&gt;
Variable Expansion: $var:name, $arg, $block:name, $group:name&lt;br&gt;
Automatic File Creation &amp;amp; Execution&lt;br&gt;
Verbose Logging (-v or --verbose)&lt;br&gt;
⚙️ Supported Languages&lt;br&gt;
C++ (default, compiled, fastest)&lt;br&gt;
JavaScript (Node.js based, easy to modify)&lt;br&gt;
Python (widely accessible)&lt;br&gt;
🚀 Quick Start&lt;br&gt;
Create a .mfg file:&lt;br&gt;
group js {&lt;br&gt;
    var greeting = "Hello World!"&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;block hello.js {
    code {
        console.log("$var:greeting");
    }
    run "node $block:hello.js"
}
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;

&lt;p&gt;}&lt;/p&gt;

&lt;p&gt;run "rm -rf $group:js"&lt;br&gt;
Run metaForge:&lt;br&gt;
metaForge example.mfg&lt;br&gt;
MetaForge will create hello.js with expanded variables, run it, and clean up automatically.&lt;br&gt;
Example CLI:&lt;br&gt;
metaForge build.mfg build    # Builds and runs everything&lt;br&gt;
metaForge build.mfg clean    # Removes generated files&lt;br&gt;
📖 Documentation&lt;br&gt;
Full guides, syntax reference, and advanced examples: metaforge.alsopss.com/docs&lt;br&gt;
🛠 Installation&lt;/p&gt;

&lt;h1&gt;
  
  
  Build C++ version (default)
&lt;/h1&gt;

&lt;p&gt;make build&lt;/p&gt;

&lt;h1&gt;
  
  
  Build JS or Python versions
&lt;/h1&gt;

&lt;p&gt;make build LANG=js&lt;br&gt;
make build LANG=py&lt;/p&gt;

&lt;h1&gt;
  
  
  Install
&lt;/h1&gt;

&lt;p&gt;sudo make install LANG=cpp&lt;br&gt;
Custom installation paths and packaging are supported via PREFIX and DESTDIR.&lt;br&gt;
🤝 Contributing&lt;br&gt;
Contributions are welcome! Submit Pull Requests or open Discussions on GitHub: &lt;a href="https://github.com/ALSOPSS/metaForge" rel="noopener noreferrer"&gt;https://github.com/ALSOPSS/metaForge&lt;/a&gt;&lt;/p&gt;

</description>
      <category>programming</category>
      <category>opensource</category>
      <category>buildtools</category>
      <category>programminglanguages</category>
    </item>
  </channel>
</rss>
