
AI Workflows and Tools with Nick Taylor
Nick Taylor, Dev Agrawal, and Anthony Campolo discuss AI coding workflows, agent-ready frameworks, Specter, local models, and infrastructure guides.
Episode Description
Nick Taylor, Dev Agrawal, and Anthony Campolo discuss AI coding workflows, agent-ready frameworks, Specter, local models, and infrastructure guides.
Episode Summary
Nick Taylor joins Anthony Campolo and Dev Agrawal to share practical lessons from building with AI agents, contributing secure proxy authentication to OpenClaw, and managing remote coding sessions with tools such as Herdr. The group discusses reusable skills, MCP integrations, newsletter analytics, rapidly changing AI practices, and the need to avoid over-engineered workflows. They examine how framework design, current documentation, examples, source code, and project-specific conventions help agents produce better software, particularly with React, Solid, and TanStack tools. Dev then demonstrates Specter, a specification framework that expresses application behavior as executable scenarios, isolates implementation into vertical slices, and may let inexpensive models work safely in parallel. The conversation closes with Nick demonstrating browser-based infrastructure tutorials that validate real Pomerium configurations, including immediate revocation of an active SSH session, illustrating how interactive environments can reduce onboarding friction while still teaching essential concepts.
Speakers
- Anthony Campolo
- Nick Taylor
- Dev Agrawal
Chapters
00:00:03 - Securing OpenClaw Through an Open-Source Contribution
Anthony welcomes Nick Taylor for his sixth appearance, and Nick recounts recent travel surrounding AI Engineer events and an unexpectedly accepted conference talk. The talk grew from his contribution of Trusted Proxy Auth Mode to OpenClaw, replacing risky authentication patterns with a generic mechanism that can work with products such as Pomerium without becoming vendor-specific.
Nick explains how he proposed the feature, used OpenClaw itself to help implement and test it, and accidentally gave the assistant enough GitHub access to open a pull request. After correcting the workflow and applying least-privilege lessons, he worked through review, merging, bug fixes, and later community improvements. The result became both a feature he uses daily and the foundation of his conference presentation.
00:04:57 - Daily OpenClaw Workflows and Conversation Archives
Dev describes several attempts to use OpenClaw, contrasting its rough onboarding with the smoother experience and memory system he found in Hermes before returning to Codex for its interface. Nick then clarifies that he does not use OpenClaw for highly publicized tasks such as processing enormous inboxes, although he may eventually give it read-only Gmail access to summarize selected newsletters.
His primary workflows involve scheduled jobs, personal tasks, business research, and competitive intelligence. Nick also built ClawSpace, a Pomerium-protected web file explorer with Monaco editing and Markdown previews, so he can inspect and modify agent-generated files without awkward SSH editing. A Discord hook archives conversations whenever he starts a new session, giving him a searchable record similar to saved conversations in consumer AI products.
00:09:16 - Checkpoints, Searchable Agent History, and Phone-Based Building
The group compares Nick’s conversation archive with Entire CLI checkpoints, which connect snapshots of Git commits to the agent discussions that produced them. Nick also highlights work from former Open Sauced colleagues at Paper Compute, including tapes.dev, which proxies model requests and can make previous conversations searchable through embeddings, and the broader Stereo project.
Nick describes live-coding an MCP application through OpenClaw while speaking to the agent in Discord and viewing changes immediately through a secured development server. That experience changed his earlier skepticism about coding from a phone. Rather than typing source code on a tiny screen, he now sees mobile devices as useful control surfaces for directing agents, monitoring work, and making progress away from a conventional workstation.
00:13:14 - Herdr, Remote Agents, and Terminal Abstractions
Nick introduces Herdr, a terminal user interface that clicked with him more readily than graphical terminal workspaces such as cmux. He explains how cmux builds upon libghostty to combine terminal panes and browser views, while Herdr focuses on coordinating local and remote agent sessions through a keyboard-oriented interface that can still accommodate practical graphical needs.
A standout feature solves the common problem of pasting images into agents running on remote machines. Herdr remains active locally, connects to a remote host over SSH, and transfers pasted image data so the remote agent can access it. Anthony explains that he has long used Warp and finds the layers among terminals, multiplexers, libraries, and agent tools confusing, prompting Nick to begin a basic screen-shared walkthrough.
00:17:18 - Navigating Herdr Workspaces and Agent Status
After a remote connection fails at the predictable moment of a live demonstration, Nick opens Herdr locally and shows its tabbed workspaces, panes, themes, and tmux-inspired commands. The interface supports keyboard navigation but also allows mouse clicks, which makes it less intimidating for people who do not want to memorize another large collection of shortcuts.
Nick opens a project, launches an agent, and asks simple questions to demonstrate how Herdr reports whether sessions are working, idle, or blocked. Audible chimes and visible status indicators alert him when an agent needs input, allowing him to continue other work rather than repeatedly checking every pane. The presentation frames Herdr as a manageable coordination layer rather than a system intended to unleash hundreds of unsupervised workers.
00:21:51 - Agent Scale, Workflow Churn, and the AI Bubble
The speakers agree that most practical workloads involve only a handful of top-level agents, even when those agents spawn subagents. Massive parallel runs may suit unusually large refactors or experiments, but Nick rarely needs more than four or five sessions while moving among projects and waiting for independent tasks to finish.
The discussion broadens into the relentless turnover of AI terminology and practices, from prompting and context engineering to loops and graphs. Nick compares it with JavaScript framework churn but argues that AI changes can carry a greater opportunity cost, creating real anxiety about falling behind. Outside the social-media bubble, however, many people are only beginning to use Microsoft Copilot—or have never tried ChatGPT—revealing a striking gap between online discourse and mainstream adoption.
00:26:36 - Iterative Skills, Rubrics, and Scripted Automation
Nick and Anthony discuss creators who publicly refine their AI workflows, then turn to the practical construction of reusable skills. Nick’s interactive-content skill began as a small Markdown file and expanded whenever a session revealed a platform constraint, recurring mistake, or useful convention. He also added a rubric so the agent can evaluate each new guide against consistent standards.
At the end of a working session, Nick asks what was learned and whether the skill or rubric should change. Anthony uses a similar approach in AutoShow, combining deterministic command-line steps with targeted model judgment for tasks such as cleaning OCR artifacts before text-to-speech conversion. They stress that skills are not guarantees: models may ignore instructions, so reliable workflows still require testing, evaluation, and carefully chosen boundaries between scripts and agent decisions.
00:30:34 - Using MCP to Analyze Newsletter Performance
Nick shows One Tip a Week and explains how Beehiv’s read-only MCP integration lets him query newsletter performance without manually inspecting every dashboard view. Although the publication remains relatively small, its open rates commonly exceed 40 percent and sometimes reach 50 percent, figures the group considers unusually strong for email campaigns.
They inspect an issue about mise that earned a healthy open rate but a comparatively weak click-through rate. By comparing titles and previous issues with an agent, Nick concluded that the subject line likely revealed too much, reducing the need to click. Other issues use curiosity-oriented titles such as “Stop typing so much.” He also considers whether highly specialized or non-UI topics perform differently with an audience that includes many JavaScript and frontend developers.
00:35:08 - Designing a Sustainable One-Tip Newsletter
Nick contrasts his current publication with earlier link-roundup newsletters that became repetitive and stressful. Collecting enough noteworthy links before each deadline felt like an obligation, especially because many established newsletters already offered similar curation. He eventually stopped rather than continue a process that was neither distinctive nor enjoyable.
Conversations with other creators helped him shape a simpler premise: one focused development tip each week. He prepared roughly ten issues before launch, giving himself a long buffer and room to rearrange topics without deadline pressure. Although that reserve has since narrowed, the format remains manageable and rewarding. A clear subject, repeatable structure, concise length, early link placement, installation guidance, and a strong tip now provide a sustainable formula supported by encouraging engagement data.
00:39:00 - Reducing AI Anxiety and Avoiding Workflow Theater
Dev explains that he recently unsubscribed from most newsletters, especially AI publications, because constant updates were worsening his anxiety. He argues that someone could ignore the agent ecosystem for six months, return, learn the current practices, and remain productive because many techniques promoted today will have been replaced or renamed by then.
Nick agrees that following developments can reveal useful patterns but questions elaborate setups that may function more as performance than necessity. His preferred skills and MCP servers provide concrete value, yet he recommends first testing how far a standard model harness can go. Dev distinguishes this superficial complexity from structural improvements: tools and frameworks should offer better primitives that agents can reliably combine rather than forcing every developer to maintain a theatrical tower of custom orchestration.
00:43:14 - Framework Choices for Agent-Assisted Development
Asked how agents influence his technology choices, Nick outlines Pomerium’s stack: a Go-based networking and security core with React interfaces, some Redux inherited from the project’s 2019 origins, and a gradual move away from Webpack toward Vite. Older patterns are not necessarily harmful because models have abundant training data for React and Redux.
For new projects, Nick often chooses TanStack tools, Tailwind, Vite or Vite Plus, TanStack Start, and Astro. React remains the most consistently understood frontend framework for models, but he asks how well assistants handle Solid’s JSX syntax and different reactivity model. Dev reports that straightforward Solid interfaces generally work, while acknowledging that more demanding UI refinement would expose the exact places where models confuse Solid conventions with React behavior.
00:46:56 - Keeping Agents Current on Solid Conventions
Anthony shares real-world problems from using agents on Solid applications. Assistants occasionally created isolated state rather than integrating a new control into the project’s global store, and they often preferred older APIs or client-heavy patterns represented more heavily in training data. References to outdated server techniques also required manual correction and refactoring.
The most reliable remedy was focused context: Anthony supplied only the current documentation and explicitly directed the model away from deprecated approaches. The upcoming Solid 2 migration may intensify this challenge until stable guidance and dedicated skills exist. Nick mentions Impeccable, a frontend skill Anthony discovered through the newsletter, then asks whether modern framework teams should ship their own official MCP servers or skills to keep agents aligned with current APIs.
00:50:23 - Versioned Framework Skills with TanStack Intent
Dev surveys emerging approaches to framework-provided agent context, including MCP servers from projects such as Svelte and Angular. Solid does not yet offer a first-party skill, but he is interested in TanStack Intent, which allows libraries to distribute skills inside ordinary npm packages rather than maintaining a separate registry and release process.
Bundling guidance with Solid’s source would keep instructions and examples versioned alongside the exact framework release a project installs. Dev expects any future skill to include substantial code samples, not merely prose, because examples give models concrete patterns to reproduce. He also emphasizes that official framework knowledge is only a foundation: teams must encode their own architecture, file organization, preferred primitives, third-party integrations, and conventions to obtain consistently appropriate code.
00:54:58 - Source-Derived Documentation and Agent-Friendly Setup
Nick highlights open source as a major advantage for agent-assisted development because models can inspect the actual implementation when documentation is incomplete or an error message needs explanation. He combines source access with documentation MCP servers and a read-only Kubernetes MCP for his home lab, creating a rich but controlled troubleshooting environment.
Dev wants more agent context to be generated directly from source code, reducing the maintenance burden of separate docs and skills that can drift out of date. Comments, JSDoc, and language-native documentation tools keep explanations near the implementation. Nick adds that documentation now serves both humans and models, making Markdown delivery and token-efficient formats important. He increasingly asks an assistant to scaffold documented systems, then focuses his attention on the parts that genuinely require architectural understanding.
01:00:59 - Specter and Executable Specification-Driven Development
The conversation shifts to Specter, Dev’s attempt to make specification-driven development more useful for agents. He supports the core idea of describing desired behavior before implementation but rejects the common workflow of writing one giant Markdown document and handing it to an agent with a blank codebase.
Specter aims to make specifications structural, executable, and testable. An agent should receive constrained slices with clear guarantees rather than inventing glue code and architecture from scratch. Because AI can generate code far faster than humans can review it, Dev wants behavior captured in specifications that automatically verify the implementation. Independent vertical slices could also permit safe parallel work, since agents assigned to separate slices would be prevented by the architecture from modifying tightly coupled areas.
01:06:08 - Token Economics and Smaller Models for Independent Slices
Nick notes that headline-grabbing experiments involving hundreds or thousands of agents are financially inaccessible to most developers. Researchers and well-funded engineers can burn enormous token budgets because model providers support their efforts to test limits, while students and ordinary teams must make decisions under much stricter cost constraints.
The group discusses expensive migrations such as Bun’s Rust work and the importance of strong tests, clear targets, and expert oversight. Dev connects those lessons to Specter: if a large application becomes many tiny, well-specified slices with deterministic tests, inexpensive models can handle most implementation work. Failed slices can be retried or escalated selectively to smarter models, reserving costly reasoning for the genuinely difficult portions instead of applying the largest model everywhere.
01:11:55 - Open Models, OCR Economics, and Native Apple Silicon Inference
Nick explains why he began using Devin after receiving temporary access to its higher-priced plan and why he continued on a smaller plan afterward. He values its responsive interface and access to open models, while workplace subscriptions still make Claude his default during the day. He also mentions Command Code and reports good results from Kimi models.
Anthony identifies Kimi as an especially cost-effective OCR option, approaching the quality of premium models at a fraction of the price for book-length work. Nick then introduces Native, a macOS application designed to run MLX models through Apple Silicon’s unified memory and integrate with agent harnesses. His early tests with 14-billion-parameter models work but feel slower than hosted services, suggesting that smaller or more aggressively quantized variants may be preferable.
01:16:19 - Local Endpoints and Preparing the Specter Demonstration
Nick continues examining Native’s local chat interface, configuration options, and integrations with tools such as OpenCode, Codex, and Claude Code. Because many harnesses can point at OpenAI-compatible endpoints, developers can substitute local or hosted models, proxy requests, or even use mock responses for testing without replacing the surrounding workflow.
The group then decides how to use the remaining time. Anthony asks about Nick’s interactive guides, but Nick wants a closer look at Specter first. Dev prepares a live demonstration while explaining that the project builds on ideas he encountered in Otto, an ambitious specification-to-application system developed at a previous consulting company. Specter represents his smaller, more focused interpretation of those long-running concepts.
01:21:19 - Specter Commands, Queries, and Behavioral Scenarios
Dev opens a Solid to-do application backed by Specter. The client communicates through a familiar command-and-query style: queries retrieve to-dos, while commands add, remove, or change their completion status. Business logic is organized under feature directories as independent vertical slices, each containing a specification and an implementation.
Specifications describe behavior with given, when, and then-style scenarios represented by simple objects and strings. One add-to-do scenario expects surrounding spaces to be trimmed, while removal scenarios cover existing, missing, and previously removed items. These examples become executable checks rather than passive prose. Because the conceptual format is language-neutral, Dev is building Specter implementations in TypeScript, Rust, and Go and imagines shared observability tools and generated diagrams across them.
01:25:58 - Independent Slice Implementations and Validation Boundaries
Dev walks through an implementation file containing input validation, event application handlers, database updates, and command handling. Each slice imports shared libraries and event definitions but never reaches into another slice’s implementation, preserving the independence required for safe parallel agent work. In this example, SQLite stores state, while Zod-like schemas validate inputs.
Nick asks whether Standard Schema could reduce dependence on a single JavaScript validation library. Dev clarifies that schemas belong to the implementation rather than the authoritative specification, so each language or project may choose its own validation technology. Standard Schema can still support the TypeScript package, but Specter’s behavior descriptions remain plain data. This separation keeps domain expectations portable while leaving infrastructure and validation choices to the implementation layer.
01:29:38 - Specifications as the Authoritative View of an Application
Dev emphasizes the conceptual boundary between spec.ts and impl.ts. Reviewers should treat the specification as the source of truth, confirming that its scenarios accurately express expected behavior. Agents can then own the implementation work, repeatedly running tests and correcting code until every scenario passes without requiring humans to inspect every generated line.
This arrangement also creates a compact map of the application. A developer or model can read the specification files to understand broad business behavior without scanning an entire tangled codebase. Dev ultimately wants to render these scenarios as approachable visual or natural-language artifacts so nontechnical stakeholders can identify missing cases. The domain rule itself—such as what happens when an already removed to-do is removed again—requires no knowledge of databases or framework internals.
01:34:21 - Runtime Scenario Tests and Minimal Code Generation
Nick asks whether Specter generates conventional test files from each specification. Dev explains that a small Vitest entry point imports a helper that iterates over scenario data at runtime, applies any prerequisite events, invokes the implementation with the specified input, and compares the resulting events with the expected output.
The tests therefore behave like checks around pure functions without requiring an AI system or a separate compilation phase to author each case. Dev generally avoids adding build steps when ordinary imports and runtime iteration are sufficient. He may later add TanStack Router-style automatic registration so new specification and implementation files gain type safety and appear in the right registries, but the current design remains intentionally simple and deterministic.
01:38:20 - Frontend State Machines and the Specter Website
Nick summarizes a possible mature workflow: specifications establish deterministic boundaries, agents implement slices under organizational standards, tests force behavioral correctness, and humans review efficiency or maintainability rather than basic feature compliance. He initially sees the strongest fit on the backend, where behavior is easier to validate than visual presentation.
Dev explains that frontend usage could resemble XState or Redux. Events, current state, and next-state transitions can be specified and tested in the same manner, with in-memory objects replacing a database. Because Specter has no infrastructure opinion, the pattern can govern either server data or client state. Dev also shows the newly released, heavily agent-generated project website, receives suggestions about syntax highlighting, and notes that its examples and documentation still need refinement.
01:44:26 - Trying Specter and Introducing Interactive Infrastructure Labs
Dev explains that Specter 0.3 is available on GitHub, although the create-specter package still targets an older release. He recommends asking an agent to clone and summarize the repository, reflecting the group’s preference for source-guided onboarding. His current experiment asks an agent to rebuild an open-source T3 Code fork with Specter, a suitable test because the original already follows event-sourced and CQRS-inspired patterns.
Nick then begins a rapid presentation of interactive guides built for Pomerium using iximiuz Labs, a browser platform resembling CodeSandbox for infrastructure. Pomerium is always self-hosted, which can make evaluation difficult for people who lack cloud approval, networking experience, or control over home-router ports. Disposable browser environments remove those barriers while preserving hands-on instruction.
01:49:54 - Configuring a Browser-Based Pomerium Environment
Nick briefly moves sensitive credentials off-screen while configuring GitHub as the identity provider for the lab. He stresses that the exercise is not intended as blind copy-and-paste automation: explanatory text teaches what each component does, while prepared commands spare learners from manually reproducing long configuration files and Docker Compose definitions.
The lab creates Pomerium routes from accessible addresses to protected internal resources, applies an email-based access policy, launches containers, and verifies actual system state. Checkpoints inspect certificates, configuration, and logs rather than merely recording that the learner clicked Next. The format also works well for product demonstrations and presales conversations because prospective users can reproduce the behavior later without requesting an environment from Nick’s team.
01:54:01 - Live SSH Authorization and Immediate Policy Revocation
With the containers running, Nick demonstrates native SSH protected by Pomerium. The terminal begins a normal SSH connection, opens an interactive browser authorization flow through GitHub, and returns him to a live server session after access is approved. The entire infrastructure environment, terminal, authentication flow, and validation system operate inside browser tabs.
He then edits the policy by introducing a typo into his permitted email address. Because Pomerium evaluates identity and policy continuously, the already active SSH session disconnects immediately rather than remaining valid until a later login. Restoring the correct email allows him to reconnect. Lab checkpoints inspect the real denial and disconnection logs, turning a striking security capability into a reproducible exercise rather than a prerecorded claim.
01:59:23 - Interactive Education, Product Awareness, and Infrastructure Security
Nick says the longer course is new, though users have already tried individual tutorials. He plans to promote the material more actively and seek structured feedback, possibly offering approved incentives. Public accessibility also means models can ingest the lessons when learning how Pomerium works, while human learners still gain essential infrastructure fundamentals through guided practice.
Anthony compares the validated exercises to freeCodeCamp, and Nick explains that interactive guides have become a major focus of his developer-relations work. A colleague originally recommended the platform to help him learn Kubernetes and containers after his career moved from application and frontend development into infrastructure security. That transition now feels timely as AI agents increase demand for sandboxes, credential isolation, secure proxies, and carefully controlled access to external systems.
02:03:42 - Future Live Coding and Closing Announcements
Anthony highlights Pomerium, Nick’s online profiles, and the One Tip a Week newsletter. Nick proposes returning for a deeper Specter session, potentially live-coding with Dev to move the project forward. Dev enthusiastically agrees and also considers producing a separate video demonstrating the framework’s development and practical use.
The hosts preview upcoming conversations about Marko 6 and Turso, briefly discussing Turso’s SQLite work, Rust migration, and experiments that attracted criticism despite being exploratory. They thank Nick for returning and invite him back whenever travel permits. Anthony closes the stream after previewing the next guests. The final spoken timestamp is 02:07:11, establishing a total transcript duration of 02:07:11.
Resources and Links
- youtube.com/watch?v=xg1zNlzw7Jk
- tapes.dev
- herdr.dev
- docs.devin.ai/cli
- onetipaweek.com
- impeccable.style
- tanstack.com/intent/latest
- devagrawal09.github.io/specter
- command.new
- blaizzy.github.io/nativ
- labs.iximiuz.com/v/pomerium
Transcript
00:00:03 - Anthony Campolo
And we're live. Welcome back everyone. We were just talking before the stream trying to figure out how many episodes Nicky T has done. This is Nicky T's 6th appearance on the stream. How you doing, man?
00:00:17 - Nick Taylor
Doing pretty good, doing pretty good. Uh, a little later here but not really that tired. Uh, I'm actually getting ready. I'm heading to DevRelCon in New York city tomorrow. So I gotta— I mean, I have most of my laundry done, so I just, just gotta throw a bunch of stuff in a, in a mini bag. It's like, uh, not, not like last— I actually just got back from San Francisco on Saturday. I was—
00:00:41 - Anthony Campolo
if you went to the AI, uh, World Fair?
00:00:45 - Nick Taylor
No, I didn't make it to that because, uh, I actually was at 2 of them. So like, originally I was supposed to go to AI Engineer Miami and like just attend And then I got a talk accepted for AI Engineer Europe. So obviously good idea to give that talk. So that kind of came out of nowhere last minute. I was just chatting with Swyx and he was saying he was looking for people to do on the OpenClaw track. And I just dropped him a DM. I said, I added this security feature to OpenClaw. I don't know if this is the kind of stuff you're looking for. And then He's like, yeah. Initially he was like, yeah, that could be good. And then there's a bit of radio silence because I think obviously a lot of people, it's very tough to get a talk accepted at any of these. And then he got back to me eventually. He's like, yeah, you should give this talk. So then I basically talked about, there's this security feature I added. It's called Trusted Proxy Auth Mode. So I don't know if you've ever used OpenClaw, but the defaults are like, Uh, when you set up auth, it's just you put your hard code a token and then it's like saved in the query string. And typically this is not something you should do on the internet. This is if you're on a private network or maybe people use that with Tailscale. But, but like part of my job, you know, was DevRel is like, hey, can I secure this thing with Pomerium where I work? So, you know, of course I tried to secure OpenClaw and I also wanted to learn about it. And then So basically I got it secured with it and then I proposed it is a generic feature. Like it wasn't like just a Pomerium feature because that I don't think would fly. And it's not a— that's just not being a good netizen anyways in terms of open source.
00:02:37 - Anthony Campolo
So you built open up a security feature into OpenClaw directly.
00:02:42 - Nick Taylor
Yeah. So I opened up the issue and then Peter, this was like, it's funny, I opened this up, this issue, and it was like issue, I think, 1,700. And then like, I think I went on vacation and I came back and then all of a sudden the issues and PRs were at like 15,000 and he had replied and he's like, yeah, no, let's, let's do this. And then so basically I started off my first foray into OpenClaw was like, I got it set up on my home network. And then I have a mini PC with some stuff for work, and I actually used OpenClaw to help me build out the feature. And people probably run into, I gave my AI assistant too much permission. I added the GitHub CLI and then basically nothing went wrong. We just basically, we looked at the spec, did back and forth, built out the feature. Started adding tests and stuff, and then I went to bed and I woke up and it's like, oh, I put up a PR for you. And I was like, no, it's like I didn't want— so I mean, I should have known better, but basically least privileged for that. So anyways, I just put the PR in a draft mode and then eventually I think I had to close it and then reopen a new one because I couldn't edit it for some reason. I don't know why, but Long story short, put up the PR, Peter reviewed it. This was before he could no longer really review PRs, I think. And he's like, yeah, this is good, let's do it. And then after it got merged, there was a couple of bugs and also people have been improving that feature since. So I'm not going to take credit for all of it, but it's a feature I use. That's how I have my OpenClaw secured now. That's kind of what the talk was about. And then like how I build with OpenClaw. So it was, it's kind of cool all around, you know, like one, I didn't think I would get a feature into OpenClaw. And then 2, I didn't think I'd be giving a talk about it. And then, and yeah, and I use my OpenClaw every day now. So that's super cool.
00:04:57 - Anthony Campolo
Have you used OpenClaw, Dev?
00:05:01 - Dev Agrawal
I honestly, I tried using OpenClaw a few different times. I didn't really have a great experience initially in like most of them. It's not secure, not security-wise, it's just like, um, something that never quite, uh, like fully worked. And then I tried Hermes this one time and it just like the first time it worked almost flawlessly and I was just like, okay, these people know how to build a product, uh, in a much better way. Um, like it, uh, like it onboards without a lot of issues. It's pretty nice. And the memory system, it's pretty good, honestly. So I've just been using that for a while. Uh, I used it for a few months. Um, and then I think now I'm kind of back to just using Codex.
00:05:51 - Nick Taylor
Um, okay.
00:05:52 - Dev Agrawal
Yeah. Because I just like the UI better.
00:05:56 - Anthony Campolo
Yeah. Nick, what do you use your OpenClaw for?
00:05:59 - Nick Taylor
Yeah, so I don't use it for the stereotypical stuff that everybody claims, like it does all my emails and all that. Like, one, I don't know about you guys, but I, I don't have tens of thousands of emails. Like, I, yes, I get more emails maybe on my work email for stuff, and I have like newsletter stuff, but like, I, I don't really, like, I'm not at a scale with email that I need something to sort it all. I, I am gonna eventually, because I, I started putting all my newsletters on a separate Gmail account, and I'm gonna add like a I'm going to create an API key for Gmail where it's just read-only so that I can basically aggregate stuff because I just don't have time to read all these newsletters either. So I'm going to use the OpenClaw eventually to just say summarize or pull out what you think is worthwhile based on a skill I write, which is some criteria for stuff, and then just summarize.
00:06:53 - Anthony Campolo
Kind of working on, on AutoShow.
00:06:55 - Nick Taylor
Oh, nice. Okay, cool. But the biggest thing I use it for is 2 things, mainly cron So I use it for, because we're a security company Pomerium, but my CEO is still like, I don't know, even like in our GCP at a sandbox, he's like, I don't know if I want OpenClaw in our stuff right now. So I basically do business and like competitive intelligence, and then I just literally copy it. I created this thing called ClawSpace, which is, it's not It doesn't have to be OpenClaw specific, but basically it's a file explorer web-based that I have secured with Pomerium as well. But basically I added the Monaco editor and it's just essentially dynamic file explorer. So if you add a new folder, it's going to pick it up and then I can actually view files as Markdown or I can preview them and the Monaco editor lets me edit them. So I could actually chat with my OpenClaw and say like, Oh, I made some changes to the file, you know, because you can obviously SSH in, do vi, and it's— that's kind of clunky though, to be honest. So yeah, I just went with the Monaco editor where I could do just enough stuff where it's actually useful to me. Like, that's why I created it. So, so I use that too. And then I use it for crons for personal and work stuff. And then the other thing is I just kind of treat it like a ChatGPT or Claude AI in terms of just regular chat, asking some questions. And I got a little, not fancy, but obviously ChatGPT or Claude.ai, it gets your saved conversations. What I created was a hook. Anytime you do /new or clear, whatever conversation up until the last /new, it archives it all into a thread in a Discord server that I have. So I basically can retain literally the entire conversations. The only, and it's not exactly like a ChatGPT obviously, but I can actually literally retain all of the conversation I had then assuming, you know, I do a /new because I could, if I forget to do it, then I'm just going to get probably a mix of conversations, but I find that useful too if I have to search stuff.
00:09:16 - Anthony Campolo
Well, I know you had Razelle on to talk about the entire CLI and that kind of does that, right?
00:09:24 - Nick Taylor
Yeah, well, it's that— that's kind of— yeah, in the context of like coding, yes, because it's like you have Git commits, they're called checkpoints, I believe. So you have Git commits, and then if you're using an agent, uh, or multiple agents, all those conversations up until a point where you say I want to create a checkpoint, they're retained. I'm not sure how the integration works exactly in terms of pulling the convos, but From what I understood, yeah, you'll say like, this is checkpoint and you give it a name. So it's not a PR, it's really, it's more, it feels like more like a snapshot in time of this is all the code I did up until this point that happened to be commits in Git, and here's the related conversations that got me to this point. So, so where's your—
00:10:13 - Anthony Campolo
definitely do that history.
00:10:15 - Nick Taylor
Yeah, like it could be code related, but it doesn't have to be. So it's a little different in that sense, but like There's also cool stuff like my, my old crew from Open Sauced, B Dougie and John. They're working on some cool stuff over at Paper Compute. Yeah, yeah. They got some stuff like tapes.dev and Stereo. And so like, not sure what the status of things are. I grabbed a coffee with B Dougie last week, but like the tapes.dev repo is— I'm pretty sure that's open source and it's like The version I last used, it would basically proxy all your calls, assuming you had an API key for, say, Anthropic or OpenAI. And because they proxy it, they can— they were basically— the last time I used it, it would— you could obviously slurp up your conversations and then it could use embeddings to make your past conversations searchable. I think that's kind of the state of where tapes.dev is. Stereo, I think, is a bigger project. I haven't really messed around with that, but they're doing some cool stuff over there, so I would definitely keep an eye on that too. But yeah, the main things are that's what I find useful for OpenClaw, and I do literally use it every day. You can definitely build stuff with it too. The way I was doing it, because I live coded an MCP app at the AI engineer in my OpenClaw and I basically exposed a port that was secured with Pomerium. I wasn't worried about anybody breaking in or anything, but I think it's cool where you're in your agent and you're just saying, build me something. It's not even a deploy preview. It's just literally like I had a dev server running so I could make changes. Seeing ChatGPT, the MCP app change immediately, and I'm just talking in Discord to it. It was like a pretty cool flow, I think. And I don't know about either of you, but I remember a few years ago, well, Replit's pretty big now, but I remember when they first mentioned, hey, just code on your phone. And I'm like, why the hell would I want to do that? The DX would be terrible. And obviously different generations, you know, like they'll, they'll, that's what they find normal probably. But also I'm kind of phone pilled in terms of like, you know, orchestrating and building things now. It's kind of neat. So I don't know, I, I see Dev nodding, so I'm, I feel like you've had a similar experience.
00:13:01 - Anthony Campolo
Yeah, I still don't have any of my agents set up on my phone yet, but I always, when I like go to bed sometimes, I'm like, man, I wish I could finish this last prompt in bed. So that's like what drives me. I'll probably eventually get it set up just for that reason.
00:13:14 - Nick Taylor
Yeah, and that's, uh, it kind of brings like a nice tangent to, uh, or not segue to, uh, I've been using this tool called Herdr. It's herdr.dev if you want to share the link. But, um, there's, there's like, I, I tried like, I use Ghostty all the time. That's my go-to terminal right now. And I tried cmux.dev And Cmux is using libghostty, which is the same library that Mitchell Hashimoto built so that you can just basically use UI in Ghostty, but you can embed it elsewhere. So somebody basically kind of made a Ghostty where you could do horizontal panes as well and also bring in browser windows and stuff. And that's cmux.dev. And I tried it and it looks cool, but I don't know why, because before I was working in infrastructure security, I did a lot of application dev, a lot of frontend dev, so very graphical stuff. And for some reason, I'm totally loving Herder, which is a TUI. I mean, obviously, I'm in Claude Code and stuff and CLIs for agentic stuff, but for whatever reason, the The Tuya Herder, it, I don't know, just clicked with me better than like CMUX or something. And there's, there's some like really cool features. Like, I don't know if you've ever tried to paste an image and you're like, oh yeah, I can't do that. It's a remote agent. Like, you just can't. And they solve that problem. So they have— so you have Herder running on your machine. So like acting as the client, but they have a remote mode. So you can actually— you're still running Herder locally. But then it also, it'll SSH to your box where you have your remote agents and you have to have Herder set up there and it instructs you to do all this stuff. And essentially it syncs. And I think the way it works is they use SCP to copy over, like the, you do Ctrl+V and then you're able to, I think it just sends the binary, it just sends the blob over the wire. And it's kind of neat because like I don't know. I mean, if you're using a remote agent, it is— I've done it so many times where I go to paste something and I'm like, goddamn it. Anyways, that's a cool feature on its own, but I could load it up, or if you want to load it up, Anthony or Dev.
00:15:49 - Anthony Campolo
You should screen share.
00:15:51 - Nick Taylor
Yeah.
00:15:51 - Anthony Campolo
I'll just say in terms of everything you just talked about, all these different terminal things, I've heard people talk about all of them and I hear hear about them on X a lot. Um, I've been using Warp as my terminal for like, like 5 years now, pretty much since it came out.
00:16:04 - Nick Taylor
Okay. Yeah, yeah.
00:16:05 - Anthony Campolo
I've never used any of these like super terminal-heavy kind of things. I never feel like I have a good idea of what level of abstraction they sit at. People talk about combining them also, so, so I never really know like what's, what's the terminal, what's the thing that adds to the terminal, and like, so yeah. And then Herder, you know, what makes that different all these. So I'm a total noob here, so feel free to go total basics.
00:16:30 - Nick Taylor
Just let me log in. This is a Primarium thing. This is just how I secure SSH, but this is just a workaround I do to use because I use Primarium to harden access to my SSH connections, but you can still use Herder. So I'm gonna do Herder, and this is gonna be a remote one. And so just to step back, so what are you remoting into?
00:16:55 - Anthony Campolo
Like, is this a dev machine you have set up on some hosting service, or like, what is happening here?
00:17:01 - Nick Taylor
Uh, this one here, this is— I have too many PCs in my office. They're— it's where I run a Kubernetes cluster. This is stuff I was just— I need to learn stuff for work. And of course it's not connecting now because it's demo time, but let's just go to regular Herder. So this is me loading up to a machine that's on your own network.
00:17:18 - Anthony Campolo
This is a computer you own, you're SSHing into.
00:17:21 - Nick Taylor
Yeah, but it doesn't have to be. You could SSH to a DigitalOcean box, AWS, wherever. As long as you can get to it, you can SSH to it. So, this is it locally. I've been working on some interactive guides. There's tabs here. So, I guess a couple things. One, the theme, I just have this theme. It's kind of pumpkin-like. I forget what it is, but that doesn't really matter. But the cool thing is, So I'm not a tmux expert still, but if you do Ctrl+B, which is like tmux, and then I'm just gonna do question mark, and you can see all the things you can do here. So the first thing is most of the things like I know how to create a new tab and stuff or move around, that's fine. But if you're not like a keyboard person, it actually works with a mouse. So now I'm just clicking with the mouse and I can change panes, I can change tabs. So that's kind of nice too. I kind of started using that initially, but then I can do Ctrl+B and then I can switch. Of course, I forget what it is now, but what is it? No, I don't want to enable that. Okay, here, switch tab. How did I forget that? Work tabs.
00:18:39 - Anthony Campolo
Yeah, I always avoid any new things that has new Key commands. I got so many key commands I remember for so many things already. Okay.
00:18:50 - Nick Taylor
Yeah, it is. No, it was right.
00:18:51 - Anthony Campolo
Okay.
00:18:51 - Nick Taylor
Yeah. I don't know why it wasn't working, but so I can just switch over here. I can do Ctrl+B, switch to the other one. But again, you can just click on the mouse if that's quicker, and then you're in the CLI and stuff. And then you can have different workspaces over here. But the other things that's neat, so let's just open up a new one. Let's just call it— I'll go to— I don't know, I'll just make up something, YOLO. And let's just go to dev.
00:19:25 - Dev Agrawal
Where am I?
00:19:26 - Anthony Campolo
Okay, OSS.
00:19:31 - Nick Taylor
Nope, where is my stuff? All right, hold on a sec. Let me just go this way.
00:19:44 - Dev Agrawal
DevOps Sass.
00:19:47 - Nick Taylor
Okay, so this is my, just my own website and stuff, but I can do stuff like I'll ask a question. What is this?
00:19:56 - Dev Agrawal
Whoops.
00:19:57 - Nick Taylor
Let's load up Devin. And I'm just going to ask something silly like, what is the website made of? It's an Astro site. That's not the point. The point is you can see on the left here in the panes, you see it's working. Other ones are idle. And if it has to ask me something, it's gonna— you won't hear it, but it'll make a noise like a chime or something. You can change it, but you can kind of be doing stuff and then you can kind of just see like, okay, that one's idle, this one's working. And then if there's a question, it'll prompt me. So, let's see here. Let's just say, convert this Go project to TypeScript. I don't know. Let's just see what it says. It's probably going to ask me a question. I'm just waiting for it to make a noise so I can see. It's razzle-dazzling at the moment.
00:20:58 - Anthony Campolo
Do you use Devin frequently?
00:21:01 - Nick Taylor
Uh, I, I started using it. I, I ended up buying— okay, here, uh, I'll talk about Devin in a second, but okay. So I, I just heard a chime and it said blocked. So then I can come over here. Oh, it's asking me something and then I can respond. But this one's still going and if it has a question or this one's idle. So I find that useful because you can be doing stuff and then I just hear that little— it goes like Dang. And then I can just go, oh, something's going on, let me go back in, because then I can be doing other stuff. That said, I don't know about either of you, I'm not running like 1,000 agents or anything. Like, I, I know like, you know, Anthropic or Stuy Peter doing that, but I really don't know a lot of people aside from them that are like even running more than 10 agents, to be honest. Like I'd say most, probably 4 or 5 at a time.
00:21:51 - Anthony Campolo
And that's just because I'm, you know, just multitasking between projects.
00:21:56 - Nick Taylor
Yeah. Like, yeah, I think the most I've run is like 5 and then those things might run sub-agents, but like actual agents themselves, like I just, the work I'm doing, I don't need to spin up 100 agents or 1,000 agents. Yeah.
00:22:11 - Anthony Campolo
Like you'd only really need that if you're doing like a large-scale refactor, like a very, very specific kind of work. Workload.
00:22:18 - Nick Taylor
Yeah, well, that's like all things AI keeps changing, right? First it was prompting, then it's contact engineering, and then, then it's Ralph loops. Now it's just loop engineering, and now apparently loop engineering is dead. It's graph, all graph stuff now. Like, it's, it's like, it's like a joke that's being memed into existence. Pretty much. Yeah, but the, but the, but the thing I find not weird, but that's different is because we've all obviously worked in the JavaScript ecosystem, a lot of churn in there at certain points. Yeah, we're used to it. But it was overwhelming. But then at one point I'm just like, I'm just not going to try and keep up with everything. I'll skim stuff still when things happen, but when I really need to dig in something, I'll do it. This is like the JS ecosystem, but I find it's a lot more different with AI because a lot of times when things change, you probably should be paying attention. And it, I, I'm not that I'm a really stressed out person, but I find it causes a lot of anxiety in people. Like there's the general joke about not going to make it, but when it's literally changing all the time, there's more opportunity cost to not switching than there was from going from one JavaScript framework to another. You know, but that, but that said, like, I don't know about either of you, but like, you know, I'm living in this Twitter bubble where the constant churn of like AI practices, you go out, you know, you go touch grass and then you go grab a beer with somebody who doesn't work in your field and they're like, yeah, we just got Copilot on our Microsoft 365, you know, like, so, you know, there's like such a weird disconnect, you know what I mean? Like, And like, obviously not all those people are necessarily doing software development, but like, it just, I don't know.
00:24:10 - Anthony Campolo
I just find, you know, that, I mean, I was, I was at a, my, my wife's had a, her gym had a party, like an annual party this weekend that I went to. And I was talking to this one lady and she had never even used ChatGPT, not once, never used it. So I was like, you know, it's where a lot of people are at.
00:24:29 - Nick Taylor
Yeah, so like, you know, for all the not gonna make it jokes and like feeling behind, I still feel like relatively up to date, you know what I mean?
00:24:39 - Anthony Campolo
But it's still just by the nature of doing what you do and being a content creator, being interested in the new stuff and paying attention to social media, you're gonna be like— you're, you're what— you're, um, Malcolm Gladwell had like a term for people, or maybe it was Adam Grant, in terms like influencers. Like, you're the, the person that you learn about stuff and people learn about it from you, you know?
00:25:02 - Nick Taylor
Yeah. And there's obviously, like, obviously bigger, bigger people than us, but like, like, I really like— I don't keep up with all of it, but I really like a lot of the stuff Dex Horthy talks about. Um, he seems pretty knowledgeable.
00:25:16 - Anthony Campolo
And, and say that again.
00:25:18 - Nick Taylor
Uh, Dex Horthy. Uh, he His avatar on Twitter's like this comic book face, but he's got like a nice— well, he has a real twirly mustache in real life, but he kind of coined context engineering. Yeah, actually he was on the Pragmatic Engineer podcast. Yeah, but I honestly don't really know him, but when I was in San Francisco last year, Anytime I'm in San Francisco, I just try to attend as many things as possible. And I ended up at AI Tinkerers and some ex-Netlify, like the guys from Maastra, because they're ex-Gatsby, ex-Netlify. Sam was giving a talk, but Dex runs the AI Tinkerers in San Francisco. And so that's where I first met him. I mean, I only talked to him briefly, but he seemed super cool and chill and he's like, oh yeah, come on in and stuff. But he's, he's got a lot of great insights. Um, you know, Swix, obviously. I, I listen to the Layton podcast pretty often too. But, uh, you know, yeah, yeah. You know, what is, is it, it's no longer Grill Me. I forget what his skill is now.
00:26:36 - Anthony Campolo
It keeps Wayfinder, I think.
00:26:38 - Nick Taylor
Yeah. But, uh, yeah, I just, I don't, I haven't used any of his skills.
00:26:42 - Anthony Campolo
I just find it interesting seeing his process of how he creates them and his workflows and stuff.
00:26:48 - Nick Taylor
Yeah. Well, it's like, yeah, and obviously he's an excellent teacher as well, but I find for skills, so for example, I've been building out these interactive content guides and as I build them out, it's like, okay, yeah, don't do this next time. I basically started off with a pretty bare bones skill. I call it just my interactive content skill. And then like, as I've been doing things or I discover things about the platform I'm working in, it's like I keep adding stuff to it. And I've also created a rubric. So like the skill will run and then it'll evaluate like this, the next piece of interactive content I'm writing based on the rubric. And then like, I kind of do, I'm not alone in this, I know, but like when I finish a session and like I go to commit stuff, I'm like, something along the lines of like, what did we learn in this session? Is there anything we could put in the rubric or in the skill? You know, just kind of a rinse repeat. And then, you know, not just for interactive guides, but for anything, like the more you improve those things, I find it's just easier to crank out stuff. But that said, it's just a markdown file, and it doesn't mean that your LLM is gonna adhere to it or your agent. It's like, Right.
00:28:09 - Anthony Campolo
Yeah. You have to have a way of actually testing it and figuring out whether the skill's working or not and how to keep it up.
00:28:14 - Nick Taylor
Yeah. Like, like generally I find it does everything that's in the skill for me, but you know what I mean? It's not guaranteed. Like, uh, so, and it is kind of funny that like, like the world is, is all built around Markdown files at the moment.
00:28:32 - Anthony Campolo
It really is. Yeah. Yeah, yeah, I have a couple skills I've been using with AutoShow because like the CLI will, it's really good for like deterministic kind of stuff, but there will be sometimes where I'll have a certain task, like I have this, you know, OCR extracted PDF text that has like a couple weird artifacts and I need it to just like fix a couple of those weird artifacts, like pull out page numbers or stuff and things that it would be hard to write a script to do. But if you just get an LLM to look at it, then that's good. So I'll write skills where it will like first do all the CLI stuff to like extract out the text, but then do a final polish so that it's ready for text-to-speech. So it's, I find it's good for when you have a much like scripts kind of workflow. There's a couple pieces that need to connect them that are harder to automate. If you put all that in a skill, then it's good because then it's mostly just running scripts and there's only a couple where it has to actually step outside, like do agent type stuff.
00:29:29 - Nick Taylor
Yeah, no, it's, I, I definitely find the skills super helpful. I do. I also use MCPs, not for everything, but there's some key ones I use. Like, so I have a newsletter. There's— I'm not on a paid plan with Beehive. Just, it doesn't make sense for me to pay for it right now because I don't have enough subscribers. Like, like the $49 a month or whatever would just not be worth it. But they still have an MCP and I can use it for read-only stuff. So I use it to just, you know, I can say like, oh, how did it— like, I can obviously go to the dashboard and I can see like the metrics and stuff, but I also use it to just like, as I'm building out new ones, like I can say like, you know, let's, let's see, you know, why, why did this one perform so well over the other one? Because like generally I have pretty good open rates. They're like, it's typically, it's always over 40%. Usually closer between 45 and 50%, which—
00:30:34 - Anthony Campolo
Pull up your newsletter since we're talking about it.
00:30:36 - Nick Taylor
Yeah, yeah, yeah, yeah, yeah. Nothing, nothing to hide here.
00:30:41 - Anthony Campolo
This is a tip of the week.
00:30:43 - Nick Taylor
Yeah. So I got Ice Cube in the background playing on my Spotify here. Where are we at? So yeah, no, this is, this is it. onetipaweek.com. But, um, but this, this is not so much what I want to show. It's more the, the actual dashboards. The, so like I was saying, I don't have a lot of subscribers yet. That said, it's, it keeps growing. I'm happy with it. I'm not like stressed out about that or anything.
00:31:18 - Anthony Campolo
Subscriber, loyal reader.
00:31:21 - Nick Taylor
So you can see here, like a lot of times, you know, there's generally, there's always like in the 40s here. Like, see, this one was like 50% open rate, which I've spoken to other people that have dev newsletters or even newsletters in general. And like, these are kind of insane numbers for open rate.
00:31:41 - Anthony Campolo
And I mean, open rates on a lot of newsletters, just email campaigns in general, usually like 10% or less.
00:31:47 - Nick Taylor
Yeah. So like the open rate—
00:31:49 - Anthony Campolo
spam and junk in their emails, you know?
00:31:52 - Nick Taylor
Yeah. So the open rates are all pretty good. The click-through rates are generally pretty good, but there's some low ones. So like here, and this is, this is kind of like, this is where I did some digging. I'm like, this one was like pretty low, 5.56% click-through rate, but noticed that the open rate was still really good. So it's not like people are just like, I'm not opening the newsletter. And I kind of deduced with chatting with my agent that this one here, this was a tool called Meese. It allows you to just, I know you both used NVM or FNM or whatever you use for—
00:32:36 - Anthony Campolo
Yeah, it's great. Even a lot of different language runtimes.
00:32:40 - Nick Taylor
Yeah, exactly. My Astro site, I'm using Vite Plus at the moment, but But like, yeah, Meese is really good if you're like, if it's like multi-language typically, or people that aren't in the JavaScript ecosystem, like somebody in the Go or Ruby ecosystem might use this. But I was like, you know, I just couldn't figure out like, why did this one not pop? And came to the conclusion after chatting with the agent that I gave away too much in the title. Like that's what it seemed to be because we compared it to other titles in the like other posts. Like if we come here, like, like, you know, like here, this one, stop typing so much.
00:33:24 - Anthony Campolo
Yeah.
00:33:25 - Nick Taylor
Yeah. You know, like, and the, the open rate's like 16.85. Uh, this, the other thing I've noticed is, um, sometimes 'Cause I'm not trying to do just JavaScript tips because yes, I did a lot of Node and TypeScript and just frontend, but the audience really is any developer. And I think sometimes some of them are maybe too non-UI specific, and I think that's why sometimes they don't do as well. They still get a pretty good open rate and stuff, but But my point is, with the MCP, I've been able to just kind of dig into this stuff and figure out. I do have a structure to them now. It always starts the same. This week's tip of the week is, and then I have the link to the thing right away. I try to keep them not too long. Then it always wraps up. Sometimes there's screenshots if it makes sense. Then usually a quick how to install, and then it wraps up like that. But, and I'm mentioning this too because like Dev was saying, like Dev's getting back into doing video content. He's like, maybe the newsletter, it's less of a lift. And I think it can be, but like this newsletter's doing, like if I go back, like I tried 2 other newsletters at one point and it was just literally like links from the week about something going on around the web. And there was the problem with that was like people already do that. So I was basically, you know, basically a copy of that probably.
00:35:08 - Anthony Campolo
And also from Jam, the only thing I really add is I would write kind of like a longer summary of like a big topic, you know, that would be kind of the draw.
00:35:17 - Nick Taylor
But like it was also very stressful. Like it would hit like Saturday night and I'm like, oh shit, I don't have enough links still. And Eventually, if something's not working, whether that's a process or at work or something, you reevaluate with your team. For me, this is obviously just me, but I was like, this isn't working. I get stressed out about doing this all the time. It's not fun, basically. And so I just stopped the newsletter. I did a, this is the last one, blah, blah, blah. And then I wasn't going to do a newsletter again. And then I was Chatting with, um, uh, do you know Seran Yitbarek? She's— she used to run— she owned CodeNewbie. Um, she, uh—
00:36:05 - Anthony Campolo
okay, anyways, wait, I think I might actually.
00:36:09 - Nick Taylor
She works at Apple now, but, um, on, on the Safari team. But, uh, anyways, when I worked at Dev.to, we acquired CodeNewbie. That's how I knew her. And then she started this podcast like The Code Newbie podcast. Yeah, yeah, yeah, exactly. And they had like—
00:36:24 - Anthony Campolo
yeah, that was a really good podcast.
00:36:26 - Nick Taylor
Yeah. So like after all that, she was trying other things and then she created this like paid Discord and I subscribed to it and it was just like other creators and like we'd catch up every now and then and that was all good and stuff. And then I remember I was— I don't know why we're talking about newsletters at some point, but like Kelly Vaughn was in that, uh, community as well. And I just put the question out there.
00:36:53 - Anthony Campolo
Podcast, right?
00:36:55 - Nick Taylor
Yeah, exactly. And she's over, she's an engineering manager over at Zapier now, I think. Um, but like, I was like toying with the idea, like, what if I had like one tip a week, you know? Uh, cause I was thinking like, that's just more digestible in terms of consuming it, but also like me actually doing it. Um, there's obviously, you have to try and find something really good though. Um, so there is that. But, and at first I was like, maybe it can just be any kind of tip, you know, like dev tips sometimes, or maybe, you know, I don't know, this is how I fixed my window. But then she's like, no, no, no, just keep it focused on dev stuff.
00:37:35 - Anthony Campolo
Yeah.
00:37:35 - Nick Taylor
You know? And so I did that. Uh, I'm trying to keep this story short, but basically I was like, okay, yeah, I'm gonna do a dev, one dev tip a week thing. And the things that I think have made it successful so far was I queued up about 10 of them before I even started the newsletter. Like the first one that gave me a 10-week buffer. And then I would, you know, now I've kind of, my buffer is kind of gone. I usually have 1 or 2 now, but like, um, but that allowed me to not be stressed about it. Sometimes I would even change them. And now it's actually enjoyable for me, and I'm happy that people like it and that, you know, the stats don't lie about that. But, um, it's just more enjoyable for me, and I found, I think, what's a good formula, which is one hopefully good tip about development in some capacity. So, um, you know, subscribe to Dev. Oh, no pressure, Dev. That's— that, that wasn't the whole point of this story.
00:38:43 - Dev Agrawal
I was definitely subscribed at, at some point. I think at some point recently I kind of like purged everything, uh, so I literally like unsubscribed to almost every single thing that I was, especially if it was AI related, because I felt like I—
00:39:00 - Nick Taylor
it's too many.
00:39:02 - Dev Agrawal
The anxiety— yeah, the anxiety thing that you were mentioning earlier There's a decent bit of work I had to do in the last few moments to kind of like cut it out because it was getting pretty bad. And I realized that it's like, like trying very hard, like trying very hard to keep up with every single little thing that happens in the AI world. It's, yeah, it's stressful like you mentioned. It can be beneficial for sure, but I think in general, like if you missed like 6 to 7 months of, like, even if you were completely living under a rock, let's say for 6 months, and 6 months later you came into the, like, AI and, like, AI agentic space, you could just, like, learn what's happening now and you'll be completely fine because anything that you learn today will be obsolete in 6 months. So, oh yeah, keeping up with every single thing, like, it's helpful to see the patterns of how things are evolving. Because there's a lot of like repeated, uh, repeated like things there, but you don't necessarily need that. You can just come like a few months later and like, okay, what's— how— what are people doing now? Let me start there.
00:40:12 - Nick Taylor
That's it. Yeah. And people are always going to be tweaking these things and like, yeah, you know, it's, it's, it's kind of like, you know, configuring your editor on steroids kind of, but like You know, and like, I forget who it was. I don't know if it was Mario, who's like the creator of the Pi Harness, but like, yes, everybody's got these elaborate setups for their AI workflows. And then it was either him or maybe it was Dylan Mulroy, who's over at Cloudflare now, just like, just, just use the, you know, just use the harness and see how far you get, you know. So like, there could be a lot of theatrics in there too. I generally do think scales are useful and the MCPs I use are useful, but like maybe there's potentially some over-engineering of AI workflows.
00:41:01 - Dev Agrawal
So yeah, the layer that I do really want, that, that I do really think matters, is like the more the structural, the framework layer. Like for example, kind of the like we need to give it better primitives. Um, like AutoShow is a great example of that, which is like It's just a bunch of different ways to manipulate content that are like given, provided as primitives that you can just use and combine however you want. Um, Specter is kind of like one, one of my ways to, uh, uh, uh, kind of like, I guess, advance that front. I think Solid is another one. Like there's recently been some talk about Solid and Remix 3 of like how, uh, how much an agent likes it. Like, I think Kent had his agents provide like a review of what we're using for Remix 3 has been like.
00:41:55 - Nick Taylor
Um, okay.
00:41:56 - Dev Agrawal
And like, as hilarious as the idea sounds like, I'm— I've actually been doing that with Solid 2.0, uh, today, and I think I'm getting some pretty interesting results. So, uh, yeah, I was wondering like, okay, that you were talking about a lot about like your general, uh, like Or what you kind of do with stuff like OpenClaw outside of coding. But what about the coding task? Like what frameworks are you using? What do you, what have you found that works better for agents or not worse for agents?
00:42:26 - Nick Taylor
Yeah.
00:42:27 - Dev Agrawal
So in terms of tech stack, how have you, how has agents affected your choice of tech?
00:42:33 - Nick Taylor
Yeah. So where I'm at right now, I am a DevRel, so like our our main product, it's all written in Go. There is some frontend bits to it that is all React. I've helped, not just me, but I've made the nudge to get us to move to Vite because some of it was on Webpack still. There's a lot of Redux in some stuff, which is not necessarily a bad thing. They're proven patterns and it I think the LLMs have definitely slurped up Redux, so it definitely knows reducers and all that stuff.
00:43:14 - Dev Agrawal
It sounds like a very 2018 React stack.
00:43:20 - Nick Taylor
Yeah. Well, the project started in 2019. It got open sourced then. Makes sense. Basically, the software is called an identityware proxy. It's very network-centric. So Go is a reasonable choice for that, obviously. So that's why the stacks in Go. But I think them picking React back then with Redux was probably sensible because I started using Redux in 2017. So I'd say 2017 to— obviously people still use Redux. And it's been like, there's RTK now. Like, AceMark's done a lot of work there and stuff. But I'd say like, if you're starting fresh today, like, I'm a big fan of TanStack stuff. And I think it treats it pretty well, the LLMs. React is still king in terms of frontend for LLMs with Tailwind. The thing that's interesting though is because like, obviously you're on the SolidJS core team, it's JSX. So it probably gets some love, but maybe some confusion sometimes in terms of all the stuff that we know about Solid where it's not always re-rendering. So maybe when it generates stuff, I'm curious because I'm not using Solid at work, but how are you finding it with AI? Because that's the tech stack I'm working in typically. And if I'm doing demos or just building stuff, I will typically reach for TanStack Start right now. I'll just stick with Tailwind and, and like Vite or even Vite Plus now. Um, Astro as well, um, for like my own site and like that ClawSpace I was talking about, that's an Astro site. I basically forked my own site and then just started building from there just to keep a similar theme. But, um, but yeah, I'm cur— I'm curious how the LLMs are working with Solid specifically because it is JSX. But it is a different, you know, it's reactive. It's a different framework basically under the hood.
00:45:33 - Dev Agrawal
Yeah, honestly. So, I actually have not gotten a lot of time to do UI work recently. So, I haven't like experienced— I think Anthony has done more like SolidJS building than I have recently. Yeah, he's a much better person to ask. I think, I think my kind of experience is limited to like, hey, go and build this UI, just make it work.
00:45:58 - Nick Taylor
Um, yeah, yeah.
00:45:59 - Dev Agrawal
And it just, it works. Like, I, I haven't run into any, any issues with it using Solid. Um, but I'm sure like if I spend more time and like care, spend more time investigating and like trying to improve the UI, uh, I'm sure that'll give me a lot more experience of like where are the actual like the edges where it's hurting agents or where they're getting confused and how that can be improved. Because I'm certain that it's not like whatever the confusion problem is, ultimately it can be fixed with some level of context engineering. We just need to figure out the right set of examples to provide it so that it's kind of primed that, hey, whenever it's writing JSX, it's not doing— it does it— it's not in React mode, it should be in Solid mode. And I think a good set of examples is like the perfect thing to have in context. Um, but I want to hear some real-world, uh, reports about that from Anthony.
00:46:56 - Anthony Campolo
Yeah, so there's— so the 2 biggest things that I hit were— and this is like, you know, probably over a year ago now that, um, I was kind of like really, really deep in it. So the agents now may be, may be slightly better and the better models, but sometimes it would get confused just about like state management. Like, I had a big global store where I was mostly managing everything. And then sometimes I would have like a new toggle that I would have to add. And then it would like create some weird kind of one-off state that would then get lost in the sauce. And so I had to like kind of say like, hey, actually, no, you need to be using the state in this kind of way. And that was just kind of me not reviewing the code close enough to see when it was like stepping outside of what it should have been doing. And then it would— and this is a kind of general problem, I think, with a lot of open source libraries— it will kind of err on older conventions, like things that are more in its training data. So it will do a lot of like the things that— because you've had Solid 1, you know, has been— has changed over time. Like things like CreateAsync are a lot bigger now than they used to be, and CreateResource and stuff. And then those are going to change even more with Solid 2. But it was using more of kind of like the— just a more frontend-centric way of doing things and using more like onMount. And what else? There was like a certain like isServer. It would keep— I kept using isServer from the SolidJS web thing, which is like a really, really old way of doing like server-side stuff. So, I had to like then kind of go back and refactor, rip all that stuff out and be like point to the docs and be like, hey, So as Dev was saying, context engineering, I would just grab the docs, but only for the new stuff. And then be like, here, look at these docs. Don't do all this other stuff. Like, and then it'll say in the docs, it recommends what's, you know, the new way, what's the deprecated way. So then it kind of got into a better mode. Getting to 2.0 is gonna be interesting. I think that's gonna be challenging to do with AI. Hopefully once it's stable, there may be like, a specific skill that will have all the knowledge it needs. But that's probably gonna be the biggest issue moving forward is gonna be the migration.
00:49:05 - Nick Taylor
Yeah. I'm curious if, since you're on the core team, Dev, do— does— because for example, there is definitely skills for React. Vercel has some frontend skills. I like using— there's this skill called Impeccable. Uh, which is pretty solid.
00:49:24 - Anthony Campolo
I was gonna say that's the best thing I've discovered from your newsletter is Impeccable. Impeccable is amazing.
00:49:31 - Nick Taylor
Yeah. Yeah. It's, it's pretty solid, no pun intended. Um, but like, you know, I would assume framework authors these days are probably shipping or, or providing skills as well, or is, is that something the Solid team's doing as well?
00:49:49 - Dev Agrawal
Yeah, I mean, I think, uh, there's a bunch of things that can be done here that different frameworks are doing. Um, I think Svelte and Angular have an MCP server.
00:49:58 - Nick Taylor
Um, okay.
00:49:59 - Dev Agrawal
Uh, I think some projects— yeah, some definitely do have skills. We don't have any, uh, first party yet. Um, the one that I'm— I've been looking for is TanStack Intent, which is basically, uh, it's a TanStack package that lets you kind of ship skills in as npm packages or within your existing npm packages.
00:50:21 - Nick Taylor
Okay.
00:50:23 - Dev Agrawal
I feel like that's kind of a pretty good addition because then there doesn't need to be a separate skills library. We just include whatever documentation we need in the Solid repo. And you as a user will have TanStack Intent installed. Like we just, like instead of asking you, let, hey, go install the SolidJS skill. We just tell you, go install TanStack Intent. And now the, you will always have like the most up-to-date information or your agents will always have most up-to-date information about Solid because they just read the, like what we publish in the node module. So the skills and everything are versioned with the source code and they update with the source code as well. So it eliminates a lot of like the version control headache. Um, yeah. And yeah, and we don't have to like publish things to 2 different registries. It's just literally the same. Um, like when you install SolidJS, you get the skills for them as well, um, without a separate thing, which is pretty cool. Um, and, uh, at the same time, like TanStack— like if once you have TanStack Intent, then you also have like the built-in docs for all the TanStack packages. They because they ship with them and anyone else. So that's something that I've been looking at that I feel like if we were to ship, if we were to ship like first-party skills, it's probably gonna be as an intent package. It's probably gonna be a SkillMD as well. Yeah. Because there's people that don't use TanStack Intent and like it's, there are like better registries or we are now seeing like, registries like Vercel, skills.sh, like actually incorporate things like verified authors or verified publishers for skills, which wasn't a thing a while ago. So it's really good that other repositories are catching up, or like other registries are catching up, but npm is already like pretty kind of like battle-hardened. Uh, and it's pretty good to just rely on that. Um, and I think in terms of like what the skill content should be, uh, I think as I mentioned earlier, like a good set of examples. I feel like in— yes, giving just custom instructions and explanations is helpful, but ultimately, uh, like even when we write regular documentation, uh, we know that we need to include a bunch of examples on how to actually— how these code, how these like code usages actually look like, what these use cases look like, how you would implement something. And I think that's ultimately like, I feel like we don't talk about that enough when it comes to like writing skills, is that okay, it is Markdown files, but within those Markdown files, like, uh, we have to provide a lot of code examples as well. Uh, so we are not just going to be explaining things in plain English, we are actually going to be writing a lot of code that the model receives as context to kind of like clearly see how certain things are supposed to be implemented. And then it gets much easier for it to kind of like replicate that over time. And then the third thing there is that a lot of times, like how you want your agents to write SolidJS, you have to define your own opinions around like how you are structuring code, how you are, uh, like your own conventions, your architecture, your files, uh, file system, things like that. Um, I think a, uh, a huge, like one of the biggest ways to kind of make agents better at, uh, like doing your, like doing things in your code base is, uh, kind of like encoding your own opinions about how you write code, uh, like above those libraries that you have, like SolidJS, like SolidJS. It comes with a lot of features, but it's still like relatively low level. Like you, you need, uh, you need to have your own opinions of on how you actually structure code within your code base and how you interface with Solid's, uh, APIs, uh, uh, what kind of like third-party libraries are using custom primitives and how you're using them. I think those may, those make a lot more impact than, uh, anything that like I mean, yes, there should be first-party skills, uh, but then there's going to be a lot of additional help if you just define how you work with— how you like to work with Solid and how you like to organize your code.
00:54:58 - Nick Taylor
Yeah, no, that makes sense. Like, do you— yeah, because I also use examples in my skills too for certain things, for scaffolding, and, and also like You can even pull it. The nice thing about things being open source is you literally have the code. You know what I mean? It's kind of like a huge unlock. Even, I mean, before you used to be like, oh, why am I getting this error? I used to literally look through source code. I'd be like, oh, this Webpack error. Oh, I can pull down Webpack and I can see where that error is and then I can debug it. So I think that's one of the— because there's some people been saying open source is going to be ruined by AI. I don't think so. But obviously there's AI slop out there. But I think it's super cool that you can provide all this context, which is the literal code with like, oh, okay, yeah, because maybe docs are out of date or something. This has happened to me. Our docs are generally in pretty good shape, but it's like I ask a question and it goes, oh yeah, I looked in the Go source code and this is why this is happening, blah, blah, blah. And then we have an MCP as well now. I also use a Kubernetes MCP, and so I basically have a read-only mode for my home lab cluster. And you throw all those things together and it's pretty cool.
00:56:31 - Dev Agrawal
Yeah, exactly. I think for me, the ultimate, uh, like every time you, we have one layer of documentation or like explanation outside of the source code, that becomes like an extra thing that we have to maintain. The more of these layers you build up, like layer, like your docs and then your skills, uh, like the bigger your skills are, it's just maintenance burden. So I feel like I really want to live in a world where most of the context that we provide agents is kind of derived from the source code. And like, like the best place to put documentation honestly is comments because that means, because it's like the most co-located with the code and you can easily write scripts to kind of extract it from your source code and then present them into nice HTML, like HTML or Markdown pages or like Markdown, just a context for agent somehow.
00:57:23 - Nick Taylor
Yeah, it's kind of funny how like JSDoc or even like Go generate, they all generate. I mean, obviously it doesn't necessarily translate to like feature documentation, but like API documentation or like API surface for sure. But it's, but yeah, it's like, it's a weird time. Too, as well in terms of documentation. Because like, I mean, I've noticed this, but also just talking to my good friend Becca, like you're no longer writing docs just for humans. Like LLMs need to slurp it up. So like, like we serve Markdown for LLMs now. I mean, we have LLMs text, but like we also serve the pages as Markdown now. And then like obviously the human readable still, I mean, they're both human readable, but HTML takes up more tokens, so serving Markdown. I don't know about either of you, but I almost don't want to read docs now. I just speak to an LM. I got to set this up. This is what happened to me with Kubernetes. For one, Kubernetes has amazing documentation. It's not that. It's just like, I remember All Things Open last year. I was giving a talk about zero trust security because Pomerium and it's talking because it's open source or open core. And I was doing this in the context of Kubernetes. This is like literally the first time I'm setting up a Kubernetes cluster. And I, I'm just chatting with the LLM. I'm pointing it to our docs. It knows Kubernetes really well and knows Go really well. And I just said, because I literally did not have time to go really deep into our docs and stuff, I said, I just need to scaffold this. This is what I need, blah, blah, blah. And I got my whole environment set up for the demo, which was part of my talk. And that was a huge unlock for me. And I feel like nowadays, not even just for agents to set up stuff, but it's just like I don't want to go through all the steps. I know the agent can slurp all this up. Yes, don't read my API keys and stuff, but scaffold me this thing and then I'll fill in the holes. I don't know if it's because I've got TikTok microwavable brain now or what, but I just feel like the DX in terms of kind of like when the dot-com era was happening in the 2000s, it's like, what do you mean you don't have a website? You know, like, if at some— at a certain point, if you didn't have a website, you're like just basically dead in the water. And I feel like there's a lot of table stakes stuff in terms of like, if your agent can't slurp up the thing to set this up or do a certain thing, you're gonna kind of be left behind as well, you know? Or at least— or at least that's the feeling I get. And, and I really do just like asking somebody to set something up because it doesn't mean like I don't know anything. It's just like this is a bit of a nuisance for me to, to set up. Uh, yes, there's maybe more complex parts or, or nuance in certain parts that I really do need to understand, but like for the majority probably of things, you know, the agent should be able to do it for you. So I don't know. I see some nods, so I'm assuming that's a yes.
01:00:59 - Anthony Campolo
I think, I think I agree. Def?
01:01:03 - Dev Agrawal
Yeah, no, it's, uh, yeah, full agreement for me. Um, yeah, what, what else do we have to show off today?
01:01:12 - Anthony Campolo
Did you want to talk about Specter at all?
01:01:13 - Dev Agrawal
You're new.
01:01:14 - Nick Taylor
Yeah, I want to see Specter as well because like Dev was on my stream, uh, what, a few weeks ago or a month ago We were obviously talking a lot of Solid 2.0, but then we talked briefly about Specter. So I guess, I guess like, like let's start from the beginning for like, I heard a little bit about it, but like for folks that have never heard of Specter, I guess what is it and why did you create it?
01:01:38 - Dev Agrawal
Yeah, for sure. Uh, I think the, um, the, the, the way that I like to kind of, um, like give the background for it is that spec-driven development is a fantastic idea. At its core, it's, it just says that you, uh, like before you go and build something, you describe what you want at a higher level. Um, and then you go like in a, in a, in some detail and then you go and actually build it. It, this, it's a fantastic idea, but I, uh, the way that people do it currently, which is like write a giant Markdown doc and then like hand it off to an agent to implement is like the worst possible way to actually do spectrum and development. So I'm just trying to like kind of like build something that actually gives you the full benefits of like writing a specification beforehand before you actually go and build something. And the kind of the goal with this is that when you write a specification, like most of the work should already be done before the agent even starts running. Like, the agent shouldn't receive your specification and then a complete blank slate to start from scratch. The specifications themselves should provide some structure to your application and some guarantees and some executable, like, testing as well, so that once your agent goes to implementation, it, like, it doesn't have to figure out everything from scratch. It doesn't have to worry about glue logic. It doesn't have to worry about Um, kind of like menial things. Um, it can just like implement your business logic in these small incremental slices, uh, and it automatically gets verified that, hey, the thing that you specified, does the application actually work that way? Like one of the biggest problems with AI code is that code review. AI can write code 1,000 times faster than us, um, and it can write 100 times faster than we can read and review it. So what if we had some way to trust what the AI had written without having to check the code? And what if the specifications could do that? Like once you have written a specification, it's guaranteed that the implementation will have the behavior that was in your specification. You don't have to review the code to check it. You might wanna review it to see if the agent like implemented it or like efficiently, or if there are like better ways to do what the agent did. Um, okay, but you don't have to look at it just to see that, hey, does it follow, uh, the kind of behaviors that I've described, or does it have the features that I want, uh, and does it handle the edge cases like I've specified? And you don't need to like sit through all the implementation code to figure that out. Um, yeah, and then one other thing was that I want things to happen in parallel. Um, like, yeah, I don't run— when we are talking about like running 1,000 agents at once, um, and no, I, I don't do that. I think it's mostly a dumb idea. Um, but I— if you can like break your code base down into a way where, uh, like basically vertical slice architecture, which means you build your business logic in independent slices that don't depend on each other. If I have 1,000 slices, I can have 1,000 agents and in parallel implementing all of those slices, um, without interfering with each other. Like, that's actually— like, I haven't yet tried it out. Um, it's something that I feel like at some point I'll, uh, uh, I'll make a quick video about that. I'll show off that I had 2,000 agents that run in parallel at once to build this app. Like, it would make a really flashy thumbnail, uh, but it's not— it's, it's not like a— and it will actually work. But it's not something that you want to do. But still, this ability to like break down implementation in parallel where you can do them, you can actually like do things in a faster way by not having to worry about that, oh, these 2 agents are going to break each other somehow because architecturally that's impossible. You cannot, like they will always be independent of each other. So what if we had guardrails like that just by writing specifications? That was a pretty long-winded intro.
01:06:08 - Nick Taylor
No, it makes sense. And there's a couple of things that like, I'm saying the obvious, but like people firing off 1,000 agents and going to Loop City, it is, it is cost prohibitive. Like, oh yeah. Like there is literally no student that is going to be able to do that. Right. Like unless they're an intern somewhere where they just at Anthropic or OpenAI maybe, or some— I don't get metered for tokens at work, to be clear. And we could probably do experiments like that, and I'm not going to get blasted for doing that. But I think in general, there's a reason Stipe, he's pushing the limits and stuff. Like, people are saying, What the hell is this guy doing? But he's literally trying to see how far things can go. And OpenAI is going to give him all the tokens he needs, right? Exactly. He's experimenting with stuff. I mean, I remember at the AI Engineer Europe, they were saying, I forget his name, Popolo is his last name. He doesn't work at OpenAI anymore, but He's like burning an insane amount of tokens every day. But again, these are people pushing the limits, trying stuff, and, and like they're given access to be able to do that, right?
01:07:30 - Dev Agrawal
And like, or Jared Sumner burning 150,000 in Fable tokens to migrate Bantu Rust.
01:07:37 - Nick Taylor
Yeah, that was an interesting one because like I think the price tag ended up being like $165,000 US or something. And obviously Anthropic's going to let them use the tokens. But it is interesting because that's less than one engineer's salary, probably in SF, right? Or maybe that's a junior salary. I have no idea what junior salaries are in SF, but I mean, like $165,000 in terms of, like, let's just assume that was like one engineer in I don't know, middle North America. Kansas. That sounds like a pretty good deal. Yeah, Kansas. It sounds like a pretty good deal. Obviously, he ported it to Rust. Obviously, he had a lot of really good tests in place. He was originally trying to literally pass the whole Node.js test suite. I think those things set that up for success as well. He's also a really good developer. Um, you know, it's not like—
01:08:42 - Anthony Campolo
I don't know, I heard that he actually sucks and doesn't know what he's talking about and is totally brainwashed.
01:08:48 - Nick Taylor
So, all right, he has been corrupted by money, by venture money. Yeah, but like, basically that whole— like, that was set up like, like he was in a place where he could do that, obviously, right? You know what I mean? Like And it's— but it's also a cool experiment as well, you know, like if you forget the money for a second, like to your point, like Specter, if you have good specs, if you have good like test kit, because there's like all these old practices that like are coming back. Like there was BDD, there's like cucumber and, and like gherkins, like you define like all these things. Like the funny thing is everything's just coming back to writing English. It's, it's, it's just really funny. So like, yeah, English and Markdown, you know, like that's, that, that's your tech stack.
01:09:38 - Dev Agrawal
Uh, yes, I think the point of cost is very interesting here because, and like, like everything about those ideas like BDD, and, uh, I think a, a lot of it was motivated by like scaling engineering better, like getting, uh, like getting juniors more productive, more effective, like quickly. And I feel like the way that it— that translates into the agent world is that you can have smaller models do better work, like for much cheaper. I think of one other— one other of my motivations with Specter is that if I can reduce the problem of like implementing a huge app into like implementing a bunch of these tiny, well-specified slices with like strict tests, That means you can hand that work to a really small, cheap agent.
01:10:27 - Nick Taylor
Yeah.
01:10:28 - Dev Agrawal
Which means now you're, you don't have one like a huge fable model building an entire app. You can have like, if you have 100 slices, you can have 100 haikus build that app and it will probably work just as fine because it has that, all that deterministic setup around it that ensures that it works as expected. So that means you can actually scale development to much smaller, cheaper agents. And you can, because you can work per slice, you can do this workflow where you have smaller agents implement a slice, maybe retry it. And if once or twice, and if one in one or two retries, the smaller model is not able to figure it out, you just delegate that part, that those slices to a smarter model. So this way, most of your app can be built by like cheaper agents, and then you only delegate the actual, actually complicated part that the smaller models cannot figure out to the smarter models. So these, uh, these type of workflows I am really interested in, um, because this way, if you, even if you decide to like run 1,000 agents in parallel, you're not going to be running Opus or like Sol or Fable, and you're going to be running much smaller models, maybe even open source models like Uh, like minimax or GLM. Um, yeah, so that you don't actually like come use your entire limits, rate limits, in like 5 minutes.
01:11:55 - Nick Taylor
Yeah, exactly. I asked for a cookie recipe with Fable and Claude and, and now I'm, I'm maxed out for the week, right? No, I know what you mean. And it's, um, yeah, I, I, and I, I actually really like the open weight models Like I've been using them. I, the reason why I started using Devin that you asked this before, uh, Anthony was, uh, Nader, who's, uh, DevRel over there. He gave me like a $200 max plan a few months ago. And then, you know, and then he was like, oh, here's another month. I don't have the $200 max plan now just because, uh, but that said, like, it's really good. The thing is, it's like at work, we have a Claude subscription right now. So like, I, and like, I can expense stuff all the time. It's not that, it's just if I said I want to expense a Max plan for Devin, they're going to be like, no, because we have Claude right now. And like, you know, we probably use OpenAI sub too at some point. Like, I, but like, so like I have my own personal ones. Like I have just regular Anthropic for like Claude subscription. It's the $20 a month one, and then the same thing for ChatGPT. But I actually, after the, the 2 months of the $200 max plan, I, I found Devin really good in general. Like, when you have access to open models, uh, obviously there's other things that you can get that from too, like OpenCode does that too with their plans. I started using Command Code as well from, um, Amad Awais, uh, a fellow GitHub star. He used to have a company called— I think it's called Langbase, and then he— it's now called Command Code. But he has like a Go subscription. It's like $1 a month. And I've been using that periodically just to try out. But like, I've found a lot of good success with KIMI K 2.6 and 2.7.
01:13:54 - Anthony Campolo
Funny enough, I think KIMI 2.6 is the best OCR model. I've found having benchmarked like a crapload of them. It just does like for the price comparison, technically Gemini 3.1 Pro is slightly better quality. And then potentially like Fable and 5.6 Sol as well. But those are so expensive. Like it's totally, you'd be just like $50 to like OCR, you know, a book or something. Whereas with Kimi, you could do almost the same quality for like $2 or $3. So.
01:14:26 - Nick Taylor
Yeah, but, uh, yeah, so like I've been using the open models through, uh, Devin. Um, it's a pretty good plan. Like obviously the 200 max plan is way better because you just like— I never— the only time I broke the limits one week was like the last week I had it, and it's when Fable came out and I just, I just went to town with it. But like I, I've been really happy with Devin and even the editor, like, uh I just find it's very snappy. Obviously, web stuff can be smoke and mirrors in terms of appearing faster, but I think it's generally just, it's very responsive and fast. Even if you go to devin.ai, but I use the CLI as well a lot. But usually during my workday, I'm in Claude because that's what our subscription is right now. But that said, you can obviously use Claude Clod and other harnesses with other endpoints, right? Like, that's why you can proxy and stuff. But also, like, this tool I just installed today, it's called Native. Uh, it'll, it'll probably— I'm wondering if it should be a tip of the week because it literally is only for macOS. But basically, uh, I can find the link, but, um, it's essentially like if you use something like Ollama, which you can use on Mac and others, It goes— it's not using the native memory on native NIV, that one. Yeah, yeah. So it's using like with the native thing, there's like it— I don't know how they do it because I have to read more about it, but they're literally using the unified memory directly on silicon.
01:16:11 - Anthony Campolo
These MLX models, it says. Yeah, I've read a little bit for Whisper and stuff. I never actually used any of them.
01:16:19 - Nick Taylor
So I just downloaded it like about 8 hours ago, and it's, it's a native app. It's a Swift app. Um, there's like, you know, stuff like Ollama, you know, stuff you would expect, like a chat interface. But it also has configuration and integrations with like PyOpenCode, uh, Codex, Claude Code. Um, so that's what I was gonna look into next. But, um, because I don't know, I feel people that are using these things a lot generally know this, but like there's still people— like when I mentioned I did it as a tip of the week one week where like it was objectively a worse model by using a local model in Claude Code, but you can do it, right? Like you can, you can load Ollama, it's just an endpoint. Like, because at the end of the day it's just the I think everything respects the OpenAI responses API. That's kind of become the de facto, I believe. So you can just wire in whatever there. You could literally wire in anything. You could even test the harness with mock data, I guess, in an API if you wanted to roll up something. But anyways, the native thing looks interesting. I put the Quen— what did I put on? I got the Gemma 14 billion. And what was the other one I put on? I just literally did this while we were talking. But yeah, I've got Quen 3 14 billion. It seems a little slow. And my Mac's pretty good. It's an M4 and it's got 48 gigs of memory. But the 14 billion, it was responding, but it was You know, just kind of like that, that, that, that, that, not like the snappiness people are used to. So I probably have to use a quantized model or quantized version. Same thing with— I should try the Gemma. There's a 12 billion one. But anyways, it looks interesting. It's like literally I just saw it today though. So, and obviously if you're— there are requirements, it requires macOS 26. So if you're on an older Mac that you can't upgrade for some reason, I'm not sure how far back you have to go before you can't upgrade to 26, but it looks interesting, basically.
01:18:39 - Anthony Campolo
If I had to guess. Yeah. Did you want to talk about your interactive guides before we closed it out?
01:18:46 - Nick Taylor
Yeah, we could talk about it a bit. I did want to talk more about Specter, but maybe we can do that.
01:18:54 - Anthony Campolo
We can keep talking about Specter too. I mean, I don't have a hard stop. Stop. I don't know about you guys.
01:18:58 - Nick Taylor
No, I'm good. I just gotta pack at some point, but my flight's tomorrow at like 6:15 PM. And if you have more questions about Specter for Dev, go for it, man.
01:19:07 - Dev Agrawal
Well, yeah, yeah, live demo, or at least like, yeah, let's show off some code.
01:19:12 - Anthony Campolo
I'm gonna use the bathroom so you guys get that set up.
01:19:14 - Nick Taylor
Cool. Yeah, I know that that's what I was more curious about because like the way you talked about it, you made it sound aspirational, but I know you're obviously using it as well. So, like, just kind of curious to see, like, because, like, yeah, yeah, because like you were saying, in theory, you know, if you have good specs and, like, you know, solid definitions of API surface and stuff, it should set you up for success. But yeah, just curious to see.
01:19:46 - Dev Agrawal
Yeah, but how would that work in practice? It's, yeah, it's pretty tough. Like, honestly, this is, uh, I, I didn't even come up with most of this. Um, uh, the, the first time that I saw all of this actually working was actually late 2024, uh, which, um, uh, this thing called Otto, which, uh, was being built by the CEO of my, uh, last kind of consulting company. Um, yeah, he, he kind of built like a pretty ambitious, or he has been building a pretty ambitious version of it. And in some ways he has been building like it for, or this sort of like concept of, uh, specification to app, to like working implementation since like for like over a decade. Um, but he was building this AI version, which is basically like kind of what Specter is, uh, since 2024. Um, so what I'm doing is kind of like a more, uh, almost like a distilled or a different, uh, take on that. Uh, okay, let me share. Uh, no, not that. Share. Um, share screen. Okay. Uh, the interface kind of changed for StreamYard since I got, uh, access to stuff. Okay, you can see my screen?
01:21:09 - Nick Taylor
Uh, not yet, I think.
01:21:11 - Dev Agrawal
Oh, sorry, I need to add it. Just—
01:21:13 - Nick Taylor
yeah, yeah, there we go. Yeah, because you're driving now. Yeah, okay. Yeah, now I see it.
01:21:19 - Dev Agrawal
Okay, so, uh, I have like a simple to-do app here. Uh, let me, uh, see what the client looks like, the to-do app. So this is a Solid app. And the todo itself is not like, look, you know what todo apps are.
01:21:39 - Anthony Campolo
Yeah.
01:21:39 - Dev Agrawal
But basically the way that Specter is kind of like a specification framework for like really any kind of business logic, the most typical use that you, like most of the time you would be using it on your backend behind like your API layer. Um, so here I have like a simple client that like, uh, kind of an RPC client from the client— from, uh, the Solid app to my backend HTTP app. And basically there are queries. So I have this query called todos.query. I have a query for its todos. Um, and then I have some commands. So like change todo completion, remove todo. Uh, addTodo. These are commands, right? So, uh, kind of the, the API is kind of just queries and commands, which you're pretty— you might be pretty familiar with if you're coming from any sort of like a GraphQL or tRPC, uh, background, right? Um, so, uh, this is where the actual business logic lives. Uh, the convention that I'm going with is src/features It's open to change. It might be src.slices, but that's what I'm going with right now. Um, and inside these features, we have these vertical slices. So, and each slice has an implementation.ts and a spec specification.ts, or like spec.ts, impl.ts. Um, okay, this is what the specs look like. So I have a spec for a command, or a command slice. Uh, it's addTodo. There's a description. And there's some scenarios that kind of define, uh, how the slice should behave. So, uh, the when is like the input that I give into the command. So if I call addTodo with a todo ID of, uh, 1 and this ship it title, it should create this event of todo added. And this is the payload. Um, I have another scenario where I give it the todo ID and some extra spaces. And it still creates, and it kind of like trims the spaces out of the title. So this is kind of how you can, it's kind of like different scenarios for unit testing. Like these are going to be turned into executable tests for the slice. So it's going to be given this input and it's going to assert if like the command created this event. I have another example here. So, let's look at remove todo. So, here we are using like some predefined state. Like if I have already added an event, given that I've already added an event in the system, that todo added, if I try to run the remove todo command on todo 1, it should give me a todo removed event. If I don't have any todos in the system, it shouldn't do anything. And if I've already removed the todo, if I try to remove it again, it should do nothing, right? So this is kind of how we define the behavior of each vertical slice, or specify the behavior. And it's like, you can see it's just strings and objects. There's nothing too special here. And it's, it's kind of intentional because Specter is language agnostic. Like, as Specter as a concept, like the implementation that I have here is in TypeScript, but I also have an implementation in Rust and another one in Go. And I'm trying to— I'm actually currently building like an observability dashboard where you can— it can consume messages from like any, like a TypeScript or Rust or Go, like any of these, any Specter app. And it can show you like logs and things like that, or even like, even like visuals of these specifications. Like you can turn these specs into diagrams I don't, I haven't done that yet. Uh, auto is like, that's kind of where it started. Um, but I want to turn these automatically into like flowchart diagrams that describe what your app is doing. And that can all be like language agnostic. Um, yeah. Inspector by itself is not like, it's just, uh, like, uh, uh, strings and like given when thens, right?
01:25:56 - Nick Taylor
Okay.
01:25:58 - Dev Agrawal
That's what specs look like. And then for their implementation, um, like all you have to do is give it a schema. So this is the remove todo slice, uh, the command. So this is what the schema is for input validation. Uh, these are apply handlers. So this is how we take events that happen in the system and update some sort of database. So this— so we take events and we update her state. In some database. And then finally, when we are handling a command— like, this is the command that came in from the front end, uh, the remove todo request— we query this database that we were updating through our events, and we return command— we return, uh, new events that will be applied. Uh, so this is kind of, uh, like how you implement each slice. And these slice— these slices never import code from other slices. They only import code from your, uh, like libraries. Like, uh, here I have my ORM, um, and my event and my schema. That's my— or like my events, which are just definitions. Like, it's just, uh, the events are just like Zod schemas. They don't have any behavior in them. And then I import the specification that I defined in the spec.ts file. So each implementation or each impl.ts file remains fully independent and you just query them from your frontend.
01:27:21 - Nick Taylor
Okay. I think one, one thing that would be interesting is, um, because I've hung out with, uh, Fabian, Fabian, uh, Hiller before a couple times. So, so we've talked about, uh, you know, other things he's working on, Formisch and, uh, the standard schema. I wonder Because you want to keep Specter agnostic to language, obviously. I think replacing Zod with standard schema might be a good move potentially because then obviously you can still use Zod. You could also use— why is Fabian's—
01:28:03 - Dev Agrawal
Valebot?
01:28:05 - Nick Taylor
Valebot.
01:28:06 - Dev Agrawal
Thank you.
01:28:07 - Nick Taylor
Yeah. Valebot's great.
01:28:10 - Dev Agrawal
So yes, so initially, yeah, yeah, initially, so I had— I was using standard schema for the slices, but I think the direction that I ended up going in very recently is that validation is completely kind of an implementation level concern. And so it, like, in the spec.ts, I don't have any schemas here. I just have these like examples, like every, every object that you see in here is like an example input and example output. Um, there are no schemas here. Schemas simply become a part of the implementation. Uh, yeah, which means like whatever language you're implementing in, you can use literally whatever, uh, validation that you want. Like the TypeScript version of this is using standard schema. I actually did not know that standard schema is agnostic to like different languages. I thought it was more of a JavaScript or TypeScript specific?
01:29:04 - Nick Taylor
Yeah, I mean, I think it is JavaScript specific at the moment because like, like, uh, Colin from Zod and Fabian worked on it together, but I'm not sure if it's in general. Like, I think there might only be a TypeScript implementation of standard schema, as funny as that sounds. But I think, I think it's— yeah, I think that it's more the spec idea in general. But, um, but yeah, to your point, it's because I saw you had Zod there, but sorry, that was like the implement— the actual implementation. That's why I got thrown off.
01:29:38 - Dev Agrawal
Yeah, I think there, there's like a, a decent bit of like, uh, getting familiar with Specter is like knowing the difference between these 2, spec and implementation. Like, the spec is the thing that we, we consider the authoritative source of truth. Think about it this way. When you're browsing through this folder, the spec.ts is what you want to be looking at and reviewing. The impl.ts is something that you can completely forget about. As long as you have looked at these spec.ts files and you understand and align with these scenarios, you don't even need to look at the implementation. That's something that is now the concern of the agents. Like they have to look at these specifications and they have to come up with— they have to write, uh, or write all this logic, the impl.ts. And what will happen is that once they write all of this and you like— they go and run pnpm run test, it's going to take this implementation logic and test it against all of these scenarios. And if any one of them fail, it's going to like, uh, tell tell the agent like, hey, this scenario doesn't pass, uh, right down to the description and everything. And then they go, they go back and update all of this implementation until every scenario here is passing. So, okay, and another way to look at it is like, imagine you have a brand new code base, uh, or like your, your agent is like brand new to a code base and it's trying to understand how it works. Well, it can go, it can simply look at all the spec.ts files and gain like a complete broad understanding of your entire application without actually having to look at all the code. Because right now, if you ask an agent to do something, it'll just look through all the files and it can go pretty deep because it has access to all the files. But if you ask it for like a broad understanding of how everything kind of fits together, it cannot really do that without literally looking at every single file because usually implementation is tangled like that. But here you can just have either if you are trying to understand the codebase, you just look at the specs. If an agent is trying to understand what this codebase is and what this app is about, it just looks at the specs. Ultimately what I want is that these specs you translate into something more natural language friendly or more visual, so that you give it to a non-technical person and they can understand what this app is doing. They can just like look at these scenarios in a more visual format and come up with more that, oh, this is an edge case that we haven't handled yet. And you don't need any technical knowledge to be like kind of looking at and trying to understand these specifications because they are all just domain knowledge. Like when a to-do is added and I try to complete a to-do, it should complete that to-do. And if it's already completed, it should not complete that to-do. Like, it's— this is just, uh, kind of business-level knowledge that non-technical people should be able to, uh, kind of contribute. And then we just have agents implement everything until, like, it automatically gets turned into tests without, uh, like, without touching the agent. Like, that's a deterministic guarantee. It's not— an agent is not writing these tests. They are automatically there because you wrote these specifications.
01:33:06 - Nick Taylor
Yeah. And so the specifications generate the tests, right? Or are you writing the actual tests still right now?
01:33:13 - Dev Agrawal
So it's more like there is a— so there is a test script. Let me actually— it's— yeah. So I have these scenarios.test.ts. This is like the file that Vitest is going to run. Um, and all I have to do is like the Specter— like I export this helper from Specter, uh, test slice implementations. And it actually— it's literally like you, you provided your slices, you provided your, um, like your implementation, um, and it like dynamically goes through every single case. So it's— the test code is not being generated, like the test code is just this. But, uh, that it's— let me explain like this. The test code has like a for loop that goes over each of these objects. It literally like takes these events, it calls your implementation like handlers with those events to like and to put them in the right state. And then it takes this value, it calls your handle function with that value, and it sees if the return event— like it's literally just, it's almost like testing pure functions.
01:34:21 - Nick Taylor
Okay.
01:34:22 - Dev Agrawal
So it's, it's just looping through all these scenarios and it's testing them one by one at runtime. They don't need to be generated. Like one of the things that I was really trying to avoid was code compilation or code generation. I just hate doing that sort of work. If something can just be imported and like you can iterate through some data structure at runtime, I just want to do that. Rather than relying on like, like I, I like, I'm not, I'm not one of those like no-build people, people that like I don't want to use TypeScript or JSX because like I don't like build steps. Um, but, uh, but I don't want to build, like I don't want to be the ones like be the one writing more build steps or adding more build steps in your workflow. The, the less build steps you can have, the better. And, uh, I feel like an agent is a great build step. You just give up, you just tell the agent that, hey, once you write this slice, go and import it in the correct file. Um, that said, the, the way that TanStack Router, like TanStack Router has a Vite plugin that automatically registers your route. Like whenever you create a file inside src/routes, it's automatically going to edit your TypeScript definition, everything. That's the kind of thing that I eventually want, that as soon as I create impl.ts or spec.ts in my features folder, it automatically registers it in a bunch of places so that you have additional type safety and like, um, yeah, you get, you get even more guarantees basically. Um, yeah, but I don't have— everything happens at runtime right now. There's no code generation step.
01:35:57 - Nick Taylor
Okay.
01:35:58 - Dev Agrawal
Yeah, there can definitely be one.
01:36:01 - Nick Taylor
Yeah, no, gotcha. Yeah, it's the route gen tree. I remember, uh, uh, Fresh from Deno did that too. It makes sense. Scaffold what you can with some deterministic tools and then outsource the non-deterministic stuff that hopefully becomes deterministic because of the deterministic stuff you scaffolded. But okay. Yeah, no, that makes sense. Yeah. So in an ideal world, we got Specter, we literally spec it out. Long-term, hopefully it can scaffold the shell of the impl and the spec, and then it'll literally just build it. And then from there, the quality of the implementation is based on whoever's building it. Maybe they provide skills, they have their own guidelines, you know, like every org would have their set of skills and coding standards, etc. And then the test should— would have to pass because it'd be going through the loop until all these things pass. And then I guess, I guess once that initial step's done, that's when you, you validate, is, is this garbage or not? Potentially, like in terms of implementation, like it works. But to your point, like, okay, yeah, this, this went through, you know, a 4-layer loop versus, you know, something else, you know, like But even that with those things where you're like, okay, that implementation's bad, that's probably where you would improve your coding standards or provide better examples. It's kind of like the rinse repeat and things should eventually hit this inertia where it's in a good place and then you feel pretty confident, I guess. And then you would have this in a CI/CD pipeline maybe, so then it's like, okay, app's ready. Um, and, and I guess at least for now, like, the focus for this is obviously backend-related stuff because, like, for the frontend, it's, it's probably possible, but just probably a lot more work, especially because you've got visual stuff, you know. There's like a different category of things you'd have to validate, you know. But, uh, but no, this is super cool.
01:38:20 - Dev Agrawal
So I think for the frontend stuff, I think this How a Specter would work would kind of be like, like where you, where you would fit in XState today. Like for the kind of like, this is a very state machine kind of way of thinking. Like, um, uh, this up, uh, like a state machine. What is a state machine? It's a state and a current state event, and you give the next state. Uh, this is basically a state machine. This is like, here's the event that happened, here's my current state. And I'm going to mutate this. I'm going to like basically run some insert statements on my database, which is basically a way of like providing the next state. So all of these are state machines. This, instead of like writing to a SQLite database, it could just write to like an in-memory JSON and kind of like how XState works. And that's how you would use it on the frontend. I actually don't have any examples for this right now. Um, but you— the way that I have— I'm building Specter is that it has literally zero opinions on your infrastructure. Like this, this spec.ts doesn't say anything about what database am I using, uh, what server am I running it behind. It's literally just like, uh, uh, some specification of behavior. The implementation here is using SQLite, uh, but it could very well just be using completely in-memory And then, and now I have, uh, all of my business logic on my client side, uh, fully specified and tested and validated. Um, in, um, and it kind of works similar to how Redux or XState, where you would specify like each mutation, uh, you would have specified them here. Um, and then you would also have tests for them.
01:40:09 - Anthony Campolo
Yeah.
01:40:09 - Dev Agrawal
So I, I don't have any specific examples for that, but that's how this would kind of work with on the front end.
01:40:15 - Nick Taylor
Oh yeah, yeah, no, no, I wasn't asking for examples. It's more just like what you're thinking kind of. But, but yeah, no, no, it, it makes sense. And it's like, it's just, you know, everything comes back to structured inputs and outputs. And, and like, as David K. Piano would say, it's, it's all actor model.
01:40:36 - Dev Agrawal
Uh, but exactly.
01:40:38 - Nick Taylor
Yeah, no, but it's cool. And obviously I know it's early days and stuff, But, but, uh, no, yeah, it's like, yeah, it's, it's, it's kind of funny because like, yeah, what's that?
01:40:54 - Dev Agrawal
So this is what I just released today, the web, uh, the new website. It's super vibe-coded. I honestly—
01:41:00 - Anthony Campolo
what's new?
01:41:00 - Dev Agrawal
Yeah, go ahead.
01:41:02 - Anthony Campolo
I was—
01:41:02 - Dev Agrawal
yeah, so I published this website. It's super vibe-coded, uh, Okay, can you hear me? I think—
01:41:12 - Nick Taylor
yeah, you're good.
01:41:12 - Anthony Campolo
Yeah, you need, um, you need a text— you need a code highlighting still on your, on your front end.
01:41:19 - Nick Taylor
Uh, what's the one? Cheeky is probably good.
01:41:22 - Anthony Campolo
So he has a lot of code examples on his homepage.
01:41:26 - Nick Taylor
So, okay. Yeah, I used to use Prism and then I think it's Antfu's— I wrote Cheeky.
01:41:33 - Anthony Campolo
Yeah, I use that.
01:41:34 - Nick Taylor
I think that's what I'm using in Astro right now. But yeah, no, it's super cool. And it's like—
01:41:40 - Dev Agrawal
am I back?
01:41:42 - Nick Taylor
Yeah, you're good.
01:41:43 - Anthony Campolo
Go for it. Okay.
01:41:46 - Dev Agrawal
Sorry.
01:41:47 - Nick Taylor
Yeah.
01:41:48 - Dev Agrawal
There's a bunch of examples in here. I still need to actually improve the website a lot. But I also have some docs for it. Basically, 0.3 is the version of Specter that's now like, uh, that, that you can find on GitHub. Uh, there is like an npm create Specter that you can use, but it's like an older version that I haven't updated yet. I still need to do that.
01:42:14 - Nick Taylor
Um, okay.
01:42:15 - Dev Agrawal
But if, if Specter is something you want to try out, literally like, uh, I think that's what I said here, give it to your agent. Um, like Just to ask your agent to, uh, yeah, just ask your agent to clone and summarize and it'll let it explain to you what Specter is. And you, like we were talking earlier about, like, like you were saying, you don't go to the docs much. And I kind of feel the same thing. Like if I want to, if there's something, some new project that I found cool, I don't spend too much time on its website or documentation, especially if it's open source. I just, find the GitHub. I, uh, go and go to Codex and like, hey, clone this and explain to me what this is, how this works, and how I can use it. That's it. Um, so that's honestly the best way to get started with Specter if you, uh, if anyone is feeling up to it. And, uh, yeah, I would love to hear, uh, feedback. There's a lot of issues with this right now that I'm kind of, uh, um, uh, trying to push through. One of the things I'm building with this is a fork of T3 Code. So I basically cloned T3 Code and I sent an agent like, hey, rebuild this in Specter. And I think one of the reasons why T3 Code is like a pretty good fit, like experiment for this, because T3 Code already follows like the event-sourced CQRS kind of style architecture that Specter kind of Uh, like does as well. Um, yeah, but it doesn't have like all the same, uh, kind of like agent-friendly, uh, kind of benefits that Specter provides. So I think, uh, uh, so I've been like trying to, uh, and like obviously it's open source, which is a great thing for agents because, uh, I can, uh, it's much easier to like fork and customize versions of like, uh, software according to what you need, um, when things are open source.
01:44:19 - Nick Taylor
Yeah, totally. No, it's super cool, man.
01:44:24 - Dev Agrawal
Thanks.
01:44:25 - Anthony Campolo
Cool, cool.
01:44:26 - Nick Taylor
Um, I can show briefly because I know we're getting a little late here, but yeah, um, 5 minutes or so, then we'll wrap it up. Yeah, yeah, yeah, we can do a speed run here. Um, but yeah, so basically I've been building out these interactive guides for work. So like, where's my screen?
01:44:45 - Anthony Campolo
Okay, cool.
01:44:47 - Nick Taylor
We don't need to see my email, nothing really weird in there, but just don't need to see it. Okay, so that's not it. Okay, so there's this platform called Ixi Muse. I'm pretty sure I'm saying it right. Um, and basically it's— think of it like I was mentioning at the beginning, or maybe we mentioned it off before, off camera before we went on, but essentially it's a platform like CodeSandbox but for more for like infrastructure-related stuff. Um, so essentially Pomerium, where I work at, it is security software for infrastructure. So it's always self-hosted, even if you have our enterprise version. Like, we don't have We never host it for you. That means a couple of things. One, somebody who's maybe new to infrastructure in general could be very intimidated by this, just setting it up. You can do it with Docker Compose pretty easily, but the problem is you even— I'm able to run it out of my home network because I can actually open ports on my router for for my ISP. Like, I, I have port 443 open for like my, for my internal stuff going out. I can, I have another port for like SSH, not the regular 22, uh, but a lot of people can't even do that in their home network. So even trying it at home, like, you can kind of set it, you can set it up locally with like, uh, local certs and stuff, but the main point is it's like there's some friction to just getting started sometimes because it's inherently an infrastructure thing. And even like people that are platform engineers, they might have to get approval at work to even try out something. So my coworker Dennis, he found this site a while ago and he's like, he just mentioned it to me in terms of for me to level up on stuff learning. And so then he's like, oh, you can create content there. So I started to create some content there. It's all mainly work-related right now, but they have a vendor page, so I just have some stuff I've been building out. But I just want to go through one really quick. I'll go through the quickest one, I think. We have native SSH with Pomerium, meaning you can literally SSH via Pomerium. Pomerium itself, not to get into the weeds too, too much, but it's what's called an identity-aware proxy. So essentially everything goes through Plumerium and it's essentially, you have an IDP, an identity provider. So like wherever you work, whatever IDP you use, you can bring that in. There's a reverse proxy. We use something called Envoy. It's pretty mature in the— it's a CNCF mature graduated project. And then we have a policy engine. And so basically In a nutshell, what an identity-aware proxy does is always verifying like literally every request. And so you have to be logged in, obviously, but then there's policy checks and those checks happen every time. And the checks can be very simple. Like for today, we'll just say it's like an email, like, is this Dev's email? Yes. Okay, it matches. Then he's allowed through. Otherwise you're not allowed through. And the main difference between other things is you don't even go through the proxy, so you never hit the actual resources. If the policy checks don't pass or you're not logged in. So that's kind of like a very quick speedrun of what Primarium is. And so like if people just want to try out stuff, I just started creating these interactive guides. And so like it walks you through. I'm not going to read it all, obviously, but I can show you really quickly because I speedrun these things once I'm building them. But essentially it's a lot of copy paste and it tells you what's happening. And I'm basically building out infrastructure here, so like I can just set up some stuff. I'm setting up some keys here, and the interactive guide actually has checkpoints. And this isn't just like you're at this point, you get a checkbox. It's literally checking logs. In this case, it's checking where all these certificates are, these keys created. And so like, that's kind of how these work. The reason why I think this is more appealing too is having done a lot of stuff like frontend and working at Netlify, the things typically used to be like you would just tell somebody, here's the template, fork the template or deploy it to Netlify, you're done. That's it. That's not the case with infrastructure stuff. The goal is to teach them a bit but also make it digestible by they don't have to literally type everything out. Again, I'm speedrunning this, but it just gives you stuff that you can build out here. And I'm gonna have a real instance of Plumerium working in a sec. I gotta do my keys. I picked the worst one to do because I'm gonna have to show my keys here. But I'll rotate it real quickly. Hold on a sec.
01:49:54 - Anthony Campolo
You can pull it off screen if you want. This is awesome. I love this. This is so cool.
01:49:59 - Nick Taylor
Yeah, here, let me take it off for a sec. But like the main point here is it's not just for somebody to do copy pasta. The goal is like, again, I'm not reading through the whole thing right now because like I built these things and I'm just trying to speedrun through it, but they can learn what the thing is. They build out the infrastructure, they configure the things that make sense in that particular interactive course. And then from there they can actually really see it working in action and even potential clients. Like, even though I'm doing DevRel, I'll do, I do, uh, pre-sales calls sometimes. And it's like, you can literally just say to a client, well, you can just try it out here. This is how it works, kind of, you know? So it, it's, it's really appealing for that. And, um, starting to see a bit of traction with it. It's still early days, but, uh, okay. Let me just configure the GitHub here real quick. Okay, client ID. I should have picked one where you didn't have to use GitHub, but that's okay. Generate a new secret. Yes, so a little longer than 5 minutes because I got to generate some stuff, but you won't see it after that. So let me copy this. That's good. All right, that's pretty good. Okay, I can bring this back here. Okay, so we've got that. I just need to fix the callback URL. Let me copy that, and then we should be good there.
01:51:48 - Anthony Campolo
Okay.
01:51:50 - Nick Taylor
GitHub should be fine now. Okay, so it basically tells you, okay, like, basically in this scenario here, I'm using the identity provider, which is gonna be GitHub, and then it just tells you stuff. So Pomerium has this concept of routes, so that's how you, you proxy stuff. You say you're coming from some public or accessible address, and it goes to some internal resource which is on your network that can't be reached except through the proxy. So let's run that, and then I'm just gonna say, here's my email, and there we go. Okay, so, and then again, all these checks that are going green now, they're actually checking configuration, other things. It's gonna check logs and stuff, so it's not just a, hey, you're at this point, and I put a bunch of time into that, and I actually have skills that I've curated over time as I'm building these out that allow me to do this quicker. So I'm going to go ahead here again, like they don't need to type out this whole Docker Compose, so I'm just going to say paste it in and then I'm going to start it up. And again, so again, we're in a web browser, so they're testing like they could be doing Kubernetes in here. They're literally in a web browser. And that's, I think, what the appealing thing is. And, uh, there's a lot of great courses in here. There's— it's— I have a paid plan. All these courses I'm showing, they're free. Obviously there's a lot of free content, but if you want a subscription, there are— there is more advanced stuff that you— that is paid stuff, but there is a lot of great free content too.
01:53:27 - Anthony Campolo
Yeah, I saw there's actually— you could do a $300 lifetime subscription. You just get everything forever.
01:53:32 - Nick Taylor
Yeah, that's what I did just to support them and also just 'Cause I'm actually building on the platform. Okay.
01:53:39 - Anthony Campolo
So awesome. And I love how it's kind of like, you know, CodeSandbox for back in the day, but for infrastructure, which is, that was always the thing. They only really worked for like these kind of frontend type things. You didn't really, except like, you know, you have things like Gitpod, but you know, they end up pivoting.
01:53:53 - Nick Taylor
So yeah, I don't know if that really ever worked out. Yeah. But they, they, they got acquired by OpenAI, so they did okay.
01:53:59 - Anthony Campolo
Oh, did they? That's funny. I didn't know that.
01:54:01 - Nick Taylor
They became a company called ONA. And then they just recently got acquired. That said, you can actually bring in an editor in here, so you can have VS Code in here too. The other thing I'd say is this is trying to make it approachable for everybody, but also, this is a platform for people to learn infrastructure, so it's meant to be more terminal-like as well. That's part of the learning process, I think. We get to this point here. I have Plumerium running. I've got all my containers running. The nice thing, too, about this platform is you can delegate different tabs and stuff. I'm going to say click on that, and it brings me to it. I try to literally guide them as much as possible so there's no confusion. Now I'm going to SSH. What's going to happen here is— okay, this is normal. It's the first time you're SSHing to something, but if I zoom this in, This is, this is what Pomerium is doing here. So I'm doing regular SSH, and now you're getting this interactive login. So I'm— my SSH connection is being guarded by Pomerium. So I'm going to go ahead and click on this. It's going to open up a new tab, and I'm already logged into GitHub, so that's why you didn't see the GitHub login. But now I'm going to say I want to authorize my access to this SSH connection. And that's all good. And you can see here I'm on the server now. So that part on its own is like, okay, that's kind of cool. But like the point is to show what Pomerium can do. And so, okay, we did all this. Now what I'm going to show is— so like the thing with Pomerium is you can, because of these policy checks that I was mentioning, it's literally every request. So like in the context of a web app, If I changed a policy and you were no longer allowed dev, the next time you try to access it, you're going to get it denied. This is different from traditional web apps where you're just logged in and then maybe at the end, at some point, the next time you log in, you're no longer able to log in, but this is immediate revocation. That's web stuff, but this is an SSH connection. I'm already logged in here right now. I'm in this SSH connection right now, so I've got these files here. Now I'm gonna go ahead and I'm gonna change the policy. So the policy is basically— I can come show you what it is, but if we come over here, let's do— it's gonna show my key, but that's fine. Okay, so this is the Pomerium config. And you're going to see here there's a— the policy is basically allow anybody to SSH where the email is nick@nickyt.co. So what we're going to do is, and you can see I'm still connected here, I'm going to go ahead and change the policy. So this sed command is literally just going to add a typo to my email address and change the policy. The policy gets updated immediately. If I come back here, I get disconnected from my SSH connection immediately. So this is like a wow factor when we show people this, and now they can actually just try this in a browser. So there might be a bit of friction still because you still have to understand some things, but it's really nice to either just show somebody or if I need to demo it or if I give a talk, I can reference these things now too for people to try out. And all these things here are always the open core stuff. We obviously haven't enterprise version of things where there's valid enterprise features, but we try to put as much in the open core. So that's, that's cool. So I got revoked and again, it's checking logs here. So like you can see here, if I look at the logs in the, in the Docker logs, it's going to show me I was denied, I got disconnected. And now I'm going to come back here and I'm going to Oh, I gotta fix the policy. So I'm gonna undo that typo so that the policy gets updated immediately. And I'm gonna go ahead and I'm gonna SSH again, and I'm back in business again. And again, it's— these checks are checking the real logs to see that all happen. And that's kind of essentially it. But this is like a way for me to show people like, this is how this feature works. Um, and also, hey, go try it on your own time. It doesn't take that long. And this is just one of them. Like, I have— like, I'm building an MCP course right now. Again, all open core stuff, so you don't have to pay for anything. I just released the OpenClaw one today. So it just shows you how to harden access to OpenClaw with that trusted proxy auth mode I implemented in OpenClaw with Pomerium. And then there's some other ones. And then I'm This course is in progress. I got 2 lessons out and I'm just gonna continue. But basically this has been a huge unlock for me because trying to show, or we can obviously have demo environments when we show people stuff, but this is really like a, hey, if you wanna go try it on your own time, I've just found it a huge unlock.
01:59:23 - Anthony Campolo
So have you had people try these courses out already?
01:59:27 - Nick Taylor
Uh, the— well, the course is brand new, but the tutorials some people have done. Uh, I'm just gonna probably just start promoting them more, like, hey, just try this out. I, I think some things I'll do is like people I know, hey, could you provide me some feedback on these? I'll send you some swag or maybe like an Amazon, you know, I have to get clearance from work for that stuff, but But yeah, it's also just the other thing too is these are publicly accessible, so the LLMs can slurp them up too in terms of understanding the product, which is nice. But I think it's also still nice that although I'm a big fan of AI, you still need to learn some fundamental stuff. You still need to— so I think there's a balance there, and I don't know, I think these guides have made it super approachable, much like CodeSandbox back in the day was great for stuff like this.
02:00:23 - Anthony Campolo
Yeah, it reminds me a little bit of FreeCodeCamp as well because it's actually checking to see if you've done it correctly.
02:00:30 - Nick Taylor
Yeah. So that's pretty much it. That's kind of what I'm focusing on right now. It's a big push for me to just work on guides. And my job in general right now is still just create awareness about Pomerium because it's not a household name, obviously. That's, uh, yeah, yeah. But, you know, these things take time. But like, you know, giving talks and stuff helps too. But, uh, I think this will really just help me in terms of like the awareness and also just teaching aspects. So that's all I got. Awesome.
02:01:09 - Anthony Campolo
Thanks for sharing that. That's really cool. I didn't know about this platform. Um, you said this, but just remind me, how'd you hear about this platform?
02:01:17 - Nick Taylor
So my coworker Dennis, he, cuz like, so, so for context, for people who don't know my history, really, I've been an app developer most of my career. Also done a lot of frontend, worked on the frameworks team at Netlify, and then huge pivot to like, all of a sudden I'm doing, you know, infrastructure security software. So like, I don't, you know, I don't know too many people that go from React to security. Software for infrastructure. So, like, for me, you know, like, I was like, there's just so much, and I'm still learning. And he's like, this is just a really great resource if you want to learn Kubernetes better, if you want to understand containers better. And, like, and they have a Discord too. And so they do community calls as well. And, like, the other day I was on one and the guy was just literally building a container from scratch, you know, like the It was just interesting, and I'm just trying to get better at these things. And security is obviously important, always has been. But in the age of AI, its importance as well as infrastructure has been accelerated even more because people are trying to spin up sandboxes. Everybody's like, oops, I don't know how many times my API keys I've had to rotate because even with hooks and stuff, it can break out. There's patterns. We're working on this like other people, but you want to basically have your agent contained in this box and then you proxy out. Even if it's trying to get your keys, it would never be able to because they're always on the outside. I just find it— I don't know, feel lucky to be in this space. Also happened to just randomly fall in doing a lot of AI stuff here. It just happened that way because of MCPs, because we also act as an MCP gateway. So there's just been a lot of cool stuff that has just happened by being at this company. And I don't know, I think it's interesting and super important, all these things right now. A lot of things are important too, obviously not just these things, but Like I said, you know, there's been like so many cases of like, oh yeah, I'm the head of, uh, Meta Safety and I lost all my emails because I let my Open Claude do something or whatever, you know.
02:03:42 - Anthony Campolo
Like, anyways, we got pomerium.com here, and then you are NickyTOnline, and One Tip a Week, we shared that link earlier up here.
02:03:57 - Nick Taylor
But yeah, this is cool hanging, man. Yeah. And I don't know if you want to even go deeper again on Specter next time. I don't know if it's too much to ask Dev if we should live code together and try and move the needle on it.
02:04:15 - Dev Agrawal
No, 100%.
02:04:17 - Anthony Campolo
Yeah, we have a guest, Dylan, coming up next week, but I think on the— and then Glauber, Tur— talk about Turso on the 3rd.
02:04:24 - Nick Taylor
Oh yeah, yeah. We don't have anyone scheduled for the 10th, so yeah, I'm gonna be on vacation at that point, but I, I'm traveling a bit for work as well. But, uh, yeah, I think like late August on. But yeah, whenever it works out. But yeah, I was actually gonna ask—
02:04:41 - Anthony Campolo
you always have— you have a standing invitation to come back anytime you want, as you know.
02:04:45 - Nick Taylor
Uh, thanks, man. Uh, yeah, I was actually gonna ask Glauber if he wanted to hang again, uh, I had him on when Turso first came out because I moved everything to Turso for my own site now and it's really good. They have an MCP as well now. I don't know if you've seen that, but then obviously they're porting to Rust and trying to make a better SQLite. Not the same as the cursor. I saw the comments there, Glauber quoted it, but People are like trying to, you know, put Cursor through the wringer. All they were doing was just an experiment, you know, and then it's like everybody's like, why are you— yeah, SQLite's like the, the best thing since sliced bread, why are you changing it? And it's like, I think they were just trying it.
02:05:33 - Anthony Campolo
Yeah, that'll be fun. Actually, I actually interviewed, um, Glauber in person at Remix Conf in 2023.
02:05:39 - Nick Taylor
Oh yeah, that's right. That's actually where I first met him. Uh, we connected and I said, hey, yeah, we should do a livestream sometime.
02:05:46 - Anthony Campolo
So yeah, you know, he's, he's super chill. Yeah. Uh, Dev, anything before we close out you want to say or share?
02:05:55 - Dev Agrawal
Um, I mean, yeah, I think live coding is a really great idea. I might have, uh, I might do that like for a YouTube video as well. Um, but yeah, I would be very more than happy to do it on this podcast, uh, even especially if you show up. Yeah, I think just, I guess, be on the lookout for more stuff from Specter on my Twitter and my YouTube. I, yeah.
02:06:22 - Anthony Campolo
Awesome, awesome. Super fun as always. Thanks for being here, Nick. So for people who are watching, as I said, next week we're gonna have Dylan Piercey on to talk about Marko 6, which apparently is released Which is funny because I remember hearing about it, how they were working on it. I think 2021 is when I first had Dylan on a, on a podcast. He was like, yeah, Marko 6 is gonna be awesome. So really, really excited to talk to him about that. And then the week after, we'll have Glauber.
02:06:52 - Nick Taylor
So eBay is going to be even more blazing fast now?
02:06:55 - Anthony Campolo
So blazing fast. You're gonna be able to buy those tchotchkes twice as fast.
02:07:01 - Dev Agrawal
Cool.
02:07:02 - Anthony Campolo
All right, all right, uh, both of you hang on for a second after we, um, end it, but, um, we'll catch you all next time.
02:07:11 - Nick Taylor
Cool. Hey everybody.