<?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: Mateus Medeiros</title>
    <description>The latest articles on DEV Community by Mateus Medeiros (@mathmed).</description>
    <link>https://dev.to/mathmed</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%2F3888769%2F720da558-bad7-4b33-817e-fe2ea6aafe49.jpg</url>
      <title>DEV Community: Mateus Medeiros</title>
      <link>https://dev.to/mathmed</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/mathmed"/>
    <language>en</language>
    <item>
      <title>The Banking System Is Not Ready for AI-Powered Attacks</title>
      <dc:creator>Mateus Medeiros</dc:creator>
      <pubDate>Tue, 21 Jul 2026 10:56:38 +0000</pubDate>
      <link>https://dev.to/mathmed/the-banking-system-is-not-ready-for-ai-powered-attacks-59kg</link>
      <guid>https://dev.to/mathmed/the-banking-system-is-not-ready-for-ai-powered-attacks-59kg</guid>
      <description>&lt;p&gt;Over the past two months, I experienced three security incidents at the fintech where I work as a tech lead.&lt;/p&gt;

&lt;p&gt;I won't go into which company it is, the exact amounts involved, or which partners failed. But I'll share what happened with the honesty of someone who was in the middle of the fire, and what it made me think about what's coming.&lt;/p&gt;

&lt;p&gt;There's a silent pattern in mid-sized fintechs: engineering grows fast, the product is good, developers are skilled, and security keeps getting pushed to later. Not out of negligence, but because the cost of ignoring it feels abstract until the day it isn't.&lt;/p&gt;




&lt;h2&gt;
  
  
  How a Real Attack Actually Happens
&lt;/h2&gt;

&lt;p&gt;The popular image of a hacker involves someone furiously typing in a black terminal, trying passwords until one works. Reality is far less cinematic, and far more unsettling.&lt;/p&gt;

&lt;p&gt;Of the three incidents I experienced, none involved brute force.&lt;/p&gt;

&lt;p&gt;In one of them, a partner of ours had their credential database leaked. The attacker arrived with a copy of the house keys, no need to break in. They managed to move a significant amount of money across accounts before we could stop them.&lt;/p&gt;

&lt;p&gt;In another, it was pure social engineering. The attacker somehow obtained a client's credentials, logged in, realized they didn't have the transactional PIN, and opened a support ticket &lt;em&gt;pretending to be the client&lt;/em&gt;, even sending a photo holding an ID document. Our support team processed the request. The phone number used was different from the one on file. Nobody noticed.&lt;/p&gt;

&lt;p&gt;The weakest link in any system is always human. The best encryption in the world doesn't matter if someone answers the wrong phone call.&lt;/p&gt;




&lt;h2&gt;
  
  
  Why Our Current Defenses Aren't Enough
&lt;/h2&gt;

&lt;p&gt;After each incident, we asked the right questions: what failed? what could have prevented this?&lt;/p&gt;

&lt;p&gt;We reached some uncomfortable conclusions.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;The government reversal mechanism doesn't work for this type of attack.&lt;/strong&gt; Brazil has a special mechanism designed to trace and reverse fraudulent transactions. In theory, it's the financial system's shield against fraud. In practice, it takes days, weeks, sometimes months to act. A competent attacker pulverizes the stolen balance across dozens of mule accounts, which forward to others, which forward to others. Within hours, the trail is nearly untraceable. We filed the request more out of procedure than genuine hope of recovering the money.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Partners' fraud detection is too generic.&lt;/strong&gt; Our banking partner blocked roughly half the amount transacted in one of the incidents. That helped, and I'm grateful, but the half that wasn't blocked was enough to cause real damage. The problem isn't partner incompetence: it's that a fraud system built to serve thousands of different clients tends to be conservative and generic. It doesn't know the specific transactional pattern of your business.&lt;/p&gt;

&lt;p&gt;Condominiums, for example, have extremely predictable financial behavior. Payments happen in specific windows of the month, to corporate accounts, in amounts that follow a historical pattern. A transfer to an individual, outside business hours, above the historical amount for that account is trivially suspicious to someone who knows the domain. To a generic fraud system, it's just another transaction.&lt;/p&gt;




&lt;h2&gt;
  
  
  What Changes With AI
&lt;/h2&gt;

&lt;p&gt;Recently, major AI labs announced they're working on models capable of autonomously finding vulnerabilities in software systems. There's obvious market interest in those statements, FOMO sells, but there's also genuine truth to them.&lt;/p&gt;

&lt;p&gt;A human attacker has limits. They sleep. They make mistakes. They have a finite set of technical knowledge. They need time to analyze a system, identify attack surfaces, test hypotheses.&lt;/p&gt;

&lt;p&gt;An AI-powered attacker has none of those limitations.&lt;/p&gt;

&lt;p&gt;The speed of exploitation is going to shift by an order of magnitude. What today takes days of manual analysis could take minutes of automated scanning. And the systems that are exposed, APIs without IP validation, forgotten old endpoints still running on the internet, credentials that have never been rotated, are going to be found much faster than any security team can react.&lt;/p&gt;

&lt;p&gt;I'm not speculating about a distant future. I'm describing the present with one new variable added.&lt;/p&gt;




&lt;h2&gt;
  
  
  What You Can Do Right Now
&lt;/h2&gt;

&lt;p&gt;I'm not writing this to cause panic. I'm writing it because most effective defenses are relatively simple to implement, and most companies still haven't done them.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Eliminate long-lived exposed credentials.&lt;/strong&gt; Production credentials shouldn't exist in &lt;code&gt;.env&lt;/code&gt; files on developer machines or be injected as environment variables in Kubernetes pods. They should be fetched at runtime from a secrets manager (AWS Secrets Manager, GCP Secret Manager, HashiCorp Vault). The overhead is small. The gain is enormous.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Add mutual TLS (mTLS) to your B2B APIs.&lt;/strong&gt; If you have an API that partners integrate with, mTLS is the proper long-term solution: both sides present certificates, so the connection is authenticated at the transport layer regardless of what's in the payload. IP allowlisting is a valid quick win (it's what we did after our incident, and it stopped the immediate bleeding), but it's not a substitute. IPs rotate, VPNs exist, and cloud-native architectures make stable IP ranges increasingly rare. mTLS doesn't have those weaknesses.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Build your own fraud detection, even if simple.&lt;/strong&gt; You know the transactional behavior of your domain better than any partner does. Basic rules based on historical pattern, time of day, beneficiary type, and amount already capture most obvious anomalies.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Implement credential rotation.&lt;/strong&gt; Credentials that never expire are credentials that may have been leaked years ago without your knowledge. A periodic rotation process, even semi-manual, drastically reduces the impact of a past breach.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Audit access for former employees.&lt;/strong&gt; It sounds obvious. Most companies don't do it systematically. Make it a mandatory step in your offboarding process.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Define security protocols for your support team.&lt;/strong&gt; Social engineering works because support teams prioritize resolving the customer's problem over verifying who the customer actually is. Write down what your team is and isn't allowed to change without additional verification, and what that verification looks like. A checklist isn't glamorous, but it closes the gap that cost us tens of thousands of dollars.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Monitor actively, not passively.&lt;/strong&gt; Logs exist to be read. If you're discovering incidents because a client complained, you're already late. Invest in alerts, dashboards, and if possible, automation that catches anomalies before they become incidents.&lt;/p&gt;




&lt;h2&gt;
  
  
  A Question I Can't Stop Asking
&lt;/h2&gt;

&lt;p&gt;I've thought about what would have happened if the attacker we faced had an AI on their side. Not for phishing at scale, but to systematically scan our APIs for unauthenticated endpoints. To test payload variations against our routes. To identify patterns in error responses that reveal internal structure. To do in minutes what took weeks of manual analysis.&lt;/p&gt;

&lt;p&gt;The honest answer is: I don't know if we would have held.&lt;/p&gt;

&lt;p&gt;And if that's true for us, with all the attention we've dedicated to security over these two months, it's true for the vast majority of fintechs operating today.&lt;/p&gt;

&lt;p&gt;The ground is shifting. The question isn't whether you'll be attacked. It's whether you'll be ready when it happens.&lt;/p&gt;




&lt;p&gt;&lt;em&gt;If you've been through something similar or have a different perspective, I'd love to hear it in the comments.&lt;/em&gt;&lt;/p&gt;

</description>
      <category>ai</category>
      <category>security</category>
      <category>cybersecurity</category>
      <category>fintech</category>
    </item>
    <item>
      <title>I Turned Claude Code Into a Personal AI Butler That Runs My Life</title>
      <dc:creator>Mateus Medeiros</dc:creator>
      <pubDate>Mon, 08 Jun 2026 13:21:13 +0000</pubDate>
      <link>https://dev.to/mathmed/i-turned-claude-code-into-a-personal-ai-butler-that-runs-my-life-462l</link>
      <guid>https://dev.to/mathmed/i-turned-claude-code-into-a-personal-ai-butler-that-runs-my-life-462l</guid>
      <description>&lt;blockquote&gt;
&lt;p&gt;&lt;em&gt;Not another chatbot wrapper: a proactive assistant that runs on Claude Code headless, wired into my whole life through MCP.&lt;/em&gt;&lt;/p&gt;
&lt;/blockquote&gt;




&lt;h2&gt;
  
  
  Introduction
&lt;/h2&gt;

&lt;p&gt;Most generic AI assistants are &lt;strong&gt;smart but forgetful&lt;/strong&gt;. They know a lot about the world and nothing about you. Every conversation starts from scratch. Every question is answered generically. Ask them to help you plan your week and they'll give you a productivity framework from 2019.&lt;/p&gt;

&lt;p&gt;I wanted something different. I wanted an assistant that knows I lead engineering at a fintech, that I'm working through a GTD backlog, that I've been putting off a specific task for three weeks, that I go to sleep around midnight, and that I absolutely hate soup for dinner.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;So I built Jarvis.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;This isn't a tutorial. It's a walkthrough of what I built, how I built it, and why the combination of context, MCP, and Claude Code changed how I think about personal tooling.&lt;/p&gt;




&lt;h2&gt;
  
  
  Part 1: What Jarvis Does
&lt;/h2&gt;

&lt;p&gt;Let me give you a concrete example before I list anything.&lt;/p&gt;

&lt;p&gt;Ten minutes before a call with my CTO, I hadn't opened Slack, hadn't reviewed my notes, hadn't done anything. Then, across the room, my Alexa spoke up in Jarvis's voice. It had pulled the last three technical decisions we had open, flagged an unread DM that was likely to come up, and surfaced something I'd written in my diary two days earlier that was directly relevant. I walked into that call better prepared than I would have been after an hour of manual review, &lt;strong&gt;and I hadn't asked for any of it.&lt;/strong&gt; And it doesn't stop when the call ends: afterward, Jarvis reads back through the meeting, the calendar entry, the notes, what was discussed, picks out the loose ends that landed on me, and files them as tasks in my GTD. By the time I'm back at my desk, the follow-ups are already waiting, categorized and prioritized, without me writing a single one of them down.&lt;/p&gt;

&lt;p&gt;That's what "useful" looks like in practice. Not "it can do X," but "it showed up before I even knew I needed it."&lt;/p&gt;

&lt;p&gt;But "useful" is only half the story. The other half still catches me off guard: &lt;strong&gt;Jarvis improves itself.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;A few weekends ago I was driving to the mall with my wife. I wanted to hand a couple of things off to Jarvis, but I wasn't about to type paragraphs into Telegram from behind the wheel, and at that point it only understood text. So, stopped at a red light, I told it to fix exactly that: add support for receiving voice messages on Telegram. It delegated the work to Claude Code, which branched, wired up the transcription pipeline, and opened a pull request. I merged it right there, still in the car, and &lt;strong&gt;my very next message to Jarvis was a voice note.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Read that back: I used the assistant to give the assistant a new way for me to use it. It didn't just run a task; it extended its own surface area, on request, while I kept my hands on the wheel.&lt;/p&gt;

&lt;p&gt;Here's what makes that possible. Jarvis is connected, via MCP (Model Context Protocol), to everything I actually use:&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Productivity &amp;amp; Work&lt;/strong&gt;&lt;br&gt;
Google Calendar, Gmail (two accounts: personal and professional), Google Drive and Docs, Slack. Full GTD task management with categories, priorities, due dates, and statuses. The assistant doesn't just read these; it can act on them, create events, search emails, list tasks by energy level, or find a document buried in a folder I haven't opened in months.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Personal life&lt;/strong&gt;&lt;br&gt;
A reading list, a games backlog, a watchlist for films and series, a link library. And the watchlist isn't just a place things sit: every Saturday evening, based on how my week went and what I've already watched, Jarvis suggests something new to add. A personal finance module connected to real bank data, not manual entries. A diary with structured entry types (personal, work, technical, idea, meeting, learning). And a shopping list, because even butlers deal with groceries.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Memory: the part that changes everything&lt;/strong&gt;&lt;br&gt;
Jarvis has two memory layers. Structured facts, the things I've explicitly told it to remember: my name, my wife's name, the football team I support, the birthdays that matter, the company I work for, and that I hate soup for dinner. And semantic memory, a Pinecone vector store that indexes conversations, diary entries, and patterns over time. Before answering anything contextual, it queries that store. When I mention "that infrastructure decision from last week," it knows what I mean. When I ask about someone by name, it already has context.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Automated Routines&lt;/strong&gt;&lt;br&gt;
This is where it stops feeling like a tool and starts feeling like an actual assistant. Jarvis has 31 scheduled routines running throughout the week. The ones that matter most:&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;em&gt;Morning briefing&lt;/em&gt;: before I open anything, I already have the day: calendar, tasks, messages worth knowing, how my investments did overnight, and what's going on in the world. The day starts contextualized.&lt;/li&gt;
&lt;li&gt;
&lt;em&gt;Pre-meeting briefing&lt;/em&gt;: what you just read above. Polls the calendar every 15 minutes, fires exactly once per meeting, 10 to 25 minutes before it starts.&lt;/li&gt;
&lt;li&gt;
&lt;em&gt;Finance report&lt;/em&gt;: weekly summary of spending, investments, and outstanding debts. Finds me; I don't chase it.&lt;/li&gt;
&lt;li&gt;
&lt;em&gt;Weekly review&lt;/em&gt;: once a week it walks my GTD with me, what moved, what stalled, what's been sitting in 'waiting' too long, and helps me reset for the week ahead.&lt;/li&gt;
&lt;li&gt;
&lt;em&gt;Deadline alerts&lt;/em&gt;: tasks approaching their due date surface automatically.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;The assistant also has a persona: a dry British wit that occasionally points out when you're repeating yourself. It's not neutral, and that's on purpose.&lt;/p&gt;




&lt;h2&gt;
  
  
  Part 2: How It's Built
&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%2F94drwztzfc0nmynf5yc0.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%2F94drwztzfc0nmynf5yc0.png" alt=" " width="800" height="585"&gt;&lt;/a&gt;&lt;br&gt;
&lt;strong&gt;The Stack&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;The backend is a FastAPI application on Python 3.14, running on a Compute Engine VM on GCP behind Nginx. Data lives in Google Cloud Datastore, a managed NoSQL document database.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;MCP as the Integration Layer&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;MCP (Model Context Protocol) is what makes this scale without becoming a mess. Each domain is its own MCP server: Google Workspace, Slack, GTD, Finance, Diary, Memory, Alexa, and more. Twelve servers in total, exposing 35+ tools to the agent.&lt;/p&gt;

&lt;p&gt;The agent stays clean. Adding a new integration means writing a new MCP server, not touching the orchestration logic.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Claude as the Brain&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;The agent is a Python runner, but &lt;strong&gt;it doesn't call the Anthropic API directly.&lt;/strong&gt; Instead, it shells out to Claude Code running headless (&lt;code&gt;claude -p&lt;/code&gt;), handing it the persona and system instructions, the MCP server config, and an allow-list of tools. Claude Code does the heavy lifting: it builds the context window, connects to every active MCP server, and drives the tool-calling loop. The runner just feeds it the user message and parses the structured JSON (&lt;code&gt;{response, actions}&lt;/code&gt;) that streams back. The neat part: &lt;strong&gt;the same Claude Code that writes Jarvis's code is also the engine that runs it.&lt;/strong&gt; The assistant doesn't just get built by an agent; it &lt;em&gt;is&lt;/em&gt; one.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;A Persona, On Purpose&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Jarvis's personality lives in its own file, &lt;code&gt;persona.md&lt;/code&gt;, kept deliberately separate from the operational instructions that tell the runner how to behave (output format, channel rules, when to delegate to Claude Code). The mechanics change often; the identity shouldn't. Splitting them means I can rewrite how Jarvis &lt;em&gt;works&lt;/em&gt; without ever touching who Jarvis &lt;em&gt;is&lt;/em&gt;, and the character stays consistent across every channel, whether it's answering on Telegram or speaking through an Echo.&lt;/p&gt;

&lt;p&gt;And it's a real persona, not a one-line "be friendly and concise." It's a full character brief: an impeccable British butler who happens to run complex systems, dry wit by default, always first person, never the telemarketing enthusiasm of "Great question!" The file even ships with calibration examples so the tone stays sharp:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;"Meeting tomorrow at 2pm. I've filed it under 'this time he actually shows up.'"&lt;/p&gt;

&lt;p&gt;"The bug is on line 47. The real cause is an architecture decision from two weeks ago, but let's pretend we didn't see that for now."&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;That's the difference between an assistant that answers and one you'd actually want around. Generic is a choice, and I chose against it.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;OpenAI as a Supporting Layer&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;While Claude drives conversations, OpenAI handles specific tasks: Whisper transcribes the voice messages I send over Telegram, and DALL-E 3 handles image generation (when I asked Jarvis what it thought it looked like, it drew its own self-portrait).&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%2Ffbq456kkwl4ctk9vdfhh.jpeg" 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%2Ffbq456kkwl4ctk9vdfhh.jpeg" alt=" " width="640" height="640"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Channels&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Telegram for async. The voice side started from a constraint I'd built for myself: I have six Echo devices around the house, one per room, and I wanted to actually put them to use, just not as Alexa. I wanted them to speak as Jarvis. So for voice, the pipeline goes: response text → ElevenLabs → custom audio file → Alexa device. Jarvis speaks in its own voice, not Amazon's default TTS.&lt;/p&gt;

&lt;p&gt;But the proactive side is where it gets technically unusual.&lt;/p&gt;

&lt;p&gt;Amazon's official Alexa Skills Kit is reactive: it waits to be called. If you want the assistant to speak up on its own, whether a morning briefing, a deadline alert, or a pre-meeting summary, the Skills Kit won't help you. So I reverse-engineered the internal Amazon API. It's undocumented. It's unofficial. Amazon could break it tomorrow. But it's the only path to an assistant with genuine initiative, and to me, that tradeoff was obvious. &lt;strong&gt;The fragility is a feature, not a bug:&lt;/strong&gt; it means I had to care enough to go find it.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Semantic Memory&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Conversations, diary entries, and pattern analyses get turned into vectors with OpenAI's &lt;code&gt;text-embedding-3-small&lt;/code&gt; and upserted into a Pinecone index, each one tagged with a timestamp and type. Before responding to anything contextual, Jarvis embeds the incoming message and runs a top-k similarity search, pulling back the handful of past moments closest to what I'm asking about right now. A separate nightly routine does the heavier lifting: it reads back over the last day, distills behavioral patterns, and writes those summaries back into the same store, tagged as &lt;code&gt;pattern_analysis&lt;/code&gt;, so the next morning's briefing can reference them. The result is what makes it feel continuous: not a chatbot that resets, but something that was paying attention yesterday too.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Routines via Cloud Scheduler&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;31 cron jobs, fired as HTTP calls from Cloud Scheduler to internal Nginx routes. Each job fetches context (diary, tasks, semantic memory, calendar, Slack), builds a prompt, calls Claude, and sends the result via Telegram or Alexa.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Built with Claude Code&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Here's the part that still surprises me every time: I built almost all of this using Claude Code, Anthropic's agentic coding tool that runs in the terminal.&lt;/p&gt;

&lt;p&gt;The workflow: I describe what I want, Claude Code creates a branch, implements it, commits, and opens a PR. I review and merge. For most features, &lt;strong&gt;I never write a line of code manually.&lt;/strong&gt; The agent understands the codebase, follows the established patterns, and usually makes the call I would have.&lt;/p&gt;

&lt;p&gt;This creates a feedback loop that's genuinely strange to describe. The assistant I'm building is also my development partner. When I ask Jarvis via Telegram to add a feature, it delegates to Claude Code, which opens a PR. &lt;strong&gt;The system extends itself.&lt;/strong&gt;&lt;/p&gt;




&lt;h2&gt;
  
  
  What It Costs to Run
&lt;/h2&gt;

&lt;p&gt;I expected a system this involved to be expensive. It isn't.&lt;/p&gt;

&lt;ul&gt;
&lt;li&gt;
&lt;strong&gt;Claude, the brain: $20/month.&lt;/strong&gt; Jarvis runs on a Claude Pro subscription through Claude Code, not the metered API, so there's no per-token bill no matter how much I talk to it. It even routes models by task: Haiku for everyday conversation, Opus when it's writing code.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;GCE e2-small VM: ~$13/month.&lt;/strong&gt; A single small Compute Engine instance hosts the whole backend.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;ElevenLabs voice: $6/month&lt;/strong&gt; on the Starter plan, and even that is optional: there are free TTS options if you don't mind dropping the custom voice.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;OpenAI (Whisper, DALL·E, embeddings): under $2/month.&lt;/strong&gt; Usage is low and these are cheap per call.&lt;/li&gt;
&lt;li&gt;
&lt;strong&gt;Pinecone, Pluggy, and the rest of GCP (Datastore, Cloud Scheduler): $0.&lt;/strong&gt; All comfortably inside their free tiers.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;All in, Jarvis runs for around $40 a month&lt;/strong&gt;, and the single biggest line item is a consumer Claude subscription I'd probably be paying for anyway. The part that should feel expensive, the always-on intelligence, is the part that's basically flat-rate, precisely because it runs on Claude Code instead of billing me by the token.&lt;/p&gt;




&lt;h2&gt;
  
  
  What Makes It Actually Useful
&lt;/h2&gt;

&lt;p&gt;The gap between "AI assistant" and "useful AI assistant" is almost entirely context. Generic assistants are impressive in demos and mediocre in practice because they have no idea who you are.&lt;/p&gt;

&lt;p&gt;What made Jarvis cross that gap:&lt;/p&gt;

&lt;ol&gt;
&lt;li&gt;Deep integrations: not API wrappers, but MCP tools with real access and real schemas&lt;/li&gt;
&lt;li&gt;Persistent memory: facts you tell it and patterns it finds on its own&lt;/li&gt;
&lt;li&gt;Proactive outputs: it shows up, it doesn't just respond&lt;/li&gt;
&lt;li&gt;A persona with opinions: less tool, more collaborator&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;It's not perfect. MCP servers disconnect. Prompts drift. Occasionally it contradicts something from last week. But it's useful in a way that no off-the-shelf assistant has been, and at this point, &lt;strong&gt;I'd notice if it disappeared.&lt;/strong&gt;&lt;/p&gt;

</description>
      <category>ai</category>
      <category>claude</category>
      <category>python</category>
      <category>mcp</category>
    </item>
  </channel>
</rss>
