installs.me
< cd ~/blog

·4 min read#personas#explainer

What's Actually Inside a Persona Plugin

A persona plugin is about 30 KB of Markdown. No fine-tune, no vector database, no API key. When you install the demo persona at installs.me/lautaro, you get one skill and three reference files, and that's the whole trick. Here's the annotated tree.

The tree

lautaro/
├── .claude-plugin/
│   └── plugin.json            # name, version, one-line description
└── skills/
    └── lautaro/
        ├── SKILL.md           # the router: identity, triggers, retrieval rules
        └── references/
            ├── bio.md         # the facts: timeline, companies, numbers
            ├── frameworks.md  # the thinking: decision rules he actually uses
            └── voice.md       # the writing: cadence, vocabulary, tics

One of Claude Code's four plugin surfaces is in play here (skills; the other three are commands, hooks, and MCP servers). A persona needs exactly one skill. Everything else is layout.

The split between SKILL.md and references/ is not cosmetic. It's how Claude Code's progressive disclosure works, and getting it wrong is the most common way personas go bad.

SKILL.md: the router

A skill is a SKILL.md with YAML frontmatter. Two fields matter:

---
name: lautaro
description: Invoke when the user wants Claude to think, write,
  advise, or decide as Lautaro Schiaffino. Triggers on "as Lauta",
  "in my voice", "what would I say", "ghostwrite a tweet",
  "advise this founder", or any first-person work tied to his
  blog, his companies, or his investing portfolio.
---

The description is the only part of the skill Claude sees at session start. It's an if-statement written in prose. Write it vague ("helps with Lautaro-related tasks") and the skill either never fires or fires constantly. The installs.me generator writes descriptions as trigger phrases because that's what the model actually pattern-matches against.

The body of SKILL.md is short, under a page. It states who the persona is in two sentences, then acts as a table of contents: "for biographical facts, read references/bio.md; for how he decides, read references/frameworks.md; before writing anything in his voice, read references/voice.md." That's it. The heavy content lives one hop away.

Why not inline everything? Because SKILL.md loads whenever the skill triggers, and you're paying for it in context on every invocation. A question like "would Lauta take this term sheet?" needs frameworks.md but not voice.md. The router pattern means each task pulls only the file it needs.

references/bio.md: the facts

The grounding layer. Dates, companies, numbers, roles:

  • Rodati, first startup, what happened and why
  • Sirena, the WhatsApp-for-sales company, acquired by Zenvia for $30M
  • Darwin AI, current, CEO, AI employees for LatAm SMBs
  • Angel positions, board roles, where he writes (lauta.blog)

This file exists so the persona never hallucinates its own resume. Without it, ask a persona "tell me about your exit" and the model improvises a plausible-sounding acquisition. With it, the model has one canonical timeline and cites the real numbers. It's the cheapest file to generate (the source material is LinkedIn, a blog's about page, a few interviews) and the highest leverage per token.

references/frameworks.md: the thinking

The file that separates a persona from a style transfer. It captures decision procedures, not opinions:

  • How he evaluates a founder in the first 20 minutes of a pitch
  • His threshold for when a LatAm startup should price in USD
  • The "sell before you build" rule from the Sirena years, with the specific story attached
  • What he thinks distribution-first means in practice, with the counterexample

The format that works is rule, then receipt. "Charge from day one" alone is a fortune cookie. "Charge from day one, because at Sirena the free pilot cohort converted at a fraction of the paid pilot cohort" is a framework the model can extend to new situations. installs.me mines these from blog posts, call transcripts and meeting notes, because people state their real frameworks out loud far more often than they write them down.

When you ask the installed persona to advise a founder, this is the file it reads. The output stops being generic startup advice and starts having positions.

references/voice.md: the writing

The style spec, and the hardest file to get right. Adjectives don't work; "direct and warm" describes half the internet. What works is mechanics:

  • Sentence length distribution (short declaratives, rare subordinate clauses)
  • Signature moves (opens with the conclusion, uses second person, numbers over adjectives)
  • Vocabulary: words he overuses, words he'd never use
  • Code-switching rules: when Spanish leaks into English and vice versa
  • Three verbatim excerpts from lauta.blog as calibration anchors

The excerpts matter more than the rules. Models imitate examples better than they follow instructions, so voice.md is one-third specification and two-thirds quoted sample.

The distribution layer

The plugin ships through a marketplace, which is a marketplace.json served at the persona's URL. One sharp edge, verified on Claude Code CLI 2.1.x: plugin sources referenced over a URL must be git-backed (the git-subdir source type). Point a marketplace entry at a relative HTTP path and the install fails silently, no error, no plugin. installs.me handles this by backing every persona with a git repo, so https://installs.me/lautaro resolves to a marketplace whose source Claude Code can actually clone.

From the installer's side, none of this plumbing is visible. Two commands, and every future session of their Claude Code can think like the person in the files.

What's deliberately not inside

No conversation history. No raw document dumps. No embeddings. The generator's job is compression: read gigabytes of Drive, calendar and call transcripts, and emit four files small enough to sit in context. A persona that ships its source material isn't a persona, it's a search problem. The four-file shape is the claim that a person's professional judgment, compressed honestly, fits in 30 KB.

Install a person

installs.me turns your files, calendar and calls into a Claude Code plugin that thinks like you. Anyone installs it with two commands:

/plugin marketplace add https://installs.me/lautaro
/plugin install lautaro@lautaro-installs