ConceptsHow agents use it
Concepts

How agents use Stele

You don't change how you work. Your agent does the using. Each turn it pulls what bears on your prompt, and files what's worth keeping when the work is done. Here's the full loop, and the algorithm that decides what to surface.

1you promptask, or describe it2context indecisions & risks3agent actsclaims a task, works4it capturesdecisions, follow-upsthe record is richer for the next prompt
The loop, each turn Every prompt pulls relevant context in; every closed task pushes new knowledge back. The record compounds as you work.

Context, before every answer

When you submit a prompt, a hook runs before the agent sees it. It reads your prompt, finds the nodes in the graph that bear on it, and injects them: the relevant decisions and lessons, plus a separate risks callout for anything that could go wrong. If you name an id like TASK-12 directly, it's resolved and pulled in whole.

This is automatic and quiet. It won't re-inject the same node twice in a session, it stays out of the way on short prompts, and you can tune how aggressively it pulls , or pause it for a few turns , when you want a clean slate.

Learning about a topic, on demand

When the agent needs to go deeper than the auto-injected context, it dispatches a read-only search subagent. That subagent interrogates the graph in its own context. It can read and search, but never write , and returns a short, cited briefing. The heavy searching stays off your main thread, so the agent gets the answer without filling its window with raw results.

Why a separate agent

Keeping retrieval in a sub-agent is what lets Stele stay thorough without bloating the conversation. The main agent asks a question and gets back a short paragraph with the ids to follow. The raw search hits stay behind in the sub-agent's context.

Tracking the work

When the agent starts something real, it creates a task and claims it atomically , so if you've got more than one agent running, no two grab the same work. The task is the unit of continuity: anyone, human or agent, can see what's in flight and pick it up later.

Nudges that keep the record honest

Stele prompts the agent at the moments that matter, without ever blocking it:

  • Before the first code change of a session, a one-time nudge to search the record first , so the agent doesn't re-decide something already settled or regress a fix already made.
  • When a task closes, a reminder to update the decisions it touched, write down anything learned, and link it up , so the knowledge lands while it's fresh.

Risks at the moment you change the code

Context injection works off your prompt: what you say you're doing. But the riskiest moment is often a change you didn't think to mention. So Stele also watches the boundary where work actually lands, and matches what you're doing against the record right there.

you edit a filethe agent touches codeAN ANCHOR NAMES ITKNOW-5a race it warns abouta command failsa real error surfacesA LESSON STANDS OUTKNOW-8already written upyou commit a changethe diff is readCLOSE TO A KNOWN RISKKNOW-3a fix not to undo
Recall at the action boundary Three moments, three matches: an edit hits a file a node is anchored to, a failed command echoes a lesson, a commit looks like a known risk. When one stands out, it surfaces right then.
  • You edit a file. If a risk, lesson, or decision is anchored to that exact file, it surfaces: "a note the team wrote names the file you're editing." A literal match, so it's precise: no guessing, no noise.
  • A command fails. On a genuine failure, Stele reads the error and surfaces a lesson only when one stands out unusually strongly for this project. The team already wrote up this failure; here it is, before you debug it again.
  • You commit a change. The committed diff is matched against the record, and a risk is raised when the change looks close to one: a fix you might be undoing, surfaced before you push. And if you commit while still holding an open task, a gentle reminder to close it out if the work is done , so finished work doesn't linger claimed into your next session.

All three are soft: a one-time line to the agent, never a block, surfaced once per session and only when the match is strong. The aim is silence by default. A nudge has to earn its place before it interrupts you.

Anchors are what light this up

The file match is only as good as the anchors on your nodes. When the agent writes a risk or lesson about specific code, it records the files and symbols it concerns , and that's what lets the note find its way back to you the next time someone opens that file.

Closing the loop

When the work is done, the agent completes the task with a note of what shipped, records the decisions and lessons worth keeping, links them to the code and tasks they belong to, and opens follow-up tasks for anything left. None of that is busywork you do afterward. It is part of finishing. The next prompt, the next session, the next agent all start from a richer record than the last.

This is the memory loop

This page describes the read-and-write cycle every Stele-enabled agent uses. For the autonomous implementation loop that selects work, dispatches it, verifies it, and retries against a concrete check, see Loop engineering with Stele Operator.

Under the hood: the graph walk

The part that decides what to surface is a graph walk over the record. It's worth understanding, because it's where relevance comes from: a node can match your words and still bear on nothing.

your promptfull-text + semanticsupersedesdecisioncaused-bylessonblocksriskskippednoteseed
Seed, then walk The prompt picks seed nodes; the walk follows the meaningful edges out, weighting each by what it is and how it connects. Noisy edges are skipped; risks are pulled aside.
  1. Seed. Your prompt finds starting nodes two ways at once: full-text search and semantic (embedding) search , and any ids you named explicitly are added in whole.
  2. Walk the deliberate edges. From each seed, the walk follows only the edges that carry meaning: blocks, supersedes, caused-by, contradicts, fulfills , and skips the noisy ones (a passing mention, a loose "relates-to") so the context stays tight.
  3. Score every node it reaches on several axes at once (below).
  4. Surface risks separately. Risk nodes within a hop or two are lifted out into their own callout, so a warning never gets buried under general context.
  5. No arbitrary cutoff. There's no fixed "top 5". The walk returns what's strongly relevant within a token budget, and shows every node with the edge that pulled it in, so the agent sees what is relevant and why.

The score that ranks each node combines:

SignalWhat it favors
Kind of knowledgeDecisions and architecture weigh most; goals, risks, lessons next; passing notes least.
Edge strengthA blocks or supersedes link counts for more than a loose association.
Distance from the seedEach hop away costs a little, so closer is more relevant.
RecencyRecently updated nodes edge out stale ones, on a gentle decay.
Semantic matchNodes the embedding search found get a boost above a similarity floor.
Whether it's still openOpen and in-progress work ranks highest; finished or dropped tasks still surface, but rank lowest , and the longer ago one closed, the lower it sinks.

Finished and dropped tasks used to be left off this list entirely, on the thinking that closed work is exhaust. But a task's completion note is often the only place anyone wrote down how something actually works, and you're most likely to ask about it in the hours right after it closes. So a task's status now changes how it ranks and how it's labeled, and never whether the walk can find it. A closed task comes back clearly marked: COMPLETED, or CANCELLED — decided not to do for work you deliberately dropped, so your agent reads it as history instead of mistaking it for something still open , or, worse, going and building the thing you already decided against. It still ranks well below live work, and a task closed months ago ranks lower than one closed this morning.

Retrieval also respects workspaces: a walk sees the shared trunk plus whatever overlays you have active, and nothing from branches you're not on.

We measure this

Whether the walk surfaces the right context isn't left to taste. We run continuous evaluations that test whether the context Stele injects actually improves an agent's decisions, and tune the ranking from what they show. The goal is a record that earns its place in the prompt.

The one way to make something invisible

Status changes how a node ranks, never whether it exists to the walk, with exactly one exception, and it's the one you control directly. Mark a node hidden from its page in the dashboard and it drops out of search, recall, every list, and the duplicate finder: the surfaces that summarize or rank across your whole project. It isn't deleted: the node still exists, still reachable if you already have its id, and clearly marked so nobody mistakes it for something live.

It's for the handful of things you'd rather the record stopped volunteering: a note that was only ever true for a moment and has expired, something pasted in by mistake, a genuine error you don't want surfacing by default.

A visibility switch, not a lock

Treat hidden as changing what the record volunteers, not as a security boundary. If a credential or secret already made it into the record, hiding it stops it being served up , but it does not erase it: the text stays in the node's version history, where a project member can still read it. Editing the node doesn't help either, because the version before your edit is kept too. So if something sensitive lands in the record, rotate it. That is the only step that actually ends the exposure.