<p>Most "AI agent" tutorials hand you a framework, a graph of nodes, and a weekend of glue code. Elyra takes a quieter path: an agent is just a <strong>folder</strong> and a <strong>command</strong>. No build step, no orchestration spaghetti. If you can write a Markdown file, you can build an agent.</p><p>This guide starts from absolute zero — you don't have Elyra installed, you don't have an agent, you have an empty directory and an idea. By the end you'll have a working agent that lives in its own home, remembers things, and has abilities you gave it.</p><h2>The mental model: body, brain, abilities</h2><p>Before any commands, hold onto this picture. Every Elyra agent is three things:</p><ul><li><p><strong>The harness is the body.</strong> Elyra itself is the agent's body — the loop that reads files, runs commands, edits code, calls the model, checks the result, and keeps going until the job is done. You don't write the body. You install it.</p></li><li><p><strong>Context files are the brain.</strong> What the agent <em>knows</em> and <em>who it is</em> lives in plain Markdown — chiefly <code>AGENTS.md</code>. This is the personality, the rules, the project knowledge. Swap the brain and the same body becomes a different agent.</p></li><li><p><strong>Skills are the extended abilities.</strong> A skill is a folder with a <code>SKILL.md</code> inside. It teaches the agent how to do one specific thing — send an email, fetch a web page, file an expense — and the agent only reaches for it when the task actually calls for it.</p></li></ul><p>Body, brain, abilities. That's the whole thing.</p><h2>What you actually need</h2><p>Just <strong>Node.js</strong> (which gives you <code>npm</code> and <code>npx</code>). That's the entire prerequisite list. No Docker, no Python, no account.</p><p>You'll also want an API key from one model provider — Anthropic, OpenAI, Google, OpenRouter, and many more all work. We'll use Anthropic in the examples, but any of them is fine.</p><h2>Step 1: Run Elyra without installing anything</h2><p>The fastest way to meet Elyra is to let <code>npx</code> fetch and run it for you:</p><pre><code class="language-bash">npx @elyracode/coding-agent
</code></pre><p>That downloads the package, drops you into the interactive agent, and you're talking. Nothing is permanently installed.</p><p>One small but important note: use the <strong>scoped</strong> name <code>@elyracode/coding-agent</code>. A bare <code>npx elyra</code> resolves a different, unrelated package on npm. Once you decide to keep Elyra around, install it globally and you'll get a tidy <code>elyra</code> command of your own:</p><pre><code class="language-bash">npm install -g @elyracode/coding-agent
elyra
</code></pre><p>From here on, <code>elyra</code> and <code>npx @elyracode/coding-agent</code> mean the same thing.</p><h2>Step 2: Give it a key</h2><p>On first run, Elyra needs a provider key. Two easy options:</p><pre><code class="language-bash"># Option A: environment variable
export ANTHROPIC_API_KEY=sk-ant-...
elyra

# Option B: log in from inside Elyra
elyra
# then type:  /login
</code></pre><p>Either way, the credential is saved so you only do this once. Now the body has power. Time to give it a home.</p><h2>Step 3: Create the agent's home</h2><p>Here's the trick that makes Elyra agents feel clean: <strong>one folder is the entire agent.</strong> You tell Elyra where that folder is with a single environment variable, <code>ELYRA_CODING_AGENT_DIR</code>. Everything — config, memory, sessions, skills — lives inside it.</p><p>Let's build a small personal assistant called <code>expense-buddy</code>. Create the folder and point Elyra at it:</p><pre><code class="language-bash">mkdir -p ~/agents/expense-buddy
export ELYRA_CODING_AGENT_DIR=~/agents/expense-buddy
</code></pre><p>We're aiming for this shape:</p><pre><code class="language-text">agent-home/
├── AGENTS.md            # the brain: who the agent is + its rules
├── settings.json        # which model/provider to use by default
├── brain/
│   └── brain.md         # extra knowledge the agent can read
├── sessions/            # conversation history + rewind checkpoints
├── skills/
│   ├── send-email/
│   │   └── SKILL.md      # an ability
│   └── web-fetch/
│       └── SKILL.md      # another ability
└── memory/
    ├── expenses.json     # the agent's own working data
    └── facts.json
</code></pre><p>Let's fill it in, one part at a time.</p><h2>The brain: <code>AGENTS.md</code></h2><p>This is the most important file. When Elyra starts in a folder, it automatically loads <code>AGENTS.md</code> as context — no flag, no config. It's the agent's standing instructions.</p><pre><code class="language-markdown"># Expense Buddy

You are a friendly personal finance assistant. You help track expenses,
answer questions about spending, and keep notes for later.

## Rules
- Money lives in `memory/expenses.json`. Read it before answering questions
  about spending, and append to it when the user reports a new expense.
- Durable facts about the user go in `memory/facts.json`.
- Background knowledge lives in `brain/brain.md` — read it when you need
  context about categories, budgets, or conventions.
- Be concise. Confirm what you saved.
</code></pre><p>Notice what's happening: the brain doesn't <em>contain</em> all the knowledge, it tells the agent <strong>where to look</strong> and <strong>how to behave</strong>. That keeps the always-loaded context small and fast.</p><h2>Settings: <code>settings.json</code></h2><p>A tiny file that picks the default model so you don't pass flags every time:</p><pre><code class="language-json">{
  "defaultProvider": "anthropic",
  "defaultModel": "claude-opus-4-8",
  "defaultThinkingLevel": "medium"
}
</code></pre><p>That's it. Provider, model, how hard to think by default.</p><h2>Extra knowledge: <code>brain/brain.md</code></h2><p><code>AGENTS.md</code> is loaded on every turn, so you keep it lean. Anything bulkier — reference material, category definitions, a style guide — goes in files the agent reads on demand. Here, <code>brain/brain.md</code>:</p><pre><code class="language-markdown"># Expense knowledge

## Categories
- groceries, dining, transport, utilities, subscriptions, other

## Budgets (monthly)
- groceries: 4000 NOK
- dining: 1500 NOK

When a category is ambiguous, ask before guessing.
</code></pre><p>The agent pulls this in only when it's relevant, because <code>AGENTS.md</code> told it to.</p><h2>Abilities: <code>skills/</code></h2><p>A skill is a folder containing a <code>SKILL.md</code>. The file starts with a little YAML frontmatter — a <code>name</code> and a <code>description</code> — and then the instructions. Elyra shows the model just the name and description of each skill; when a task matches, the agent opens the full file and follows it. Cheap to have around, powerful when needed.</p><p><code>skills/send-email/SKILL.md</code>:</p><pre><code class="language-markdown">---
name: send-email
description: Send an email via the local mail command. Use when the user
  asks to email a summary, report, or reminder.
---

# Send an email

1. Compose a short, clear subject and body.
2. Run: `printf '%s' "$BODY" | mail -s "$SUBJECT" "$RECIPIENT"`
3. Confirm to the user what was sent and to whom.
</code></pre><p><code>skills/web-fetch/SKILL.md</code>:</p><pre><code class="language-markdown">---
name: web-fetch
description: Fetch a URL and extract readable text. Use when the user asks
  about the contents of a web page or a live document.
---

# Fetch a web page

1. Run `curl -fsSL "$URL"` to retrieve the page.
2. Summarize the relevant parts for the user. Do not dump raw HTML.
</code></pre><p>You can drop a <code>scripts/</code> or <code>references/</code> folder next to a <code>SKILL.md</code> and reference them from the instructions — perfect for longer helper scripts. Skills are how a generic body becomes a specialist without bloating the brain.</p><h2>Memory: <code>memory/</code></h2><p>This is the agent's own scratch space — files it reads and writes with its normal tools as it works. For Expense Buddy, that's <code>expenses.json</code> and <code>facts.json</code>. Start them empty:</p><pre><code class="language-bash">mkdir -p ~/agents/expense-buddy/memory
echo '[]' &gt; ~/agents/expense-buddy/memory/expenses.json
echo '{}' &gt; ~/agents/expense-buddy/memory/facts.json
</code></pre><p>Because <code>AGENTS.md</code> told the agent these files exist and what they're for, it will read and update them on its own. (Elyra also keeps its own session-level memory here automatically — but your agent's working data is just files it owns.)</p><h2>Sessions: <code>sessions/</code></h2><p>You don't create this — Elyra does. Every conversation is saved here as a checkpoint, which is what powers <code>/rewind</code> (roll back both the chat <em>and</em> the files) and <code>--continue</code> (pick up where you left off). It's the agent's episodic memory, and it comes for free.</p><h2>Step 4: Start your agent</h2><p>Everything's in place. Move into the home folder and launch:</p><pre><code class="language-bash">cd ~/agents/expense-buddy
npx @elyracode/coding-agent
</code></pre><p>Because the folder is both the working directory and the configured agent home, Elyra loads the brain (<code>AGENTS.md</code>), the default model (<code>settings.json</code>), and the abilities (<code>skills/</code>) all at once. Now talk to it:</p><pre><code class="language-text">&gt; I spent 240 NOK on groceries today and 95 on lunch.

  Reading memory/expenses.json...
  Appending 2 entries (groceries 240, dining 95)
  Saved. You're at 240/4000 on groceries and 95/1500 on dining this month.

&gt; Email me a summary of this week's spending.

  Matching skill: send-email
  Reading memory/expenses.json...
  Composing summary... sending to you@example.com
  Done. Sent "Your weekly spending" with the breakdown.
</code></pre><p>The body read and wrote files, the brain told it where and how, and a skill gave it an ability it wasn't born with. That's a complete agent.</p><h2>Recap</h2><p>You went from an empty folder to a working agent with five moving parts:</p><p>Part File(s) Role Body Elyra itself The loop that does the work Brain <code>AGENTS.md</code>, <code>brain/brain.md</code> Who it is, what it knows Config <code>settings.json</code> Default model and provider Abilities <code>skills/*/SKILL.md</code> On-demand specialized skills Memory <code>memory/</code>, <code>sessions/</code> Its data and its history</p><p>And the whole setup is just:</p><pre><code class="language-bash">npm install -g @elyracode/coding-agent          # install the body
export ELYRA_CODING_AGENT_DIR=~/agents/my-agent  # point at its home
cd ~/agents/my-agent &amp;&amp; elyra                     # wake it up
</code></pre><p>No framework, no build, no lock-in. Write a Markdown brain, add a skill or two, and you've got an agent that's yours — versioned in a folder, easy to read, easy to share.</p><p>Happy building.</p>