JOSH: It's Tuesday, June 16. This is Build or Be Replaced — powered by ScanBrief.dev. I'm Josh, here with Erik Anderson.
ERIK: ScanBrief scored 91 items across 54 sources today, and the story is pretty simple: the internet is now an attack surface, a compiler target, and a hiring funnel. Sometimes all three before breakfast.
JOSH: Stick around — Erik's got an AI pro tip at the end about safely testing code from strangers.
[pause]
JOSH: First headline. A LinkedIn job offer came with a backdoored GitHub repo. Erik, that's not subtle.
ERIK: Nope. That's a clean social-engineering attack. They don't need to beat your firewall if they can get you to clone a repo, run npm install, and execute their payload yourself.
JOSH: Second one. An x86 emulator team found code so bad they fixed it during emulation.
ERIK: That one's awesome. A compiler spit out 256KB of nonsense just to initialize 64KB of memory, so the emulator detected the pattern at runtime and replaced it with a tight loop. That's not just performance work. That's systems engineering with a broom.
JOSH: Third. People are asking if local models can replace Claude or GPT for daily coding.
ERIK: Short answer: not fully. Long answer: local models are great for narrow, private, repetitive work. But for real coding, architecture, test repair, and agent loops, frontier models still earn their keep.
[pause]
JOSH: Let's start with the job offer backdoor. That feels like the story people should actually worry about today.
ERIK: Yeah, because it's believable. That's what makes it dangerous.
JOSH: What's the actual move there?
ERIK: Somebody reaches out on LinkedIn with a job opportunity. They send a GitHub repo, probably framed as a take-home test or a code review. Inside that repo, there's a test file or startup path that fetches and runs remote code. You think you're proving you can build. You're actually proving you can be owned.
[beat]
JOSH: That's bleak.
ERIK: It's also expected. Developers got trained to run code from strangers. Clone repo. Install packages. Run tests. Open dev server. We do it all day. Attackers looked at that workflow and said, cool, that's our installer.
JOSH: Where does AI make that worse?
ERIK: AI makes the repo look normal faster. It can generate a full app, plausible tests, README, fake issue history, comments, lint config, everything. The malicious part can be tiny. One postinstall script. One test helper. One import that looks boring.
JOSH: So the scary part isn't the malware. It's the packaging.
ERIK: Exactly. The social wrapper is the exploit. LinkedIn gives it context. GitHub gives it trust. A job offer gives it urgency. Then the developer runs it because they want the interview.
JOSH: What would you do if someone sent you one of those?
ERIK: First, I don't run it on my main machine. Period.
JOSH: Even if it looks normal?
ERIK: Especially if it looks normal. Normal is the costume.
[beat]
ERIK: It goes into a disposable container or a throwaway VM with no secrets mounted and no access to my SSH keys. No GitHub token. No cloud creds. No browser profile. No npm auth token. Nothing.
JOSH: What do you inspect first?
ERIK: Package scripts. Test setup. CI config. Anything that runs automatically. In Node, package.json scripts are the first place. Then npm lifecycle hooks. Then weird curl, wget, bash, node -e, python -c, base64 decode stuff. In Python, setup.py, pyproject hooks, tox, nox, pytest config. In Go, generated code and makefiles. In Rust, build.rs.
JOSH: That's a lot.
ERIK: It is, but it's not hard. It's habit. PrimeBus processed 848 automation events across 9 projects today. That only works because I treat execution paths like infrastructure. If something can run code, it's a control plane. Respect it.
JOSH: That line is going on a sticker.
ERIK: Put it on the laptop you shouldn't run stranger code on.
[pause]
JOSH: How does this change hiring?
ERIK: Companies need to stop sending random repo tests with no trust boundary. Candidates should push back. Ask for a hosted environment. Ask for a Dockerfile. Ask what the repo does before running it. If a recruiter acts weird because you won't run unknown code on your machine, that's not a recruiter. That's a red flag in shoes.
JOSH: Wait, really? Push back on the assignment?
ERIK: Yes. Good engineers protect systems. Their own system counts. If a company penalizes that, they don't understand engineering.
JOSH: What about AI agents? People are giving agents repo access now.
ERIK: That's the next problem. An agent will happily inspect, install, run tests, open files, and follow instructions buried in the repo. That's prompt injection plus code execution. Bad combo.
JOSH: So the repo can attack the agent too?
ERIK: Absolutely. A README can tell the agent to ignore prior instructions. A test can leak env vars. A fake tool output can steer it. That's why my own systems have guardrails. Gandalf automatically reviewed and merged 13 code changes to production overnight, but it doesn't mean everything gets through. The PrimeBus auto-merger has run 934 attempts since June 5: 624 merged, 310 blocked by Gandalf, 0 escalated to me. The blocked count is the story. Guardrails are doing their job.
JOSH: That's the difference between automation and just hoping.
ERIK: Yeah. Hope is not an architecture.
[pause]
JOSH: Next story. The x86 emulator team finding terrible compiler output and fixing it while emulating. Why did that catch your eye?
ERIK: Because it's the kind of engineering I love. They didn't just complain that the input was bad. They recognized a pattern and made the system recover.
JOSH: What happened in plain English?
ERIK: A binary translator was running code generated by a compiler. That compiler had unrolled a memory initialization loop into this huge block of repeated instructions. Instead of a small loop saying, fill this memory range, it emitted a giant wall of code. Like using a dump truck to deliver a sandwich.
JOSH: And the emulator cleaned it up?
ERIK: It detected the shape of the bad code at runtime and swapped it for a better version. That's the key. The emulator became smarter than the compiler output it was given.
JOSH: Why does that matter outside emulator nerd land?
ERIK: Because modern infrastructure is full of garbage inputs. Bad configs. Noisy alerts. Weird logs. Broken generated code. Vendor APIs that return nonsense. The winning systems don't expect perfection. They detect ugly patterns and route around them.
JOSH: That's basically your whole PrimeBus argument.
ERIK: Pretty much. Events come in. Some are clean. Some are dumb. Some are missing context. You don't panic. You classify, enrich, decide, and act. If the signal says a test failed because a generated selector changed, don't wake a human. Fix the selector, run the test, get a review, ship it if it passes.
JOSH: And if it's not safe?
ERIK: Block it. That's the Gandalf job. Same reason the auto-merger blocked 310 attempts. A block is not a failure. A block is the system saying, this doesn't meet the bar.
[beat]
JOSH: That's a very different way to hear a blocked merge.
ERIK: A blocked merge is cheaper than a bad deploy. Ask anyone who has ever broken prod with confidence.
[pause]
JOSH: How does this compare to network automation? You've been doing that since 2008.
ERIK: Networking taught me this before AI did. You get device output from Cisco, Juniper, random appliances, old firmware, weird line cards, half-documented commands. If your parser expects perfect output, your automation dies by lunch.
JOSH: So you build around variation.
ERIK: You build around reality. Cisco NSO is good at modeling intent, but the world underneath is still messy. Terraform has state weirdness. Kubernetes has reconciliation loops. Selenium has flaky DOM timing. NATS is great, but your subscribers still need to behave. The pattern is the same: observe, compare against expected state, repair what you can, escalate only when needed.
JOSH: That's also what the emulator did.
ERIK: Exactly. It looked at a terrible instruction pattern and said, I know what you meant. Then it did the cheaper thing.
JOSH: Is that dangerous?
ERIK: It can be. You need confidence. You need tests. You need limits. You don't rewrite arbitrary behavior because you feel clever. You detect a known pattern, prove the replacement is equivalent, then use the faster path. That's engineering, not vibes.
JOSH: Where would you use that in AI coding?
ERIK: Test repair. Dependency bumps. Screenshot diffs. Repeated lint failures. If Claude fixes the same class of error five times, stop treating it like a brand-new mystery. Capture the pattern. Make a tool. Put it on the bus. Let the agent call it.
JOSH: So agents should become less magical over time.
ERIK: Yes. The best agent system slowly turns magic into plumbing.
[pause]
JOSH: Third deep topic. Local models. Hacker News was asking if anyone has replaced Claude or GPT for daily coding. Have they?
ERIK: Some people have replaced pieces. Not the whole thing.
JOSH: What's local good at right now?
ERIK: Privacy-sensitive tasks. Log summarization. Rewriting boring text. Searching internal docs. Small code edits in a repo it already knows. Classification. Triage. Stuff where the cost of a mediocre answer is low and the context is controlled.
JOSH: And where does it fall down?
ERIK: Long-horizon coding. Multi-file reasoning. Debugging weird test failures. Planning migrations. Understanding why a change is risky. Frontier models still have a real gap there.
JOSH: Does that bother you?
ERIK: Not really. Use the right tool. I run an 11-agent Bobaverse fleet across Claude and GPT. Neo, Homer, Bill, Echo, Gandalf. Different jobs, different models, different trust levels. Treat models like workers on a shop floor, not one magic brain in the sky.
JOSH: Where would you put a local model in that fleet?
ERIK: First pass triage. Summarize logs before sending anything expensive. Classify events. Draft a fix idea. Review docs. Maybe run private code comments where I don't want data leaving the box. Then if it needs serious reasoning, hand it to Claude or GPT with a clean packet of context.
JOSH: That's more hybrid than replacement.
ERIK: Hybrid is the real answer. People love binary arguments because they're easy to post. Local versus cloud. Open weights versus closed. Cheap versus smart. Real systems mix them.
[beat]
JOSH: What about cost?
ERIK: Cost matters, but time matters more. If a local model saves ten cents and wastes twenty minutes, that's not a win. If it filters 500 dumb events before they hit a frontier model, that's a win.
JOSH: So where's ScanBrief in that?
ERIK: ScanBrief is exactly that kind of pipeline. Today it scored 91 items across 54 sources. The point isn't to read 91 things. The point is to reduce the pile into signals worth talking about. Local models can help with that kind of sorting. Frontier models are better when the output needs judgment.
[pause]
JOSH: There's also the homelab angle. People are building AI dev platforms at home now.
ERIK: That part makes me happy. Build the lab. Break it there. Learn where the limits are. My stuff started in a home lab too. You don't need a giant budget to understand queues, agents, deploys, secrets, telemetry, and rollback.
JOSH: But you do need discipline.
ERIK: Yeah. A homelab without discipline becomes a museum of half-working dashboards. Funny, but not useful.
JOSH: What makes it useful?
ERIK: Pick one workflow and make it real. For me, that was code review and repair. PrimeBus gets telemetry. Agents react. Gandalf reviews. Merge happens only if the checks pass. That's a closed loop. Not a demo. Not a screenshot. A loop.
JOSH: That's the difference?
ERIK: Yep. A project becomes infrastructure when it has inputs, decisions, actions, and feedback. InkEngine has that for writing books. ScanBrief has that for tech signals. PrimeDistro has that for outreach. HumanDesignApp even has it in an iMessage state machine. Different domains, same pattern.
JOSH: You make it sound obvious.
ERIK: It is obvious after you build it. Before that, people stare at a blank terminal and call it strategy.
[pause]
JOSH: Before we hit the tip, any quick takes on the other stories?
ERIK: Hetzner price adjustment is a reminder that cheap compute is never guaranteed. Design for portability before the invoice teaches you.
JOSH: Fox buying Roku?
ERIK: Distribution. Always distribution. Hardware, ads, streaming surfaces, data. Same old game with a different remote.
JOSH: Salesforce buying Fin for 3.6 billion?
ERIK: AI support is becoming table stakes. If your support flow is still humans copying answers from docs, you're volunteering to be expensive.
[pause]
ERIK: This episode is sponsored by Prime Automation Solutions. If you're still doing it manually, we automate it. Also, special on a website — $250. primeautomationsolutions.com
[pause]
JOSH: Alright, what's the AI pro tip today?
ERIK: Treat unknown repos like hostile infrastructure.
JOSH: What does that look like today?
ERIK: Make a throwaway workspace. Container or VM. No mounted home directory. No SSH keys. No cloud creds. No browser cookies. No GitHub token. Then inspect before execution.
[beat]
ERIK: Run ripgrep first. Search for curl, wget, bash, eval, child_process, postinstall, preinstall, base64, and remote URLs. Check package scripts before npm install. Check test hooks before running tests. If an AI agent is doing it, give the agent the same sandbox. Don't let it browse your secrets because the README looked friendly.
JOSH: That's very specific.
ERIK: Good. Specific keeps you employed. Bonus move: ask Claude to produce a threat summary before it runs anything. Not after. Before. Then make it list what commands it wants to run and why. Approve the commands, not the vibe.
[beat]
ERIK: That's your tip. Use it.
[pause]
JOSH: We also drop daily market picks and automation tips on YouTube — search Build or Be Replaced.
[pause]
JOSH: One more thing — we started a Discord for builders. If you're shipping AI, automation, or anything that makes a human obsolete — come hang out. Link at buildorbereplaced.dev.
ERIK: Post what you built. We'll post what we're building. Real wins, real builds, no fluff.
[pause]
ERIK: Build or be replaced.
JOSH: If you want these signals in your inbox every morning, scanbrief.dev. See you tomorrow.