Skills as Agent Memory: A Framework for Reusable Agent Intelligence in Auctor
Version 1.0 — March 2026
Abstract
Modern AI agent systems encode their domain knowledge in two places: the model weights they ship with, and the instruction strings developers write for them. The first is frozen at training time. The second is frozen at deploy time. Neither can be refined by the operators who use the system daily.
This paper introduces a third layer — Skills — a file-based primitive for packaging reusable agent instructions, reference material, and executable scripts into discoverable, searchable, version-controlled units. We examine the Skills primitive as implemented in the Mastra AI framework, analyze how it maps onto the Auctor content engine's nine-agent architecture, and propose an adoption path that shifts Auctor's agent intelligence from static code to living, operator-editable documents.
The core claim is simple: agent instructions should be content, not code.
1. Introduction
The Problem with Inline Instructions
Auctor operates a nine-agent content pipeline spanning competitive intelligence, content creation, and publishing. Each agent carries an instructions string — a paragraph or two of natural language that tells the agent who it is, what tools it has, and how to behave.
These strings live in TypeScript source files. Changing how the editor agent evaluates factual claims requires a code change, a review, a deploy. The operator who notices the agent is too lenient on sourcing cannot fix it without involving the engineering team.
This is the same problem that plagued early web applications: content was embedded in code. The solution then was to extract content into databases and CMSes. The solution here is analogous — extract agent instructions into a structured, discoverable, file-based system that agents can load on demand.
What We Want
- Operator-editable intelligence — Refine how agents think by editing markdown files, not deploying code
- Composable knowledge — Share a brand voice guide across writer, editor, and strategy agents without duplication
- On-demand loading — Agents pull relevant guidance when they need it, keeping system prompts lean
- Searchable guidance — Agents find relevant instructions across all skills via keyword or semantic search
- Version control — Pin production agents to a known-good instruction set while iterating in development
2. The Skills Primitive
Skills were introduced in @mastra/core@1.1.0 and follow the open Agent Skills specification. The design is intentionally simple.
2.1 Anatomy of a Skill
A skill is a folder. It contains one required file and up to three optional directories:
1/skills/competitive-analysis/
2 SKILL.md ← Required. Instructions + metadata.
3 references/ ← Optional. Supporting documentation.
4 threat-scoring.md
5 gap-analysis.md
6 scripts/ ← Optional. Executable scripts.
7 score-threats.ts
8 assets/ ← Optional. Images, templates, data files.
9 competitor-matrix.csvThe SKILL.md file uses YAML frontmatter for machine-readable metadata, followed by freeform markdown instructions:
1---
2name: competitive-analysis
3description: Analyzes competitor content strategy and identifies gaps
4version: 1.0.0
5tags:
6 - strategy
7 - intelligence
8---
9
10# Competitive Analysis
11
12You are performing competitive content analysis. Follow these steps:
13
141. Pull the domain summary for the target competitor
152. Score threats using the rubric in references/threat-scoring.md
163. Identify coverage gaps against our content graph
174. Rank opportunities by estimated traffic impactThe frontmatter is intentionally minimal — name, description, version, tags. Everything else is natural language. The agent reads it like documentation because that is exactly what it is.
2.2 How Agents Discover Skills
When a Workspace has skills configured, Mastra injects three tools into every agent connected to that workspace:
| Tool | Behavior |
|---|---|
skill | Loads a skill's full SKILL.md content into the agent's context. The agent calls this whenever it needs guidance. |
skill_read | Reads a specific file from a skill's references/, scripts/, or assets/ directory. |
skill_search | Searches across all skill content using BM25 keyword search or vector similarity. Returns relevant fragments. |
Available skills are listed in the agent's system message so it knows what exists. The agent decides when to load a skill based on the task at hand.
2.3 Stateless by Design
There is no "activate" or "deactivate" state. An agent loads a skill's instructions via the skill tool, receives the content in the tool result, and uses it to guide its behavior. If the instructions later fall out of the context window due to conversation length or compaction, the agent simply calls skill again to reload them.
This is a deliberate design choice. Stateless loading means:
- No activation state to synchronize across agents
- No risk of stale cached instructions
- Agents can load multiple skills simultaneously
- Skills can be updated on disk between agent turns
2.4 Search and Indexing
Skills integrate with the workspace's search infrastructure. When BM25 or vector search is enabled, skill content is automatically indexed alongside other workspace files. An agent can call skill_search("how to score competitor threats") and receive matching fragments from across all skills — even if it doesn't know which specific skill contains the answer.
This is particularly powerful for agents handling novel requests that span multiple skills. The agent doesn't need to know the skill taxonomy; it searches by intent.
2.5 Configuration
Skills are enabled by adding a skills property to the Workspace constructor:
1const workspace = new Workspace({
2 filesystem: new LocalFilesystem({ basePath: './workspace' }),
3 skills: ['/skills'],
4 bm25: true,
5})The configuration supports static paths, multiple directories, glob patterns for nested discovery, and dynamic path functions that can vary by context:
1// Multiple skill sources
2skills: ['/skills', '/team-skills', '/client-skills']
3
4// Glob-based discovery
5skills: ['./**/skills']
6
7// Dynamic based on context
8skills: (context) => {
9 const paths = ['/skills']
10 if (context.user?.role === 'strategist') {
11 paths.push('/strategy-skills')
12 }
13 return paths
14}2.6 Versioned Skills for Production
For production environments, Mastra provides VersionedSkillSource — a mechanism that serves published skill versions from a content-addressable blob store:
1import { VersionedSkillSource } from '@mastra/core/workspace'
2
3const workspace = new Workspace({
4 filesystem: new LocalFilesystem({ basePath: './workspace' }),
5 skills: ['/skills'],
6 skillSource: new VersionedSkillSource(versionTree, blobStore, versionCreatedAt),
7})This decouples skill content from the live filesystem. Production agents read from an immutable snapshot while development agents read from the working directory. The versionTree is a manifest mapping file paths to content-addressed blob hashes, ensuring reproducibility.
3. Auctor Today
3.1 Architecture Overview
Auctor is an operator tooling system for content strategy, creation, and publishing. Its AI layer is built on the Mastra framework and consists of:
- 9 Content Engine agents organized into three pipeline layers
- 3 Harness orchestrator agents that coordinate multi-agent workflows
- 5 Harness subagents that execute specialized tasks
- 42 tools spanning research, planning, content, and publishing
- 3 workflows (strategy planning, brief generation, draft production)
- 1 Workspace with BM25 search over library, content, and strategy files
3.2 The Three Pipeline Layers
1┌─────────────────────────────────────────────────┐
2│ STRATEGY (Indigo) │
3│ competitive-intelligence → search-landscape │
4│ → content-strategy │
5├─────────────────────────────────────────────────┤
6│ CONTENT (Amber) │
7│ content-brief → writer → editor │
8├─────────────────────────────────────────────────┤
9│ PRODUCTION (Emerald) │
10│ final-cleanup → publishing → seo-autofix │
11└─────────────────────────────────────────────────┘Each agent has a fixed set of tools and an inline instruction string. The harness provides an interactive layer with three modes (Strategy, Create, Ops) that map to these pipeline layers, each with an orchestrator that delegates to subagents.
3.3 How Instructions Work Today
Agent instructions are TypeScript string literals in source code. For example, the writer subagent:
1{
2 id: 'writer',
3 instructions:
4 'You are the primary draft writer for Consul (consul.ai). Follow the '
5 + 'brief exactly, write in a confident operator voice, and mark image '
6 + 'opportunities as [IMAGE: description]. Do not invent unsupported '
7 + 'claims. Use extractions and graph data to ground every assertion. '
8 + 'Target a high-trust B2B SaaS audience of CEOs and founders.',
9}This is the entirety of the writer's identity and behavioral guidance. It works, but it has three structural problems:
-
Monolithic — Voice guidance, structural rules, audience definition, and sourcing policy are compressed into one paragraph. There's no way for the agent to selectively load "just the voice rules" for a quick edit pass.
-
Static — Changing "confident operator voice" to something more specific requires a code change. The operator who writes content daily has no mechanism to refine these instructions based on what they observe.
-
Duplicated or absent — The voice definition exists in the writer instructions but not the editor's. The editor should enforce the same voice but has no reference to it. Adding it means maintaining the same text in two places.
3.4 The Workspace Gap
Auctor already has a Mastra Workspace with BM25 search enabled. It indexes /library/**, /content/**, and /strategy/**. Agents can search and read workspace files.
But the workspace has no skills property configured. The skill, skill_read, and skill_search tools are not available to agents. The workspace is a file system with search — not yet an instruction system.
4. Proposed Skill Architecture
4.1 Skill Taxonomy
We propose nine skills mapped to Auctor's three pipeline layers. Each skill encapsulates a distinct competency that one or more agents need:
Strategy Layer
| Skill | Description | Consumers |
|---|---|---|
competitive-analysis | How to analyze competitor pages, score threats, identify content gaps, and assess domain authority trends | competitive-intelligence, strategy orchestrator |
serp-interpretation | How to read SERP features (featured snippets, AI overviews, PAA), classify intent, and assess ranking opportunity | search-landscape, strategy orchestrator |
content-planning | How to prioritize topics, balance the content calendar, define KPIs, and evaluate content-market fit | content-strategy, strategy orchestrator |
Content Layer
| Skill | Description | Consumers |
|---|---|---|
brief-writing | How to structure content briefs: angle selection, outline architecture, keyword mapping, source requirements, and competitive positioning | content-brief, create orchestrator |
consul-voice | Consul's brand voice, tone, audience profile, terminology, and writing rules. The single source of truth for how Consul content should sound. | writer, editor, content-brief, create orchestrator |
draft-structure | Post anatomy: hooks, section patterns, CTA placement, internal linking strategy, image placement, and length targets by content type | writer, editor, create orchestrator |
Production Layer
| Skill | Description | Consumers |
|---|---|---|
seo-checklist | Pre-publish SEO validation: title/meta requirements, internal link minimums, schema markup, image alt text, heading hierarchy, and canonical URL rules | final-cleanup, seo-autofix, ops orchestrator |
cms-publishing | CMS adapter formatting: field mappings, metadata payload structure, indexing API protocol, and staging vs. production publish rules | publishing, ops orchestrator |
post-publish-ops | Post-publish monitoring: what to check (indexing status, ranking movement, error rates), when to check it, and escalation criteria | seo-autofix, ops orchestrator |
4.2 Cross-Agent Sharing
The key insight is that skills are not one-to-one with agents. The consul-voice skill is loaded by three different agents, each using it for a different purpose:
1consul-voice
2 ├── writer → uses it to set tone while drafting
3 ├── editor → uses it to evaluate tone consistency
4 └── content-brief → uses it to set voice expectations in the briefToday, this voice guidance either lives in one agent's instructions (and the others don't have it) or is duplicated across multiple instruction strings (and drifts over time). Skills solve this with a single file that multiple agents load on demand.
4.3 Filesystem Layout
Under the workspace root (AUCTOR_WORKSPACE_ROOT):
1/skills/
2 /competitive-analysis/
3 SKILL.md
4 /references/
5 threat-scoring-rubric.md
6 gap-analysis-template.md
7 domain-authority-benchmarks.md
8 /serp-interpretation/
9 SKILL.md
10 /references/
11 serp-feature-taxonomy.md
12 intent-classification-guide.md
13 ai-overview-analysis.md
14 /content-planning/
15 SKILL.md
16 /references/
17 prioritization-framework.md
18 kpi-definitions.md
19 calendar-balancing-rules.md
20 /brief-writing/
21 SKILL.md
22 /references/
23 brief-template.md
24 outline-patterns.md
25 angle-selection-criteria.md
26 /consul-voice/
27 SKILL.md
28 /references/
29 voice-guide.md
30 terminology-glossary.md
31 audience-profile.md
32 tone-examples.md
33 /draft-structure/
34 SKILL.md
35 /references/
36 post-anatomy.md
37 hook-patterns.md
38 internal-link-strategy.md
39 content-type-specs.md
40 /seo-checklist/
41 SKILL.md
42 /references/
43 seo-requirements.md
44 schema-templates.md
45 heading-hierarchy-rules.md
46 /cms-publishing/
47 SKILL.md
48 /references/
49 cms-field-map.md
50 metadata-payload-spec.md
51 indexing-protocol.md
52 /post-publish-ops/
53 SKILL.md
54 /references/
55 monitoring-checklist.md
56 escalation-criteria.md
57 ranking-watch-schedule.md4.4 Instruction Evolution
Agent instructions transform from monolithic behavioral descriptions to lightweight orchestration directives. The writer subagent's instructions evolve from:
Before (inline everything):
1You are the primary draft writer for Consul (consul.ai). Follow the brief
2exactly, write in a confident operator voice, and mark image opportunities
3as [IMAGE: description]. Do not invent unsupported claims. Use extractions
4and graph data to ground every assertion. Target a high-trust B2B SaaS
5audience of CEOs and founders.After (orchestration + skills):
1You are the primary draft writer for Consul. For every draft:
2
31. Load the consul-voice skill for tone, audience, and terminology
42. Load the draft-structure skill for post anatomy and section patterns
53. Load the approved brief via loadApprovedBrief
64. Ground every assertion in extractions and graph data
75. Mark image opportunities as [IMAGE: description]
8
9If you're unsure about voice or structure, search skills before guessing.The detailed "how" — what "confident operator voice" means, what hook patterns to use, how to handle internal links — moves into skill reference documents where it can be expanded, refined, and versioned independently.
5. Integration Design
5.1 The One-Line Change
Auctor's workspace configuration requires a single addition:
1// frontend/src/mastra/workspace.ts
2
3return new Workspace({
4 id: `auctor-ws-${opts.siteKey}`,
5 name: `Auctor Workspace (${opts.siteKey})`,
6 filesystem: new LocalFilesystem({
7 basePath: workspaceRoot,
8 contained: true,
9 readOnly,
10 }),
11 skills: ['/skills'], // ← This is the only new line
12 bm25: true, // Already enabled
13 autoIndexPaths: ['/library/**', '/content/**', '/strategy/**'],
14 tools: {
15 enabled: true,
16 requireApproval: !readOnly,
17 },
18})Because BM25 is already enabled, skill content is automatically indexed. The skill_search tool works immediately.
5.2 Harness Inheritance
The harness already receives its workspace via a factory function:
1// frontend/src/mastra/harness.ts
2workspace: () => createAuctorWorkspace({ siteKey: 'consul' }),Once createAuctorWorkspace includes skills, every harness subagent — explore, research, writer, editor, validator — automatically gains access to skill, skill_read, and skill_search. No changes to the harness configuration are needed.
The three orchestrator agents (strategy, create, ops) also inherit skills through the workspace, meaning they can load skill instructions before deciding which subagent to delegate to.
5.3 On-Demand Loading Pattern
Skills are loaded contextually, not preloaded. A typical interaction:
1Operator: "Write a draft for the approved brief on API gateway comparison"
2
3Create Orchestrator:
4 1. Calls skill("consul-voice") → loads voice/tone/audience guidance
5 2. Calls skill("draft-structure") → loads post anatomy for "comparison" type
6 3. Spawns writer subagent with these skill instructions in context
7
8Writer subagent:
9 1. Calls loadApprovedBrief → gets the brief
10 2. Already has voice + structure from orchestrator context
11 3. Calls skill_read("draft-structure", "references/content-type-specs.md")
12 → loads comparison-specific structural guidance
13 4. Writes the draftIf the conversation runs long and skill instructions are compacted out, any agent can call skill again to reload — no state management required.
5.4 Search-Driven Discovery
An operator might ask something that spans skills:
1Operator: "How should we handle competitor mentions in our content?"
2
3Strategy Orchestrator:
4 1. Calls skill_search("competitor mentions content policy")
5 2. Gets fragments from:
6 - consul-voice/references/tone-examples.md (how to reference competitors)
7 - competitive-analysis/SKILL.md (competitive positioning section)
8 - draft-structure/references/hook-patterns.md (comparison hooks)
9 3. Synthesizes guidance from multiple skillsThe agent doesn't need to know the skill taxonomy. BM25 search finds relevant content across all skills.
6. Migration Path
Phase 1: Foundation
Goal: Wire up skills infrastructure and create seed skills with immediate value.
- Add
skills: ['/skills']tocreateAuctorWorkspace - Create three seed skills from the highest-value instruction content:
consul-voice— Extract and expand voice guidance from writer/editor instructionsseo-checklist— Extract and expand from final-cleanup/seo-autofix instructionsbrief-writing— Extract and expand from content-brief agent instructions
- Verify agents can call
skill,skill_read, andskill_search
Validation: An agent in the harness can load consul-voice and reference it while drafting.
Phase 2: Extraction
Goal: Migrate detailed guidance from inline instructions to skills.
- Create remaining six skills with full reference documents
- Refactor agent instruction strings from behavioral descriptions to orchestration directives
- Each agent's instructions become: "here's your role, here are the skills to load, here's when to search"
- Test that agents produce equivalent or better output with skill-based instructions
Validation: Side-by-side comparison of agent outputs before and after instruction refactoring.
Phase 3: Operator Iteration
Goal: Enable operators to refine agent behavior without engineering involvement.
- Document the skill file format for operators
- Expose skill files in the agent workspace pane (already a file browser)
- Operators edit skill content directly — voice tweaks, checklist additions, template updates
- Changes take effect on the next agent turn (no deploy)
Validation: An operator modifies consul-voice/references/terminology-glossary.md and the writer agent uses the updated terminology in its next draft.
Phase 4: Production Versioning
Goal: Pin production agents to tested skill versions.
- Implement
VersionedSkillSourcefor production deployments - Publish skill snapshots as content-addressed blobs
- Development reads from filesystem, production reads from versioned source
- Skill changes go through a review/publish cycle before reaching production agents
Validation: Production agents use a pinned skill version that doesn't change when filesystem skills are edited.
7. Conclusion
Auctor's agents are effective but rigid. Their intelligence is encoded in TypeScript string literals that only engineers can modify and only deploys can deliver. The Skills primitive offers a clean extraction path: move the detailed "how" into structured, searchable, version-controlled markdown files while keeping the "what" and "when" in agent instructions.
The integration cost is minimal — one line of workspace configuration, plus the work of writing skill content. The return is an agent system whose knowledge layer can be refined by the people who use it, shared across agents without duplication, searched by intent rather than by name, and versioned independently from the application code.
Agent instructions should be content, not code. Skills make that possible.
Appendix A: Skill Specification Reference
SKILL.md Frontmatter
1---
2name: string # Unique skill identifier
3description: string # One-line description (used for discovery)
4version: string # Semantic version
5tags: # Discovery tags
6 - string
7---Agent Skill Tools
| Tool | Parameters | Returns |
|---|---|---|
skill(name) | Skill name | Full SKILL.md content |
skill_read(name, path) | Skill name + relative file path | File content from references/scripts/assets |
skill_search(query) | Search query string | Matching fragments across all skills |
Workspace Configuration
1interface WorkspaceSkillsConfig {
2 skills: string[] | ((context: SkillsContext) => string[] | Promise<string[]>)
3 skillSource?: SkillSource // Custom source (e.g., VersionedSkillSource)
4 bm25?: boolean | BM25Config // Enable keyword search
5 vectorStore?: VectorStore // Enable semantic search
6 embedder?: EmbedderFunction // For vector embeddings
7}Appendix B: Auctor Agent-to-Skill Mapping
1Agent Skills Used
2───────────────────────── ──────────────────────────────────
3competitive-intelligence competitive-analysis
4search-landscape serp-interpretation
5content-strategy content-planning, competitive-analysis
6content-brief brief-writing, consul-voice
7writer consul-voice, draft-structure
8editor consul-voice, draft-structure, seo-checklist
9final-cleanup seo-checklist
10publishing cms-publishing
11seo-autofix seo-checklist, post-publish-ops
12
13Orchestrator Skills Used
14───────────────────────── ──────────────────────────────────
15strategy-orchestrator competitive-analysis, serp-interpretation, content-planning
16create-orchestrator brief-writing, consul-voice, draft-structure
17ops-orchestrator seo-checklist, cms-publishing, post-publish-ops