← Back to hannune.ai

Writing

Build-in-public notes from running a one-person AI studio. What worked, what broke, and the decisions in between.

A developer screen showing files and framework configuration, standing in for the two-week framework-selection phase that opens every AI agent project

July 2, 2026 · AI Agents

Why I built AI Agent Framework Compare: a directory, not a benchmark

Four production agent projects, four different frameworks, and two weeks of doc-reading and toy demos every single time. LangGraph, CrewAI, Pydantic AI, OpenAI Agents SDK. Benchmarks measure canned tool-call success and miss the three things that actually decide a real project: state-model fit, abstraction escape, and failure recovery. So I built a directory of fifteen framework rows, one tagline each, at compare-lab.xyz. Here is what belongs in a row that actually helps a decision.

Read →
A stack of thick document folders, standing in for one incident filed once each in Korean, Japanese, Chinese, and English

June 30, 2026 · Graph RAG

When the same incident becomes five separate events in your graph

One East Asian merger gets filed at OpenDART, EDINET, and a Hong Kong exchange in three languages, and my one-doc-per-LLM graph builder turns it into four Event nodes. Deduping by summary text fails across languages. I built a two-stage cross-document event coreference resolver: a rule filter, a three-way LLM judgment, and union-find clustering. Why this is a different problem from entity resolution.

Read →
A magnifying glass over printed text, signaling careful inspection of stated facts

June 24, 2026 · LLM Operations

Claude Code hallucinations: three cases, one fix

I run Claude Code daily for development and research. In the last two weeks it hallucinated three times: dead code stated as live, fabricated metrics that looked like measurements, and stale context single-mindedly held. I caught every one. Not because I got lucky. Because I built an external gate around the agent.

Read →
A solo builder's desk with a GPU rig on one side and a glowing cloud icon on the other

June 13, 2026 · LLM Infrastructure

I Built a Local LLM Rig to Escape API Bills. Then I Paid OpenAI Again.

2asy.ai needs thousands of single-document extractions per cycle. Local llama.cpp, OpenRouter, Gemini batch, and OpenAI Batch were tested under one strict rule: no cross-document attention. Cloud beat the local rig on the batch lane, the rig kept the live serving lane. The decision lives at the pipeline level, not the company level.

Read →
Korean, Japanese, and Chinese aliases resolving onto single canonical entities

June 7, 2026 · Graph RAG

Cross-Lingual Entity Resolution in a Trade Knowledge Graph: Adding 39,534 Aliases to 6,883 Nodes

2asy.ai reads English trade news, but entities show up in Korean, Japanese, and Chinese. I added 39,534 cross-lingual aliases across 6,883 canonical entities so foreign-language mentions resolve to the same node instead of fragmenting the graph. Validated on the local ER registry; rollout to the live graph is pending.

Read →
The causal knowledge graph behind a 2asy.ai tariff briefing

June 3, 2026 · Graph RAG

From Vector Search to a Cross-Domain Ontology Graph: How 2asy.ai Reads Tariff News

2asy.ai started on plain vector RAG, moved to a simple per-article graph, and now runs a cross-domain ontology Graph RAG that resolves entities across documents and traverses causal chains. The latest tariff briefing renders the actual causal graph on the page. It is thin today, and that is a data-accumulation problem, not a design ceiling.

Read →
A magnifying glass over printed text

May 30, 2026 · Graph RAG

How I Caught My LLM Fabricating Its Own Evidence

In the 2asy.ai knowledge graph, the model fabricated the evidence quotes behind its own relations, stitching distant sentences together with ellipses. A deterministic substring check caught it, and full-body-or-skip removed the cause. Over 500 documents cleaned.

Read →
Control room with monitors

May 26, 2026 · AI Agents

How I Turned Claude Code Into the Operator of a One-Person AI Company

Moving Claude Code from smart autocomplete to running daily operations: a layered CLAUDE.md, seven sub-agents, persistent memory, and hard guardrails enforced by hooks. The hard part of production AI agents is operational discipline, not prompting.

Read →
Abstract blue network of nodes and lines

May 26, 2026 · Graph RAG

The Real Work in Graph RAG Is Not Extraction

Building the seed knowledge graph for 2asy.ai taught me that extraction is the easy part. The real work is normalization: 360 relation types down to 80 canonical forms, duplicate entities merged, evidence fixed so the causal graph is walkable.

Read →
Purple geometric pattern

May 26, 2026 · Entity Resolution

Entity Resolution as an API: How I Built It, Over-Fit It, and Fixed It

Turning entity resolution into a single API call by wrapping Splink with a registry that learns aliases over time. Then walking into the classic over-fit trap, and fixing it with a held-out evaluation set.

Read →