Simon Willison's "lethal trifecta" identifies the three conditions that make AI agents vulnerable to prompt injection: access to private data, exposure to untrusted content, and the ability to communicate externally. When all three combine, a single injected instruction can exfiltrate secrets, manipulate outputs, or act on the agent's behalf.
Static sites can publish to AT Protocol with Sequoia. Making it work in CI required solving a state tracking problem that isn't obvious until you've created your fifth set of duplicate records.
SvelteKit component library for displaying Ko-fi supporters, backed by an ATProto PDS.
Composable Svelte 5 components for an ATProto PDS landing page — terminal aesthetic, live status fetching, zero config to drop in.
At @habitat.network, we're working hard to launch something at ATmosphereConf. We're building a platform for user data agency: giving users full and transparent control of where their data flows on the internet. Naturally, building a privacy-first platform, we're thinking about permissioned data.
Ewan's personal package monorepo — language-agnostic workspace with TypeScript, Rust, and Python packages.
Ewan's personal package monorepo — the canonical home for @ewanc26/tid, @ewanc26/atproto, @ewanc26/ui, and @ewanc26/utils.
AT Protocol service layer extracted from ewancroft.uk — profile fetching, Standard.site documents, Bluesky posts, music/mood status, Tangled repos, and a built-in in-memory cache.
My last blog post was about how I use train journeys to exit my routine and to allow myself a somewhat constrained medium to focus on work while still having some clarity, freedom and a new place to change mindsets in between working sessions. It was also my first foray into both blogging and leaflet, and it was an early view into the rabbit hole of the 'atmosphere' I started looking into. I mentioned previously the post from titled "A Social Filesystem", which helped me better understand the wa...
Zero-dependency, spec-compliant AT Protocol TID generation for Node.js and browsers.
Import your Last.fm and Spotify listening history to the AT Protocol network using the fm.teal.alpha.feed.play lexicon.
ATProto blogging from Obsidian! Introducing the obsidian-standard-site plugin.
Automatically update your Bluesky avatar (and banner) every hour based on the time of day.
A Dockerised Tangled knot server with optional Cloudflare Tunnel routing.
Source code for ewancroft.uk — a personal site powered by AT Protocol, built with SvelteKit 5 and Tailwind CSS 4.
Classic Snake with AT Protocol OAuth login and high score saving to your PDS.
CLI tool for syncing GitHub repositories to Tangled with ATProto record publishing — now part of the @ewanc26/pkgs monorepo.
An alternate SvelteKit frontend for Linkat showing a curated directory of AT Protocol user profiles. Unmaintained.
A server-side AT Protocol link shortener powered by your Linkat board. No database required.
A Bash script for automated, resumable PDS backups via rsync over SSH with change detection and cron scheduling.
SvelteKit library for reading and writing AT Protocol longform content via site.standard.* records — with a complete design system, federated comments, publishing tools, and content verification.