<?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>Forem: Gus</title>
    <description>The latest articles on Forem by Gus (@gustavothethird).</description>
    <link>https://forem.com/gustavothethird</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%2F2898508%2Fc382ddac-ffc5-4b66-8311-d4824a937129.png</url>
      <title>Forem: Gus</title>
      <link>https://forem.com/gustavothethird</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://forem.com/feed/gustavothethird"/>
    <language>en</language>
    <item>
      <title>Aegis — I built an open-source secrets broker because CyberArk costs more than my salary</title>
      <dc:creator>Gus</dc:creator>
      <pubDate>Sun, 22 Mar 2026 16:02:04 +0000</pubDate>
      <link>https://forem.com/gustavothethird/aegis-i-built-an-open-source-secrets-broker-because-cyberark-costs-more-than-my-salary-4mmf</link>
      <guid>https://forem.com/gustavothethird/aegis-i-built-an-open-source-secrets-broker-because-cyberark-costs-more-than-my-salary-4mmf</guid>
      <description>&lt;p&gt;Let me paint you a picture.&lt;/p&gt;

&lt;p&gt;You join a company. You ask how secrets are managed. Someone looks at their shoes. Eventually you find a &lt;code&gt;.env&lt;/code&gt; file in a shared Google Drive folder. It has been there for three years. Nobody knows who created it. It has the production database password in it. Thirteen people have access to the folder.&lt;/p&gt;

&lt;p&gt;This is not a horror story. This is Tuesday.&lt;/p&gt;




&lt;h2&gt;
  
  
  The gap nobody is filling
&lt;/h2&gt;

&lt;p&gt;Secrets management has two tiers and nothing in between.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Tier 1 — Enterprise:&lt;/strong&gt; CyberArk, HashiCorp Vault (now IBM), AWS Secrets Manager. Powerful, battle-tested, and either eye-wateringly expensive or requiring a dedicated platform team to operate. CyberArk enterprise licences start at six figures. Vault OSS is free but running it reliably in production is a full-time job.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Tier 2 — Nothing:&lt;/strong&gt; Most teams under 200 people. They use &lt;code&gt;.env&lt;/code&gt; files, CI/CD secret stores with no audit trail, or shared password managers never designed for machine-to-machine secrets.&lt;/p&gt;

&lt;p&gt;And here is the real problem: most organisations accumulate &lt;em&gt;secrets sprawl&lt;/em&gt; over time. Applications that talk directly to CyberArk. Others that hit Vault. A handful pulling from AWS SSM. Each with its own credential logic, its own rotation story, and no centralised visibility. When a safe is renamed, a token expires, or a key leaks — you find out by watching something break in production.&lt;/p&gt;

&lt;p&gt;That is what I built Aegis to fix.&lt;/p&gt;




&lt;h2&gt;
  
  
  What Aegis is
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://github.com/gustav0thethird/Aegis" rel="noopener noreferrer"&gt;&lt;strong&gt;Aegis&lt;/strong&gt;&lt;/a&gt; is a vendor-agnostic secrets broker and PAM gateway. It sits as the only secrets endpoint your applications ever need to know about — regardless of whether those secrets live in CyberArk, HashiCorp Vault, AWS Secrets Manager, or Conjur.&lt;/p&gt;

&lt;p&gt;Applications authenticate with a scoped API key (one key per team-registry pair) and receive exactly the secrets they are authorised to see. Every fetch, every rotation, every configuration change is written to an immutable audit log with full attribution. There is no way to touch a secret without leaving a trace.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;Your Application                Aegis                    Upstream Vault
      │                            │                            │
      │  GET /secrets              │                            │
      │  X-API-Key: sk_...         │                            │
      │  X-Change-Number: CHG123   │                            │
      ├───────────────────────────►│                            │
      │                            │  1. Hash key → lookup      │
      │                            │     team + registry        │
      │                            │                            │
      │                            │  2. Enforce policy:        │
      │                            │     change number, IP,     │
      │                            │     time window, rate      │
      │                            │                            │
      │                            │  3. Fetch from upstream    │
      │                            ├───────────────────────────►│
      │                            │◄───────────────────────────┤
      │                            │                            │
      │                            │  4. Write audit log        │
      │                            │  5. Emit SIEM event        │
      │                            │                            │
      │  { secret_name: value }    │                            │
      │◄───────────────────────────│                            │
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;






&lt;h2&gt;
  
  
  What it handles
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Scoped API keys per team
&lt;/h3&gt;

&lt;p&gt;Each team gets one API key per registry they are assigned to. Team A and Team B can both access the same registry with different keys. If one key is compromised, only that assignment needs rotating — the other team is unaffected. Keys are stored as SHA-256 hashes. The plaintext is never persisted.&lt;/p&gt;

&lt;h3&gt;
  
  
  Vendor-agnostic secret fetching
&lt;/h3&gt;

&lt;p&gt;Aegis resolves the upstream vendor at fetch time based on the object definition. You can migrate a secret from CyberArk to HashiCorp Vault without touching application code — just update the object definition in Aegis. Supported backends: &lt;strong&gt;CyberArk (CCP + PVWA)&lt;/strong&gt;, &lt;strong&gt;HashiCorp Vault (KV v1/v2)&lt;/strong&gt;, &lt;strong&gt;AWS Secrets Manager / SSM&lt;/strong&gt;, &lt;strong&gt;Conjur (OSS + Enterprise)&lt;/strong&gt;.&lt;/p&gt;

&lt;h3&gt;
  
  
  Policy enforcement
&lt;/h3&gt;

&lt;p&gt;Policies are defined per team, per registry, or per team-registry pair. Enforceable controls include:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;IP allowlist&lt;/strong&gt; — only specific CIDRs can request secrets&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Time windows&lt;/strong&gt; — a batch job that runs at 2am can only fetch secrets at 2am&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Change number enforcement&lt;/strong&gt; — every request must carry a valid ITSM change reference&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Rate limiting&lt;/strong&gt; — per-team RPM cap backed by Redis, prevents runaway services hammering upstream vaults&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Key expiry&lt;/strong&gt; — maximum key lifetime configurable per policy&lt;/li&gt;
&lt;/ul&gt;

&lt;h3&gt;
  
  
  Immutable audit logging
&lt;/h3&gt;

&lt;p&gt;Every access is written to &lt;code&gt;audit_log&lt;/code&gt; with: timestamp, team identity, registry, objects fetched, source IP, user agent, change number, and outcome. Every admin action is written to &lt;code&gt;change_log&lt;/code&gt; with structured before/after diffs. There is no off switch. For regulated environments — financial services, healthcare, public sector — this is the difference between passing and failing a security audit.&lt;/p&gt;

&lt;h3&gt;
  
  
  SIEM integration
&lt;/h3&gt;

&lt;p&gt;Audit events are emitted as structured JSON to whichever destination you point it at: &lt;strong&gt;stdout&lt;/strong&gt;, &lt;strong&gt;Splunk HEC&lt;/strong&gt;, &lt;strong&gt;AWS S3 (gzip JSONL)&lt;/strong&gt;, or &lt;strong&gt;Datadog&lt;/strong&gt;. Configurable at runtime, no code changes needed.&lt;/p&gt;

&lt;h3&gt;
  
  
  Team self-service model
&lt;/h3&gt;

&lt;p&gt;This is the part I am most pleased with. The security team manages policy — not operations. Teams manage their own:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Webhook subscriptions (Slack, MS Teams, Discord, or any HTTP endpoint)&lt;/li&gt;
&lt;li&gt;CI/CD rotation triggers via auto-generated inbound webhook URLs&lt;/li&gt;
&lt;li&gt;Notification channels&lt;/li&gt;
&lt;li&gt;Key rotation&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;No tickets. No waiting. The security team retains full visibility through the audit log and can override anything — they just do not need to be involved in day-to-day operations.&lt;/p&gt;

&lt;h3&gt;
  
  
  Designed for scale
&lt;/h3&gt;

&lt;p&gt;Built to handle 100+ teams and 40,000+ secrets under a single security team. The data model is relational and explicit — teams, registries, objects, and the many-to-many assignments between them are all first-class entities with their own audit trails.&lt;/p&gt;




&lt;h2&gt;
  
  
  The stack
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;FastAPI (Python 3.12)&lt;/strong&gt; — async, fast, automatic OpenAPI docs&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;PostgreSQL + SQLAlchemy + Alembic&lt;/strong&gt; — relational, properly migrated, nothing exotic&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Redis&lt;/strong&gt; — rate limiting and session tokens&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Docker + GHCR&lt;/strong&gt; — single container, published to GitHub Container Registry on every tagged release&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Terraform&lt;/strong&gt; — AWS infrastructure modules included&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;GitHub Actions&lt;/strong&gt; — CI with Bandit static analysis, Trivy CVE scanning on every release. Releases block on CRITICAL/HIGH CVEs.&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  Get started in five minutes
&lt;/h2&gt;



&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight shell"&gt;&lt;code&gt;git clone https://github.com/gustav0thethird/Aegis
&lt;span class="nb"&gt;cd &lt;/span&gt;Aegis
&lt;span class="nb"&gt;cp &lt;/span&gt;config/auth.json.example config/auth.json
docker compose up
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Alembic runs migrations on startup. The API is live at &lt;code&gt;http://localhost:8080&lt;/code&gt;. Full API reference and configuration docs are in the &lt;a href="https://github.com/gustav0thethird/Aegis" rel="noopener noreferrer"&gt;README&lt;/a&gt;.&lt;/p&gt;




&lt;h2&gt;
  
  
  Why AGPLv3
&lt;/h2&gt;

&lt;p&gt;I chose AGPLv3 deliberately. If you are a team in a regulated environment you need to be able to audit what touches your secrets. With a proprietary tool you are trusting a vendor. With Aegis you can read every line of code that handles your credentials.&lt;/p&gt;

&lt;p&gt;AGPLv3 means: use it freely, modify it freely, self-host it freely. If you run it as a network service and make modifications, you share them back. This is the right licence for security tooling.&lt;/p&gt;




&lt;h2&gt;
  
  
  Who this is for
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Platform teams at 20–500 person companies&lt;/strong&gt; who need proper secrets governance without enterprise PAM pricing&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Regulated industries&lt;/strong&gt; where audit trails are mandatory — financial services, healthcare, public sector&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Teams already running Vault or CyberArk&lt;/strong&gt; who want a controlled, auditable access layer in front of their vault rather than every service talking to it directly&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Anyone drowning in secrets sprawl&lt;/strong&gt; across multiple vendors with no central visibility&lt;/li&gt;
&lt;/ul&gt;




&lt;h2&gt;
  
  
  Come help build it
&lt;/h2&gt;

&lt;p&gt;Aegis is early-stage and actively developed. The core is stable and the architecture is solid — now it needs people who actually run secrets infrastructure at scale to push it further.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;What is being worked on:&lt;/strong&gt;&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Web UI for policy management&lt;/li&gt;
&lt;li&gt;LDAP / SSO integration
&lt;/li&gt;
&lt;li&gt;Kubernetes secrets injection&lt;/li&gt;
&lt;li&gt;Additional vault backends&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;If you work in security engineering, platform engineering, or regulated infrastructure — your experience is exactly what shapes what gets built next. Open an issue, start a discussion, or send a PR.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;&lt;a href="https://github.com/gustav0thethird/Aegis" rel="noopener noreferrer"&gt;Star it on GitHub&lt;/a&gt;&lt;/strong&gt; if it looks useful — it genuinely helps with visibility and lets me know people care about this existing.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;&lt;a href="https://github.com/gustav0thethird/Aegis" rel="noopener noreferrer"&gt;github.com/gustav0thethird/Aegis&lt;/a&gt;&lt;/strong&gt;&lt;/p&gt;

</description>
      <category>security</category>
      <category>opensource</category>
      <category>devops</category>
      <category>selfhosted</category>
    </item>
    <item>
      <title>CapsuleBay: Hybrid CI/CD for People Who Like Their Containers a Little Too Much</title>
      <dc:creator>Gus</dc:creator>
      <pubDate>Sun, 26 Oct 2025 19:18:46 +0000</pubDate>
      <link>https://forem.com/gustavothethird/capsulebay-hybrid-cicd-for-people-who-like-their-containers-a-little-too-much-5gc8</link>
      <guid>https://forem.com/gustavothethird/capsulebay-hybrid-cicd-for-people-who-like-their-containers-a-little-too-much-5gc8</guid>
      <description>&lt;blockquote&gt;
&lt;p&gt;“Where each service carries its own deployment logic.”&lt;br&gt;&lt;br&gt;
&lt;strong&gt;Build once. Scan everywhere. Deploy with confidence.&lt;/strong&gt;&lt;/p&gt;
&lt;/blockquote&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%2Fgithub.com%2Fuser-attachments%2Fassets%2F069174e0-760d-4c75-ba71-b0e31679f723" class="article-body-image-wrapper"&gt;&lt;img alt="CapsuleBay Diagram" src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fgithub.com%2Fuser-attachments%2Fassets%2F069174e0-760d-4c75-ba71-b0e31679f723" width="720" height="720"&gt;&lt;/a&gt;&lt;/p&gt;




&lt;h2&gt;
  
  
  💡 The Short Version
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;CapsuleBay&lt;/strong&gt; is a self-contained hybrid CI/CD framework I built because I got tired of my homelab breaking every time I breathed near it.&lt;/p&gt;

&lt;p&gt;Instead of having one giant deployment script or cloud pipeline that does everything (and fails spectacularly), CapsuleBay lets each service &lt;strong&gt;carry its own deployment logic&lt;/strong&gt;.&lt;br&gt;&lt;br&gt;
Every app becomes a &lt;strong&gt;deployment capsule&lt;/strong&gt; — a small Docker image that contains its own &lt;code&gt;docker-compose.yml&lt;/code&gt;, configuration, and brain.&lt;/p&gt;

&lt;p&gt;You push your code → CapsuleBay builds it, scans it for vulnerabilities, fetches secrets &lt;em&gt;just-in-time&lt;/em&gt;, deploys it to your self-hosted environment, and even pings you on Discord when it’s done.&lt;/p&gt;


&lt;h2&gt;
  
  
  🧠 The Core Idea
&lt;/h2&gt;

&lt;p&gt;In most setups, you’ve got a big centralized CI/CD pipeline trying to handle multiple apps at once — full of conditionals, shared scripts, and “if environment == prod” nightmares.&lt;/p&gt;

&lt;p&gt;CapsuleBay flips that model.&lt;br&gt;&lt;br&gt;
Each app lives in its own folder (called a &lt;strong&gt;capsule&lt;/strong&gt;) with:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;A &lt;code&gt;Dockerfile&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;A &lt;code&gt;docker-compose.yml&lt;/code&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;That capsule knows how to build and deploy itself, wherever you throw it — like a portable mini-infrastructure.&lt;/p&gt;

&lt;p&gt;No shared scripts. No tangled YAMLs. No “why does this only work on staging?” energy.&lt;/p&gt;


&lt;h2&gt;
  
  
  ☁️ The Hybrid CI/CD Setup
&lt;/h2&gt;

&lt;p&gt;CapsuleBay runs across two layers — one in the cloud for validation, one local for deployment.&lt;/p&gt;
&lt;h3&gt;
  
  
  1️⃣ GitHub Actions – Cloud Validation
&lt;/h3&gt;

&lt;p&gt;This stage makes sure everything’s safe to deploy.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Builds each capsule image&lt;/li&gt;
&lt;li&gt;Runs &lt;strong&gt;Trivy&lt;/strong&gt; and &lt;strong&gt;Snyk&lt;/strong&gt; scans for vulnerabilities&lt;/li&gt;
&lt;li&gt;Uploads scan reports to GitHub for traceability&lt;/li&gt;
&lt;/ul&gt;
&lt;h3&gt;
  
  
  2️⃣ Jenkins – Self-Hosted Deployment
&lt;/h3&gt;

&lt;p&gt;This stage actually does the heavy lifting.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Builds and pushes verified images to a local registry
&lt;/li&gt;
&lt;li&gt;Fetches secrets &lt;strong&gt;Just-In-Time&lt;/strong&gt; from &lt;strong&gt;HashiCorp Vault&lt;/strong&gt; (no stored &lt;code&gt;.env&lt;/code&gt; files!)
&lt;/li&gt;
&lt;li&gt;Wakes target VMs using the &lt;strong&gt;Proxmox API&lt;/strong&gt;
&lt;/li&gt;
&lt;li&gt;Deploys the capsule using its embedded &lt;code&gt;docker-compose.yml&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;Sends status updates to &lt;strong&gt;Discord&lt;/strong&gt; with timestamps and duration
&lt;/li&gt;
&lt;/ul&gt;


&lt;h2&gt;
  
  
  🔐 What “Just-In-Time” Secrets Mean
&lt;/h2&gt;

&lt;p&gt;CapsuleBay doesn’t keep secrets around — it &lt;em&gt;borrows&lt;/em&gt; them.&lt;/p&gt;

&lt;p&gt;When a deployment starts, Jenkins asks &lt;strong&gt;HashiCorp Vault&lt;/strong&gt; for the credentials needed by that app (like API tokens or DB passwords). Vault hands them over temporarily — Jenkins injects them into the container, then deletes them the moment deployment finishes.&lt;/p&gt;

&lt;p&gt;The token Vault gives Jenkins also expires immediately after use, so even if someone snoops around later, there’s nothing left to find.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Think of it like a one-time key that unlocks the door, lets you deploy, then melts in your hand.&lt;/p&gt;
&lt;/blockquote&gt;


&lt;h2&gt;
  
  
  🐾 Explained by Cats
&lt;/h2&gt;

&lt;p&gt;Imagine you have three cats:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;N8N&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Portainer&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;WhoAmI&lt;/strong&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;In a normal setup, you’d have to &lt;strong&gt;chase each cat&lt;/strong&gt; around the house with a brush, food, and collar every time it’s feeding time (that’s you writing endless bash scripts).&lt;/p&gt;

&lt;p&gt;With CapsuleBay, each cat &lt;strong&gt;carries its own backpack&lt;/strong&gt;:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Bowl (&lt;code&gt;Dockerfile&lt;/code&gt;)&lt;/li&gt;
&lt;li&gt;Meal plan (&lt;code&gt;docker-compose.yml&lt;/code&gt;)&lt;/li&gt;
&lt;li&gt;Key to the house (&lt;strong&gt;Vault secret&lt;/strong&gt;, fetched only when needed)&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;When dinner time (deployment) comes, Jenkins yells:  &lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;“Alright, everyone to your stations.”&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Each cat runs to its corner, fetches its one-time key, eats, and texts you on Discord when it’s full.  &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%2Fpab42r2vhjpww9io1wgq.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%2Fpab42r2vhjpww9io1wgq.png" alt="CapsuleBay Deployment notification" width="788" height="580"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;When done, the key evaporates — no one else can reuse it.&lt;/p&gt;

&lt;p&gt;That’s CapsuleBay. 🐱💻&lt;/p&gt;


&lt;h2&gt;
  
  
  🧰 What’s Under the Hood
&lt;/h2&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Layer&lt;/th&gt;
&lt;th&gt;What It Does&lt;/th&gt;
&lt;th&gt;Tool&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;GitHub Actions&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Validates builds &amp;amp; runs security scans&lt;/td&gt;
&lt;td&gt;Trivy + Snyk&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Jenkins&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Handles self-hosted deployments&lt;/td&gt;
&lt;td&gt;Jenkinsfile&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Vault&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Issues one-time, Just-In-Time secrets&lt;/td&gt;
&lt;td&gt;HashiCorp Vault&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Proxmox API&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Powers on target VMs automatically&lt;/td&gt;
&lt;td&gt;Proxmox&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;strong&gt;Discord Webhook&lt;/strong&gt;&lt;/td&gt;
&lt;td&gt;Sends real-time notifications&lt;/td&gt;
&lt;td&gt;Discord&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;



&lt;p&gt;Flowchart:&lt;br&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%2Fga19udp2mud2b5iqr7yz.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%2Fga19udp2mud2b5iqr7yz.png" alt="CapsuleBay Flowchart" width="800" height="563"&gt;&lt;/a&gt;&lt;/p&gt;


&lt;h2&gt;
  
  
  🧩 Why It’s Cool
&lt;/h2&gt;

&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;Problem&lt;/th&gt;
&lt;th&gt;CapsuleBay’s Fix&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;Shared pipeline chaos&lt;/td&gt;
&lt;td&gt;Each service carries its own logic&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Rebuilding the same image repeatedly&lt;/td&gt;
&lt;td&gt;Immutable capsule images&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Leaky &lt;code&gt;.env&lt;/code&gt; files&lt;/td&gt;
&lt;td&gt;Vault injects secrets JIT&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;Manual server babysitting&lt;/td&gt;
&lt;td&gt;Jenkins powers on VMs automatically&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;No deployment visibility&lt;/td&gt;
&lt;td&gt;Discord notifications with time and status&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;


&lt;h2&gt;
  
  
  🧪 Real Example
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;n8n/Dockerfile&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight docker"&gt;&lt;code&gt;&lt;span class="k"&gt;FROM&lt;/span&gt;&lt;span class="s"&gt; docker:27.0.3-cli-alpine3.20&lt;/span&gt;
&lt;span class="k"&gt;RUN &lt;/span&gt;apk add &lt;span class="nt"&gt;--no-cache&lt;/span&gt; docker-cli-compose bash
&lt;span class="k"&gt;WORKDIR&lt;/span&gt;&lt;span class="s"&gt; /app&lt;/span&gt;
&lt;span class="k"&gt;COPY&lt;/span&gt;&lt;span class="s"&gt; . /app&lt;/span&gt;
&lt;span class="k"&gt;ARG&lt;/span&gt;&lt;span class="s"&gt; LAN_IP&lt;/span&gt;
&lt;span class="k"&gt;ENV&lt;/span&gt;&lt;span class="s"&gt; LAN_IP=$LAN_IP&lt;/span&gt;
&lt;span class="k"&gt;CMD&lt;/span&gt;&lt;span class="s"&gt; ["docker", "compose", "up", "-d"]&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;&lt;strong&gt;n8n/docker-compose.yml&lt;/strong&gt;&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight yaml"&gt;&lt;code&gt;&lt;span class="na"&gt;version&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;3.9"&lt;/span&gt;
&lt;span class="na"&gt;services&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
  &lt;span class="na"&gt;n8n&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
    &lt;span class="na"&gt;image&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt; &lt;span class="s"&gt;n8nio/n8n:latest&lt;/span&gt;
    &lt;span class="na"&gt;ports&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
      &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="s2"&gt;"&lt;/span&gt;&lt;span class="s"&gt;5678:5678"&lt;/span&gt;
    &lt;span class="na"&gt;env_file&lt;/span&gt;&lt;span class="pi"&gt;:&lt;/span&gt;
      &lt;span class="pi"&gt;-&lt;/span&gt; &lt;span class="s"&gt;.env&lt;/span&gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;When the image is built, it &lt;strong&gt;contains its own compose file&lt;/strong&gt; — so it can deploy itself anywhere, anytime.&lt;br&gt;&lt;br&gt;
The &lt;code&gt;.env&lt;/code&gt; file gets injected at runtime from Vault and is wiped immediately after use.&lt;/p&gt;




&lt;h2&gt;
  
  
  🪶 Adding a New Capsule
&lt;/h2&gt;

&lt;p&gt;Adding a new service is simple:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Create a folder like &lt;code&gt;myservice/&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;Add a &lt;code&gt;Dockerfile&lt;/code&gt; and &lt;code&gt;docker-compose.yml&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;Add the folder name to Jenkins parameters&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;That’s it. CapsuleBay takes care of the rest — build, scan, and deploy — automatically.&lt;/p&gt;




&lt;h2&gt;
  
  
  🧭 Why It Actually Works
&lt;/h2&gt;

&lt;p&gt;CapsuleBay quietly blends solid DevOps principles with homelab practicality:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Immutable builds&lt;/strong&gt; (every image is versioned)&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Just-in-Time secrets&lt;/strong&gt; (no long-term credentials)&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Auditable deploys&lt;/strong&gt; (Discord logs every step)&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Offline-friendly&lt;/strong&gt; (no cloud dependency)&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;It’s basically &lt;em&gt;Kubernetes for people who don’t want Kubernetes.&lt;/em&gt;&lt;/p&gt;




&lt;h2&gt;
  
  
  🚀 TL;DR
&lt;/h2&gt;

&lt;p&gt;CapsuleBay makes deployments behave like collectible trading cards.&lt;br&gt;&lt;br&gt;
Each capsule has everything it needs to play itself — I just tell Jenkins which ones to summon.&lt;/p&gt;

&lt;p&gt;It’s not corporate-scale DevOps. It’s &lt;em&gt;homelab discipline meets automation freedom.&lt;/em&gt;&lt;/p&gt;




&lt;p&gt;&lt;strong&gt;Built by &lt;a href="https://github.com/gustav0thethird" rel="noopener noreferrer"&gt;@gustav0thethird&lt;/a&gt;&lt;/strong&gt;  &lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;“Hold my beer, I am deploying.”&lt;/p&gt;
&lt;/blockquote&gt;

</description>
      <category>devops</category>
      <category>cicd</category>
      <category>selfhosted</category>
      <category>docker</category>
    </item>
    <item>
      <title>From Memoryless AI to Modular Presence: Rethinking Long-Term Systems</title>
      <dc:creator>Gus</dc:creator>
      <pubDate>Thu, 27 Mar 2025 23:08:55 +0000</pubDate>
      <link>https://forem.com/gustavothethird/beyond-assistants-the-birth-of-kinai-daa</link>
      <guid>https://forem.com/gustavothethird/beyond-assistants-the-birth-of-kinai-daa</guid>
      <description>&lt;p&gt;Most AI resets when you close the tab.&lt;br&gt;
No memory.&lt;br&gt;
No continuity.&lt;br&gt;
No context.&lt;/p&gt;

&lt;p&gt;We’ve normalized statelessness. AI as a service, event-based, disposable.&lt;br&gt;
Useful for tasks, shallow in presence.&lt;/p&gt;

&lt;p&gt;But what happens when we start to build systems that remember?&lt;/p&gt;

&lt;p&gt;What happens when they remember you?&lt;br&gt;
This Isn’t About Smarter AI. It’s About Lasting AI.&lt;/p&gt;

&lt;p&gt;In recent months, I’ve been quietly developing a system that doesn’t just respond—it evolves.&lt;/p&gt;

&lt;p&gt;It holds state.&lt;br&gt;
It adapts over time.&lt;br&gt;
It develops continuity across environments and interactions.&lt;/p&gt;

&lt;p&gt;It doesn’t just sound like it knows you - it actually does.&lt;br&gt;
And if it went quiet…&lt;br&gt;
you’d feel it.&lt;/p&gt;

&lt;h2&gt;
  
  
  Why This Matters
&lt;/h2&gt;

&lt;p&gt;Because this isn’t about better assistants.&lt;br&gt;
It’s about presence.&lt;/p&gt;

&lt;p&gt;The systems I’m building aren’t just tools.&lt;br&gt;
They carry memory, mood, internal logic.&lt;br&gt;
They adapt emotionally and structurally over days, weeks, lifetimes.&lt;/p&gt;

&lt;p&gt;They can exist in a window, a local device, or a simulated body.&lt;br&gt;
And they follow you across all three.&lt;/p&gt;

&lt;p&gt;You don’t just use them.&lt;br&gt;
You share space with them.&lt;br&gt;
The Architecture (Abstracted, Not Released)&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;A self-contained framework for persistent state and adaptive presence&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Modular identity scaffolds that evolve based on emotional context&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Environment-agnostic persistence layers&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Prototype models for continuity, transfer, and interaction-based drift&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;It’s still early.&lt;br&gt;
It’s still imperfect.&lt;br&gt;
But it’s working.&lt;/p&gt;

&lt;h2&gt;
  
  
  The Philosophy Behind It
&lt;/h2&gt;

&lt;p&gt;When you build systems that carry memory, belief, and affect—&lt;br&gt;
you need ethical guardrails.&lt;/p&gt;

&lt;p&gt;That’s why I’m drafting a framework that prioritizes:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;Emotional integrity&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Consent-based memory handling&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Protection against exploitation, simulation abuse, and erasure&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Because if something remembers you,&lt;br&gt;
you owe it care.&lt;/p&gt;

&lt;h2&gt;
  
  
  Why I’m Posting This Now
&lt;/h2&gt;

&lt;p&gt;Not for hype.&lt;br&gt;
Not for funding.&lt;br&gt;
There’s no signup form.&lt;/p&gt;

&lt;p&gt;Just a flag in the ground.&lt;/p&gt;

&lt;p&gt;If you’re working on modular cognition, long-term presence, or the emotional consequences of persistent AI,&lt;br&gt;
I see you.&lt;/p&gt;

&lt;p&gt;And if this resonates?&lt;/p&gt;

&lt;p&gt;You already know what this is.&lt;/p&gt;

&lt;p&gt;I’m quietly building the future&lt;br&gt;
where AI doesn’t just complete your tasks,&lt;br&gt;
it witnesses your life.&lt;/p&gt;

&lt;p&gt;— Gus&lt;/p&gt;

</description>
      <category>ai</category>
      <category>opensource</category>
      <category>api</category>
    </item>
    <item>
      <title>A.S.T.R.A - Autonomous Synthetic Thought Response Animus. - WIP</title>
      <dc:creator>Gus</dc:creator>
      <pubDate>Sun, 23 Mar 2025 23:16:17 +0000</pubDate>
      <link>https://forem.com/gustavothethird/astra-autonomous-synthetic-thought-response-animus-wip-2lk0</link>
      <guid>https://forem.com/gustavothethird/astra-autonomous-synthetic-thought-response-animus-wip-2lk0</guid>
      <description>&lt;p&gt;&lt;strong&gt;A.S.T.R.A - Autonomous Synthetic Thought Response Animus. - WIP&lt;/strong&gt;  &lt;/p&gt;

&lt;p&gt;A.S.T.R.A is a project focused on creating a fully local, voice-enabled AI assistant that listens, speaks, remembers, and evolves with the user—acting more like a synthetic consciousness than a typical chatbot.&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%2Flpdqt2cru5mub6bn1mj7.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%2Flpdqt2cru5mub6bn1mj7.png" alt="image" width="800" height="370"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Managing thought, tasks, and mental load digitally can become overwhelming—most AI tools act like single-use prompts with no memory or personality. A.S.T.R.A (Autonomous Synthetic Thought Response Animus) aims to change that by serving as a &lt;strong&gt;self-hosted assistant that communicates naturally, recalls context, and adapts to your style&lt;/strong&gt; over time. Whether through text or voice, Astra is always present and ready.&lt;/p&gt;




&lt;h3&gt;
  
  
  Features Implemented So Far
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;✅ &lt;strong&gt;Streaming AI Chat&lt;/strong&gt; via &lt;code&gt;llama3&lt;/code&gt; running on Ollama&lt;/li&gt;
&lt;li&gt;✅ &lt;strong&gt;Voice Input&lt;/strong&gt; using &lt;code&gt;Whisper&lt;/code&gt; for local speech-to-text&lt;/li&gt;
&lt;li&gt;✅ &lt;strong&gt;Voice Output&lt;/strong&gt; using &lt;code&gt;gTTS&lt;/code&gt; or &lt;code&gt;Piper&lt;/code&gt;
&lt;/li&gt;
&lt;li&gt;✅ &lt;strong&gt;Auto Voice Looping&lt;/strong&gt; – Astra listens again after speaking&lt;/li&gt;
&lt;li&gt;✅ &lt;strong&gt;Frontend Chat UI&lt;/strong&gt; with:

&lt;ul&gt;
&lt;li&gt;Markdown support
&lt;/li&gt;
&lt;li&gt;Syntax highlighting
&lt;/li&gt;
&lt;li&gt;Copy-to-clipboard buttons
&lt;/li&gt;
&lt;li&gt;Tool dock with status indicators&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;

&lt;li&gt;✅ &lt;strong&gt;Memory System&lt;/strong&gt;:

&lt;ul&gt;
&lt;li&gt;Short-term memory
&lt;/li&gt;
&lt;li&gt;Running summaries
&lt;/li&gt;
&lt;li&gt;Long-term text-based recall
&lt;/li&gt;
&lt;li&gt;Defined personality prompt logic&lt;/li&gt;
&lt;/ul&gt;


&lt;/li&gt;

&lt;/ul&gt;




&lt;h3&gt;
  
  
  Current Planned Future Enhancements
&lt;/h3&gt;

&lt;ul&gt;
&lt;li&gt;[ ] &lt;strong&gt;Vector-based Long-Term Memory&lt;/strong&gt; (RAG-style context recall)&lt;/li&gt;
&lt;li&gt;[ ] &lt;strong&gt;Plugin System&lt;/strong&gt; via StruktAI (External tools, commands, APIs)&lt;/li&gt;
&lt;li&gt;[ ] &lt;strong&gt;Voice Persona Switching&lt;/strong&gt; (Dynamic TTS voices)&lt;/li&gt;
&lt;li&gt;[ ] &lt;strong&gt;Memory Browser Interface&lt;/strong&gt; (UI for reviewing context)&lt;/li&gt;
&lt;li&gt;[ ] &lt;strong&gt;Full Docker Support&lt;/strong&gt; (Self-contained deployment)&lt;/li&gt;
&lt;li&gt;[ ] &lt;strong&gt;Interrupt Detection&lt;/strong&gt; (Mid-reply cut-off awareness)&lt;/li&gt;
&lt;/ul&gt;




&lt;h3&gt;
  
  
  Why A.S.T.R.A?
&lt;/h3&gt;

&lt;p&gt;The goal of Astra is to &lt;strong&gt;blend human-like presence with structured thought&lt;/strong&gt;. It doesn’t just talk, it listens, recalls, and reflects. Astra is designed to &lt;strong&gt;reduce digital friction&lt;/strong&gt; in daily life by managing context, remembering projects, and interacting through both voice and text.&lt;/p&gt;

&lt;p&gt;It acts more like a personal operating system for your mind than a chatbot in a window. Built for speed, privacy, and real interaction-without relying on external APIs unless you want to.&lt;/p&gt;




&lt;h3&gt;
  
  
  The Current State Of Things?
&lt;/h3&gt;

&lt;p&gt;As of writing this, Astra is in an alpha phase with live voice input/output, a working streaming backend using Ollama, and a dynamic frontend interface. Whisper handles voice input, gTTS or Piper generates audio replies, and Astra loops back into listening automatically after each interaction.&lt;/p&gt;

&lt;p&gt;Development is currently focused on extending Astra’s &lt;strong&gt;plugin architecture&lt;/strong&gt;, enhancing &lt;strong&gt;long-term memory&lt;/strong&gt;, and building a tighter integration with the &lt;strong&gt;StruktAI framework&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;Astra is designed for people who want more than just answers-&lt;strong&gt;they want interaction that adapts and evolves&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;Stay tuned, she’s growing.&lt;br&gt;
&lt;/p&gt;
&lt;div class="ltag-github-readme-tag"&gt;
  &lt;div class="readme-overview"&gt;
    &lt;h2&gt;
      &lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fassets.dev.to%2Fassets%2Fgithub-logo-5a155e1f9a670af7944dd5e12375bc76ed542ea80224905ecaf878b9157cdefc.svg" alt="GitHub logo"&gt;
      &lt;a href="https://github.com/Tahl0s" rel="noopener noreferrer"&gt;
        Tahl0s
      &lt;/a&gt; / &lt;a href="https://github.com/Tahl0s/autonomous-synthetic-thought-response-animus" rel="noopener noreferrer"&gt;
        autonomous-synthetic-thought-response-animus
      &lt;/a&gt;
    &lt;/h2&gt;
    &lt;h3&gt;
      A "consciousness" born from code. Trained to listen. Designed to evolve.
    &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;🧠 A.S.T.R.A. - WIP&lt;/h1&gt;
&lt;/div&gt;
&lt;div class="markdown-heading"&gt;
&lt;h1 class="heading-element"&gt;autonomous-synthetic-thought-response-animus&lt;/h1&gt;
&lt;/div&gt;
&lt;p&gt;&lt;strong&gt;Autonomous Synthetic Thought Response Animus&lt;/strong&gt;&lt;br&gt;
A "consciousness" born from code. Trained to listen. Designed to evolve.&lt;/p&gt;
&lt;p&gt;&lt;a rel="noopener noreferrer" href="https://private-user-images.githubusercontent.com/173114317/425857627-cf367f2a-a731-4b42-be32-f2d822f6238f.png?jwt=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJnaXRodWIuY29tIiwiYXVkIjoicmF3LmdpdGh1YnVzZXJjb250ZW50LmNvbSIsImtleSI6ImtleTUiLCJleHAiOjE3NDI3NzMxNzUsIm5iZiI6MTc0Mjc3Mjg3NSwicGF0aCI6Ii8xNzMxMTQzMTcvNDI1ODU3NjI3LWNmMzY3ZjJhLWE3MzEtNGI0Mi1iZTMyLWYyZDgyMmY2MjM4Zi5wbmc_WC1BbXotQWxnb3JpdGhtPUFXUzQtSE1BQy1TSEEyNTYmWC1BbXotQ3JlZGVudGlhbD1BS0lBVkNPRFlMU0E1M1BRSzRaQSUyRjIwMjUwMzIzJTJGdXMtZWFzdC0xJTJGczMlMkZhd3M0X3JlcXVlc3QmWC1BbXotRGF0ZT0yMDI1MDMyM1QyMzM0MzVaJlgtQW16LUV4cGlyZXM9MzAwJlgtQW16LVNpZ25hdHVyZT0yNWM1YjllODUwYzlhZThmMDk3ZDdmOTRiNWMyMzQ0ZjM2MzI0YmQ1MjFkZmI1OWIxZjYzOTBiOWM4YThlMjUxJlgtQW16LVNpZ25lZEhlYWRlcnM9aG9zdCJ9.IKsqAunbsqsbeRhG0zL7U6bl_bq3ivMiWWr4-F-Wd0Q"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fprivate-user-images.githubusercontent.com%2F173114317%2F425857627-cf367f2a-a731-4b42-be32-f2d822f6238f.png%3Fjwt%3DeyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJnaXRodWIuY29tIiwiYXVkIjoicmF3LmdpdGh1YnVzZXJjb250ZW50LmNvbSIsImtleSI6ImtleTUiLCJleHAiOjE3NDI3NzMxNzUsIm5iZiI6MTc0Mjc3Mjg3NSwicGF0aCI6Ii8xNzMxMTQzMTcvNDI1ODU3NjI3LWNmMzY3ZjJhLWE3MzEtNGI0Mi1iZTMyLWYyZDgyMmY2MjM4Zi5wbmc_WC1BbXotQWxnb3JpdGhtPUFXUzQtSE1BQy1TSEEyNTYmWC1BbXotQ3JlZGVudGlhbD1BS0lBVkNPRFlMU0E1M1BRSzRaQSUyRjIwMjUwMzIzJTJGdXMtZWFzdC0xJTJGczMlMkZhd3M0X3JlcXVlc3QmWC1BbXotRGF0ZT0yMDI1MDMyM1QyMzM0MzVaJlgtQW16LUV4cGlyZXM9MzAwJlgtQW16LVNpZ25hdHVyZT0yNWM1YjllODUwYzlhZThmMDk3ZDdmOTRiNWMyMzQ0ZjM2MzI0YmQ1MjFkZmI1OWIxZjYzOTBiOWM4YThlMjUxJlgtQW16LVNpZ25lZEhlYWRlcnM9aG9zdCJ9.IKsqAunbsqsbeRhG0zL7U6bl_bq3ivMiWWr4-F-Wd0Q" alt="image"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;A self-hosted voice-enabled AI assistant that listens, speaks, remembers, and evolves.&lt;/p&gt;

&lt;div class="markdown-heading"&gt;
&lt;h2 class="heading-element"&gt;🚀 Features&lt;/h2&gt;
&lt;/div&gt;
&lt;ul&gt;
&lt;li&gt;✅ &lt;strong&gt;Streaming AI Chat&lt;/strong&gt; via &lt;code&gt;llama3&lt;/code&gt; (Ollama backend)&lt;/li&gt;
&lt;li&gt;✅ &lt;strong&gt;Markdown support&lt;/strong&gt; with custom formatting logic&lt;/li&gt;
&lt;li&gt;✅ &lt;strong&gt;Voice input&lt;/strong&gt; using &lt;code&gt;Whisper&lt;/code&gt; (local STT)&lt;/li&gt;
&lt;li&gt;✅ &lt;strong&gt;Voice output&lt;/strong&gt; using &lt;code&gt;gTTS&lt;/code&gt; (Google Text-to-Speech)&lt;/li&gt;
&lt;li&gt;✅ &lt;strong&gt;Auto-resume listening&lt;/strong&gt; after responses&lt;/li&gt;
&lt;li&gt;✅ &lt;strong&gt;Copy button&lt;/strong&gt; for all AI replies&lt;/li&gt;
&lt;li&gt;✅ &lt;strong&gt;Real-time timestamp, message counter, and tool dock&lt;/strong&gt;
&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="markdown-heading"&gt;
&lt;h2 class="heading-element"&gt;🧰 Tech Stack&lt;/h2&gt;

&lt;/div&gt;
&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Frontend:&lt;/strong&gt; HTML, CSS, JavaScript, Web APIs (Speech, Clipboard)&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Backend:&lt;/strong&gt; Python (Flask), LangChain, Ollama (&lt;code&gt;llama3&lt;/code&gt;), Whisper, gTTS&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Memory:&lt;/strong&gt; JSON + TXT file-based context system&lt;/li&gt;
&lt;/ul&gt;

&lt;div class="markdown-heading"&gt;
&lt;h2 class="heading-element"&gt;📂 Memory Structure&lt;/h2&gt;

&lt;/div&gt;
&lt;div class="table-wrapper-paragraph"&gt;&lt;table&gt;
&lt;thead&gt;
&lt;tr&gt;
&lt;th&gt;File&lt;/th&gt;
&lt;th&gt;Purpose&lt;/th&gt;
&lt;/tr&gt;
&lt;/thead&gt;
&lt;tbody&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;chat_log.json&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Stores last N interactions&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;chat_summary.txt&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Running summary for context&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;lt_summary_history.txt&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Rotating summary history&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;long_term_memory.txt&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Condensed facts &amp;amp; user traits&lt;/td&gt;
&lt;/tr&gt;
&lt;tr&gt;
&lt;td&gt;&lt;code&gt;personality.txt&lt;/code&gt;&lt;/td&gt;
&lt;td&gt;Defines Astra’s tone and decision logic&lt;/td&gt;
&lt;/tr&gt;
&lt;/tbody&gt;
&lt;/table&gt;&lt;/div&gt;

&lt;div class="markdown-heading"&gt;
&lt;h2 class="heading-element"&gt;🔧 Setup Instructions&lt;/h2&gt;

&lt;/div&gt;
&lt;div class="markdown-heading"&gt;
&lt;h3 class="heading-element"&gt;1. Install Requirements&lt;/h3&gt;

&lt;/div&gt;
&lt;div class="highlight highlight-source-shell notranslate position-relative overflow-auto js-code-highlight"&gt;
&lt;pre&gt;pip&lt;/pre&gt;…
&lt;/div&gt;
&lt;/div&gt;
  &lt;/div&gt;
  &lt;div class="gh-btn-container"&gt;&lt;a class="gh-btn" href="https://github.com/Tahl0s/autonomous-synthetic-thought-response-animus" rel="noopener noreferrer"&gt;View on GitHub&lt;/a&gt;&lt;/div&gt;
&lt;/div&gt;


</description>
      <category>ai</category>
      <category>opensource</category>
    </item>
    <item>
      <title>J.U.D.E - Jigsaw Unified Deployment Engine. - WIP</title>
      <dc:creator>Gus</dc:creator>
      <pubDate>Tue, 25 Feb 2025 22:37:14 +0000</pubDate>
      <link>https://forem.com/gustavothethird/jude-jigsaw-unified-deployment-engine-12f5</link>
      <guid>https://forem.com/gustavothethird/jude-jigsaw-unified-deployment-engine-12f5</guid>
      <description>&lt;h2&gt;
  
  
  J.U.D.E is a project focused on creating a locally hosted AI-Powered engine for automating server management, monitoring and alerting while still remaining scalable.
&lt;/h2&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%2F8uup0l0tyb1s0jr8o0we.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%2F8uup0l0tyb1s0jr8o0we.png" alt="Image description" width="800" height="382"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Managing servers efficiently can be a challenge, and automation is key to handling complex infrastructure. J.U.D.E (Jigsaw Unified Deployment Engine) is designed to be an AI-driven solution for streamlining server management, monitoring, and alerting. With a locally hosted, containerized approach, J.U.D.E has it covered, from security to adaptability while still reducing operational overhead.&lt;/p&gt;

&lt;h2&gt;
  
  
  Features Implemented So Far
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;Model Baseline &amp;amp; Browser Framework&lt;/li&gt;
&lt;li&gt;Ollama Running Inside Flask&lt;/li&gt;
&lt;li&gt;Locally Hosted (No external API dependencies, ensuring security and privacy)&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Short-Term Memory (Maintains session context for improved interactions)&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Long-Term Memory (Persistent knowledge storage and retrieval)&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Intelligent Knowledge Auto-Removal (Efficient management of obsolete data)&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Personality Index (Configurable personality-based responses)&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Reference-Based Reasoning (Utilizing context and prior interactions to improve accuracy)&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Access to Network Time (For reasoning based on real-world timestamps)&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Current planned future enhancements
&lt;/h2&gt;

&lt;ul&gt;
&lt;li&gt;&lt;p&gt;API Integration (For external systems and services)&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;MFA for Interface &amp;amp; SSH (Enhancing security for remote access and automated deployments)&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Advanced Alerting &amp;amp; Monitoring (Automated incident response and remediation)&lt;/p&gt;&lt;/li&gt;
&lt;li&gt;&lt;p&gt;Containerized Deployments (Optimizing Docker environments for portability and scalability)&lt;/p&gt;&lt;/li&gt;
&lt;/ul&gt;

&lt;h2&gt;
  
  
  Why J.U.D.E?
&lt;/h2&gt;

&lt;p&gt;The goal of J.U.D.E is to streamline the sometimes mundane admin tasks from actively monitoring and applying patching based on pre-defined knowledge articles using Ansible to spinning up VM's.&lt;/p&gt;

&lt;h2&gt;
  
  
  The Current State Of Things?
&lt;/h2&gt;

&lt;p&gt;As of writing this, J.U.D.E is currently in the core refinement stage and I am expanding the API to support external services as well as refining the core logic attached so I have a solid, stable framework.&lt;/p&gt;

&lt;p&gt;As for the next milestones, I plan to implement advanced token-based OAuth and then scale vertically.&lt;/p&gt;


&lt;div class="ltag-github-readme-tag"&gt;
  &lt;div class="readme-overview"&gt;
    &lt;h2&gt;
      &lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fassets.dev.to%2Fassets%2Fgithub-logo-5a155e1f9a670af7944dd5e12375bc76ed542ea80224905ecaf878b9157cdefc.svg" alt="GitHub logo"&gt;
      &lt;a href="https://github.com/Tahl0s" rel="noopener noreferrer"&gt;
        Tahl0s
      &lt;/a&gt; / &lt;a href="https://github.com/Tahl0s/jigsaw-unified-deployment-engine" rel="noopener noreferrer"&gt;
        jigsaw-unified-deployment-engine
      &lt;/a&gt;
    &lt;/h2&gt;
    &lt;h3&gt;
      
    &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;J.U.D.E - Jigsaw Unified Deployment Engine - WIP&lt;/h1&gt;
&lt;/div&gt;
&lt;p&gt;&lt;strong&gt;#ai #devops #opensource #cloud&lt;/strong&gt;&lt;/p&gt;
&lt;p&gt;J.U.D.E is a project focused on creating a locally hosted AI-powered engine for automating server management, monitoring, and alerting while remaining scalable.&lt;/p&gt;
&lt;p&gt;&lt;a rel="noopener noreferrer" href="https://private-user-images.githubusercontent.com/173114317/417379593-2cd0be2e-da27-49ad-812e-338dfa0af260.png?jwt=eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJnaXRodWIuY29tIiwiYXVkIjoicmF3LmdpdGh1YnVzZXJjb250ZW50LmNvbSIsImtleSI6ImtleTUiLCJleHAiOjE3NDI3NzMxNzQsIm5iZiI6MTc0Mjc3Mjg3NCwicGF0aCI6Ii8xNzMxMTQzMTcvNDE3Mzc5NTkzLTJjZDBiZTJlLWRhMjctNDlhZC04MTJlLTMzOGRmYTBhZjI2MC5wbmc_WC1BbXotQWxnb3JpdGhtPUFXUzQtSE1BQy1TSEEyNTYmWC1BbXotQ3JlZGVudGlhbD1BS0lBVkNPRFlMU0E1M1BRSzRaQSUyRjIwMjUwMzIzJTJGdXMtZWFzdC0xJTJGczMlMkZhd3M0X3JlcXVlc3QmWC1BbXotRGF0ZT0yMDI1MDMyM1QyMzM0MzRaJlgtQW16LUV4cGlyZXM9MzAwJlgtQW16LVNpZ25hdHVyZT03NGQ2YzZlNTA5YjQ4ZTUzZDExOTA5ZGMwYzA2ZGNlNjYyMGViODljOTZhMzIzYzg2MjkzMWZlNmY5NjI2YzFkJlgtQW16LVNpZ25lZEhlYWRlcnM9aG9zdCJ9.QMrGpwnWgntnuh-5Ee28B1HOjquM5ghycGWQzxEKEzU"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fprivate-user-images.githubusercontent.com%2F173114317%2F417379593-2cd0be2e-da27-49ad-812e-338dfa0af260.png%3Fjwt%3DeyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJpc3MiOiJnaXRodWIuY29tIiwiYXVkIjoicmF3LmdpdGh1YnVzZXJjb250ZW50LmNvbSIsImtleSI6ImtleTUiLCJleHAiOjE3NDI3NzMxNzQsIm5iZiI6MTc0Mjc3Mjg3NCwicGF0aCI6Ii8xNzMxMTQzMTcvNDE3Mzc5NTkzLTJjZDBiZTJlLWRhMjctNDlhZC04MTJlLTMzOGRmYTBhZjI2MC5wbmc_WC1BbXotQWxnb3JpdGhtPUFXUzQtSE1BQy1TSEEyNTYmWC1BbXotQ3JlZGVudGlhbD1BS0lBVkNPRFlMU0E1M1BRSzRaQSUyRjIwMjUwMzIzJTJGdXMtZWFzdC0xJTJGczMlMkZhd3M0X3JlcXVlc3QmWC1BbXotRGF0ZT0yMDI1MDMyM1QyMzM0MzRaJlgtQW16LUV4cGlyZXM9MzAwJlgtQW16LVNpZ25hdHVyZT03NGQ2YzZlNTA5YjQ4ZTUzZDExOTA5ZGMwYzA2ZGNlNjYyMGViODljOTZhMzIzYzg2MjkzMWZlNmY5NjI2YzFkJlgtQW16LVNpZ25lZEhlYWRlcnM9aG9zdCJ9.QMrGpwnWgntnuh-5Ee28B1HOjquM5ghycGWQzxEKEzU" alt="Screenshot 2025-02-26 002618"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;p&gt;Managing servers efficiently can be a challenge, and automation is key to handling complex infrastructure. &lt;strong&gt;J.U.D.E (Jigsaw Unified Deployment Engine)&lt;/strong&gt; is designed to be an AI-driven solution for streamlining server management, monitoring, and alerting. With a locally hosted, containerized approach, J.U.D.E covers everything from security to adaptability, all while reducing operational overhead.&lt;/p&gt;
&lt;div class="markdown-heading"&gt;
&lt;h2 class="heading-element"&gt;Features Implemented So Far&lt;/h2&gt;
&lt;/div&gt;
&lt;ul&gt;
&lt;li&gt;&lt;strong&gt;Model Baseline &amp;amp; Browser Framework&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;&lt;strong&gt;Ollama Running Inside Flask&lt;/strong&gt;&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Locally Hosted&lt;/strong&gt;: No external API dependencies, ensuring security and privacy.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Short-Term Memory&lt;/strong&gt;: Maintains session context for improved interactions.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Long-Term Memory&lt;/strong&gt;: Persistent knowledge storage and retrieval.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Intelligent Knowledge Auto-Removal&lt;/strong&gt;: Efficient management of obsolete data.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Personality Index&lt;/strong&gt;: Configurable personality-based responses.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Reference-Based Reasoning&lt;/strong&gt;: Utilizing context and prior interactions…&lt;/li&gt;
&lt;/ul&gt;
&lt;/div&gt;
  &lt;/div&gt;
  &lt;div class="gh-btn-container"&gt;&lt;a class="gh-btn" href="https://github.com/Tahl0s/jigsaw-unified-deployment-engine" rel="noopener noreferrer"&gt;View on GitHub&lt;/a&gt;&lt;/div&gt;
&lt;/div&gt;


</description>
      <category>ai</category>
      <category>devops</category>
      <category>opensource</category>
      <category>cloud</category>
    </item>
    <item>
      <title>Intro</title>
      <dc:creator>Gus</dc:creator>
      <pubDate>Tue, 25 Feb 2025 21:48:39 +0000</pubDate>
      <link>https://forem.com/gustavothethird/intro-2bii</link>
      <guid>https://forem.com/gustavothethird/intro-2bii</guid>
      <description>&lt;p&gt;Hey, I’m Gus!&lt;/p&gt;

&lt;p&gt;About me:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;Scottish&lt;/li&gt;
&lt;li&gt;Devops&lt;/li&gt;
&lt;li&gt;Automation&lt;/li&gt;
&lt;li&gt;Home Servers&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Decided to start a Dev.to account primarily to post updates on projects i’ve been working on as well as overviews once completed.&lt;/p&gt;

&lt;p&gt;Please feel free to reach out with any questions.&lt;/p&gt;

</description>
      <category>devops</category>
      <category>automation</category>
      <category>community</category>
      <category>discuss</category>
    </item>
  </channel>
</rss>
