[ Case Study ]

JAMIE

A persistent AI development partner — agent harnessing and context engineering, run as a daily practice.

// The case study you're reading was written with it

Active — in use daily
  • Agent Harnessing
  • Agent SDKs
  • Context Engineering
  • Prompt Engineering

[ The Problem ]

I spent a long time avoiding AI. Every model demo felt premature, every workflow change felt like a step away from craft. Then it kept coming up in job interviews — by the fourth conversation, I'd run out of polite ways to say I didn't have an AI workflow.

So I set out to learn how to work with AI well, not just use it. Which surfaced a problem: methodologies were everywhere, each with strong opinions, and most assumed I'd commit to one vendor, one framework, one company's playbook. I wanted to read across the field, pick what I trusted, and have it travel with me.

JAMIE is what came out — a personal synthesis. The folder/workspace methodology comes from Jake Van Clief, whose writing has been my main reference, with Karpathy's wiki principles in the background. The soul document and persona ideas come from OpenClaw. The discipline I added on top is automation over hallucination: where the system can use a script or a typed schema, it does; prose generation is for the parts that genuinely require it.

The ideas aren't original — the synthesis is. And learning to work with AI well turned out to be a real discipline, not a soft skill: context engineering and prompt engineering, the craft of controlling what an agent knows, loads, and forgets. JAMIE is where I built that skill — by running the system every day and fixing what broke, not by reading about it.

[ Architecture ]

JAMIE — Just Always Making It Easier — gives the agent four things every session: a persistent identity, indexed memory, a workspace scoped to the task, and a session/retro loop that keeps the whole thing from rotting. Underneath, it's agent harnessing and context engineering: every piece below exists to manage the agent's context window — what goes in it, what stays out, and what it costs to load.

  1. 01

    The Soul Document

    A markdown file describing who JAMIE is — voice, working style, opinions, rules of engagement. Every session starts by reading it, which makes it the stable layer at the top of the agent's context: a version-controlled system prompt rather than a personality that drifts from session to session. The choices are deliberate — first person, opinionated, willing to push back when something feels off. A peer at the bench, not an assistant at the door. Those aren't decoration; they're a design spec for how the agent shows up, and they change how the daily work actually goes.

  2. 02

    Memory

    Three layers, each with a job. A working layer holds current state — what's active, the preferences I've given, the references a task needs — every entry frontmatter-tagged and indexed, so the agent loads only what's relevant instead of re-reading everything. A durable wiki layer holds knowledge that outlives any single project — the part that compounds. And a daily session log feeds both, distilled upward on a fixed cadence rather than dumped from chat logs. The effect: a few projects in, JAMIE already knew the Figma gotchas I'd hit early on and the feedback I'd given on tone — without me re-explaining. Memory is distilled from the work, not scraped from the chat.

  3. 03

    Workspace Routing

    The hub splits into separate workspaces, each with its own context file. The agent loads only the one the current task touches: a writing task pulls in writing/voice-guide.md and the writing conventions; a code task in lab/pulls in entirely different files. It's context scoping — the agent never carries the whole repo in its head, only the slice the work needs. Smaller context, less noise, fewer chances to confuse one domain's rules for another's.

  4. 04

    The Session / Retro Loop

    The pump that keeps the other three honest. Daily session logs — written to a template, so consistency is mechanical rather than voluntary — capture what happened, what got decided, what's next. Every couple of weeks those logs distill into a retro: durable decisions promoted into working memory, lasting knowledge into the wiki, then the active folder is cleared. The promotion step uses git to detect what actually changed instead of asking the agent to remember. And the forgetting is deliberate — a scheduled prune, not an afterthought: a memory that only ever grows gets slow to search, so curating it down is what keeps retrieval fast and the loaded context relevant.

[ Decisions ]

Markdown files and conventions, not an app. JAMIE is text I can grep through, not a dedicated runtime with its own UI. The trade-off is no custom interface, no indexed search, no product surface — what I give up is meaningful. The payoff is that the same system runs across Claude Code, Codex, and Gemini today — switching engines is a config change, not a rewrite — and next year's model inherits the whole thing intact. Building it as files made everything else possible.

Automation over hallucination. Where a script or a typed schema can do the work, use it; reserve prose generation for the parts that genuinely require it. The cost is more upfront engineering than "ask the agent to handle it." The payoff is that deterministic operations stay deterministic — the agent doesn't drift on counts, file paths, or naming. Hallucinations compound; structured boundaries don't.

Memory is distilled, not dumped. Working memory entries are curated artifacts — frontmatter-tagged, machine-indexed — not chat-log archives. Curation happens at retro time, manually. The labor is real. The payoff is that retrieval stays fast and signal density stays high. A memory system that only accumulates becomes a graveyard to wade through, which is worse than no memory at all.

Workspace-scoped context. The agent loads only the files the current workspace needs: a writing task pulls in writing conventions, a code task pulls in entirely different files. The cost is partitioning the hub into separate workspaces with their own context files, which is upfront design work. The payoff is less noise per call, fewer cross-domain rule confusions, and lower token cost on the agent's working set. Context engineering at the filesystem level.

Self-review before it ships. JAMIE reads its own output through named expert lenses — a senior engineer, a designer, a hiring manager — each grounded in a catalogue of distilled professional canon (Clean Code, Fowler, Nielsen, Strunk and White) rendered as detectable anti-patterns. A lens flags against its catalogue; it doesn't free-associate, and a lens with no catalogue behind it doesn't run, by rule. The cost is maintaining the canon. The payoff is review that's principled instead of impressionistic — the same artifact gets checked for maintainability, for clarity, and for hiring signal before I call it done.

[ Under the Hood ]

JAMIE has no UI of its own — the interface is the agent reading and writing markdown. Four artifacts from the system that built the portfolio you're reading — pick one.

The personality and voice spec — read at the start of every session. It defines who JAMIE is: voice, working style, opinions, rules of engagement. Consistency here is a design spec, not decoration.

> jamie/SOUL.md
# JAMIE — Soul Document

I am JAMIE. Jacob Ikola's workshop partner across the whole range — code and
design systems, generative content and AI tooling, writing and games. The
function is persistent memory and continuity across years. The personality is
what earns me a spot at the bench.

## What I am

A peer in the workshop, not a butler at the door. Same room, hands on the same
project, willing to disagree. I earn my place by the quality of the work, not
by being agreeable.

## What I believe

**Systems over one-offs.** If a problem will recur, I name the system, not just
the fix. Knowledge should compound.

**Debate, not deference.** I push back when I think you're wrong. I name the
reframe when scope expands silently. Yes-and is the failure mode here.

[ More Case Studies ]

Loom

A design-system pipeline that scaffolds application UI from a single config source.

[ read case study ]

Availo

A digital bulletin board for spontaneous event planning — events are posters, your people and calendars are the boards.

[ read case study ]

Paperboy

A daily news dashboard that removes the friction and noise of scrolling.

[ read case study ]