System trace

How skills hand off without leaking state

Eight skills in the pipeline. None of them share memory. Every handoff is a file. Every contract is a SKILL.md. This is what makes the system debuggable, versionable, and replaceable.

file-based interfaces · no shared memory frozen SKILL.md contracts · versioned in git

The problem with shared-memory agents

Most multi-step AI workflows fail the same way: one agent passes context to the next via a growing conversation thread. After three steps, the model is navigating a wall of accumulated context — earlier instructions contradict later ones, the original constraints blur, and the output drifts.

The Next Move Engine uses a different model: files as the interface between agents. Each skill reads from a well-defined input location and writes to a well-defined output location. No skill knows what the previous one did except by reading the file it left behind.

What a SKILL.md contract looks like

Every skill has a SKILL.md — a frozen spec checked into the repo. Not a system prompt in code. A first-class artefact with a history.

# SKILL: vacancy-intel

## Trigger
User provides a path to a vacancy file (inputs/vacancies/*.md)
or pastes vacancy text into the conversation.

## Inputs
- Vacancy file or text
- market-state/companies/*.md   (existing company profile, if any)
- market-state/people/*.md      (existing person profile, if any)

## Outputs
1. market-state/signals/<company>-<type>-<date>.md
   Fields: id, company, signal_type, strength, source, date, linked_person

2. market-state/intels/<company>-<role>.md
   Sections: company profile, role analysis, hidden agenda,
             entry point (consulting lens), entry point (hiring lens)

## Constraints
- Every sentence in the intel must trace back to a line in the source.
  No speculation beyond what the input contains.
- signal_type must be from the fixed vocabulary:
  hiring-surge | leadership-change | public-complaint |
  budget-signal | tool-search | leadership-gap
- Do not write outreach actions. That is action-planner's job.

## Quality criteria
- Intel file is self-contained: readable without the source vacancy.
- Signal strength is justified in the signal card body.
- Company profile section reusable for future signals.
Why frozen?  If behavior needs to change, the SKILL.md is edited and committed — not modified mid-conversation. Every run of the skill is governed by the same spec. You can reconstruct what the system was doing on any given date.

The handoff model

vacancy-intelmarket-analystaction-planner — three skills that together produce an outreach action. None of them call each other directly.

vacancy-intel runs — reads input, writes two files

Reads

inputs/vacancies/ve##ra-hoe.md

Writes

market-state/signals/ve##ra-leadership-gap.md

market-state/intels/ve##ra-hoe.md

Skill exits. Does not call market-analyst. Does not pass anything in memory. State is in the filesystem.

market-state/signals/ and market-state/intels/ now contain the new files
market-analyst runs separately — does not know vacancy-intel just ran

Reads (all of market-state/)

market-state/signals/*.md

market-state/intels/*.md

market-state/hypotheses/*.md

market-state/companies/*.md

Writes

market-state/hypotheses/ve##ra-delivery-pressure.md

It sees the new Ve##ra files because they exist in the filesystem — not because it was told. The Ve##ra signal is one input among many. Cross-reference with existing state determines confidence.

market-state/hypotheses/ now contains H-22 with confidence: high
action-planner runs — reads hypotheses, does not know how they were produced

Reads

market-state/hypotheses/ve##ra-delivery-pressure.md

products/ai-driven-head-of-engineering.md

cases/askona-digital-transformation.md

linkedin/profile-summary.md

Writes

market-state/actions/AI-28.md

who · channel · message draft · CTA · KPI · stop condition

What isolation buys you

Debuggability

If AI-28 contains a wrong angle, you trace back: was the hypothesis wrong? Was the intel wrong? Was the signal classification wrong?

Each artefact is independently readable. You don't replay the conversation — you read the file.

Replaceability

If linkedin-post-writer produces flat output, you swap the skill. The input it receives doesn't change. The expected output doesn't change.

Everything else in the pipeline continues to work. No cascade of changes.

Temporal reconstruction

Every file write is a git commit. If you want to know what the system believed about Ax##ra on February 15th — git show the hypothesis at that date.

The market-state at any past point is fully recoverable. Time is a built-in dimension.

The full skill map

Each arrow is a file. Each box is a skill with a SKILL.md.

Input layer
  vacancy file or inbound text
        ↓
Signals + Intelligence (one skill per entry point type)
  vacancy-intel    → market-state/signals/, market-state/intels/
  lead-intel       → market-state/signals/, market-state/intels/
        ↓
Synthesis
  market-analyst   → market-state/hypotheses/
        ↓
Actions
  action-planner   → market-state/actions/
        ↓
Content pipeline
  evidence-finder  → outputs/evidence/
  linkedin-post-writer, humanizer, expert-voice → [final text]
  chronographer    → outputs/linkedin/

Architecture decisions

Why not one large agent?

A single agent with full repo access navigates growing context on every invocation. Instructions from step one start conflicting with step five. Isolated skills with file interfaces keep each invocation small and deterministic.

Why SKILL.md, not system prompts in code?

System prompts in code change when code changes. They're not versioned independently. They're not readable without the codebase. SKILL.md is a first-class artefact. It's in the repo, it's auditable, it has a history.

Why human-in-the-loop at the action step?

Not a trust problem. An accountability model. Sending a message carries context the system doesn't have: relationship history, timing, parallel conversations. The system handles research, synthesis, and the draft. The human keeps the send button.

Other system traces

Want to talk systems?

I can build this for your business.

The same isolation model — SKILL.md contracts, file-based handoffs, git as a temporal layer — is an engineering pattern, not a marketing trick. It works wherever you need multi-step AI pipelines to stay debuggable under load.