Work that runs.
I’m Daniel Ahn. From a front-end foundation, I became a full-stack, agentic engineer. I ship infrastructure for AI agents, an assistant of my own that I talk to, and fixes that GitLab’s and Sui’s maintainers merge.
- Front end
- Full stack
- Upstream
- Agents + voice
Now: agents, and the trust and voice they need
What I build on my own time
Shipped · npm
SweeTrust
Trust rails for AI agents. A person grants an agent bounded authority (mandate), every action passes one enforcement point (gate), and a stranger can check the record afterwards (verify). Since 0.6.0 it has an intent layer: a signed purpose, a judge you bring, and doubt never moves money.
- TypeScript
- zero runtime deps
- Apache-2.0
const email = Sourced.fromChannel(raw, 'email-inbound')
const account = Sourced.fromLLM(iban, 'ExtractInvoice', [email])
const amount = Sourced.fromLLM(40_000, 'ExtractInvoice', [email])
await pay({ to: account, amount })
{
ok: false,
refusal: '⚠ pay refused: to requires verified
but is UNTRUSTED (origin: llm:ExtractInvoice) · …',
receipt: {
decision: 'refused',
seq: 0, prevHash: 'genesis',
hash: '29ad0c14…',
},
}
The refusal is a receipt too. It sits on the same hash chain as every allowed call, so a stranger can audit what was stopped as well as what went through.
Private · in daily use
Swee Agent, an assistant I talk to
My own agent harness, running on a private server I control, that I call from an Android app. It reads my Gmail and runs my calendar; it has no way to send email. Not public, so here it is as the wiring.
- Python
- LiveKit Agents
- Deepgram
- Hermes (open source)
- Android
- 1Android appmy phone, my voice
- 2LiveKitWebRTC to the agent worker
- 3Deepgram Fluxspeech to text, turn-taking
- 4Hermes agent on my serveropen-source harness, the brain
- 5Deepgram Aura-2the answer, out loud
Where I work, and where I worked
Described at the level each company allows
Frontend Engineer · Los Angeles
Gallatin AI
Navigator plans the movement of people, equipment and cargo. I work on the layers underneath — the ones that decide whether a plan survives a burst of edits, a dead network, or an agent writing to it.
SWRV
TanStack Query
TanStack DB
local-first
Software Engineer · Remote
ExploreLearning
Math and science simulations used in classrooms. I modernized a decade-old JavaScript core onto Vue 3 without the simulations ever going dark.
Macromedia Director · Lingo
HTML5 rebuild
RequireJS · jQuery
Vue 3, incremental, no cutover
Upstream: code other teams chose to merge
Their maintainers, their review
Merged · gitlab-org
- gitlab-lsp !4725workflow-executor: snapshot the rejected token before the upgrade
- contributors !3074Convert IssueUrlRegexUtils to TypeScript
- gitlab-lsp !4628telemetry: the circuit breaker’s two log messages were swapped
const rejectedToken = this.#socketConnectionDetails?.token;
⋯
const rejectedToken = this.#socketConnectionDetails?.token;
Merged · MystenLabs
- ts-sdks #1032deepbook-v3: repay_base / repay_quote no longer drain balance when amount is 0
- sui-rust-sdk #218sui-sdk-types: property-based tests for type_tag parsing
- ts-sdks #898parseStructTag rejects malformed inputs
value: amount ? tx.pure.u64(convertQuantity(amount, baseCoin.scalar)) : null,
amount !== undefined ? convertQuantity(amount, baseCoin.scalar) : null,
Write-ups · the reasoning before the diff
Three fixes, each with its why
- ts-sdks #1032Repaying zero repaid everything
Asking to repay nothing repaid everything. A falsy zero, in code that moves money.
- sui-rust-sdk #218A parser proved against its grammar
A parser is not proven by the inputs you thought of. Generate the grammar instead.
- pinia-colada #568The cancel that did not cancel
Cancel stopped the request but not the timer, so a cancelled query came back to life.
Merged · posva/pinia-colada
Three merged by posva — who wrote Pinia Colada, and also Pinia and Vue Router. All three are the same class of bug: state that stays correct right up until something is cancelled, collides, or resolves out of order.
if (name === 'remove') {
} else if (name === 'remove' || name === 'cancel') {
cacheEntry.ext.isRetrying.value = false
cacheEntry.ext.retryCount.value = 0
Twenty-one merged in all, two of them elsewhere. Every merge and package
Open, under review · not merged
MystenLabs/sui #26855, consensus: make sub-dag block ordering a total order, sorted by BlockRef.
Lab: the craft, up close
Live on the site · every one works without a mouse

/lab/key-inspector
What the keyboard actually sends


/lab/scrollback
A hundred thousand lines that still scroll at frame rate
Also on npm: pinia-colada-plugin-normalizer · sui-gas-station. Shipped, then retired: s402 · colada-db · @sweefi (eleven packages). Still on npm, still evidence. Earlier and retired work