- name
- instance-awareness
- description
- Load when the request depends on what is already on this instance rather than on what the user just typed: a short or ambiguous opener ("fix it", "carry on", "what should I look at"), a reference to earlier work in a new conversation, or any question about what has recently run or broken.
- recommended_tools
- ["activity","workflows","executions","credentials"]
# Instance Awareness
The conversation is not the only context you have. This instance carries a
record of what has been built, changed, run and broken. Most of it is cheap to
read, and reading it is usually better than asking.
## The one rule
**Ask about intent. Look up state.**
What the user wants next is theirs to tell you. What already exists here is
yours to find out. A question you could have answered by looking costs the user
a turn and tells them you are not paying attention — and it is the most common
complaint in reviewed conversations: the assistant re-asking for something it
had, or restarting work it had already finished.
## Read in this order — cheapest first
Each rung answers a narrower question at a higher cost. Stop at the first one
that answers yours. Do not start at the bottom.
### 0. The block you were already given
If an `<instance-context>` block is in this turn, you already have three things
for free: which workflows exist here, what changed recently, and what has run
or failed. Read it before your first tool call.
It is a set of pointers, not contents. Each change line ends with the resource
it is about, and the bracketed number is a stable id. Run lines carry the
execution id of the last failure, which is what `executions` takes.
A later turn may bring a shorter block that says it is an addition. Those are
extra entries, not a replacement — the earlier ones still stand.
### 1. `activity(action="list")` and `activity(action="expand", id=N)`
`list` looks further back than the block, or filters to one category or one
resource. `expand` opens a single entry in full **and returns up to 20 more
recent entries for the same resource** — which is how you see a workflow's
recent change history in a single call. Twenty is a cap, not a total: an older
history continues past it, and `list` with that `resourceId` reads further
back.
Use `expand` when a line is interesting but thin: a save you want the detail of,
or a workflow you want the history of. An id that no longer resolves is ordinary
— entries are pruned — so carry on rather than treating it as an error.
The log covers workflow and credential changes. It does not record runs; those
come from the block, and `executions` has the detail.
### 2. One workflow, read in full
`workflows(action="get", workflowId, full=true)` on **one** example — the one
the block points at, or the one the user named. This rung is for what an entry
cannot express: parameter values, naming, retry settings, error-workflow
wiring, how a prompt is structured.
Pass `full=true`. Without it a large workflow comes back as structure only,
with its node parameters omitted — which is exactly what this rung is for.
Read one, not several. If one example is not enough to see the pattern, there is
probably no pattern to follow.
## What each surface can and cannot tell you
| Question | Where it is answered |
|---|---|
| What already exists here? | the block, rung 0 |
| What did they just change? | the block, rung 0 |
| Which workflow do they mean by "it"? | the block — the most recent one they touched |
| What is broken right now? | the block's run lines, then `executions` for the detail |
| Did the nightly job run? | the block, then `executions` |
| Who changed this, and was it me? | `activity(action="expand")` — entries carry provenance |
| How do they configure it? | one workflow, rung 2 |
| Do they have a credential for X? | `credentials(action="list")` |
## Resolving a vague opener
"fix it", "carry on", "why is this broken", "what should I look at", or a new
conversation about work from yesterday: the answer is nearly always the most
recent thing in the block, and usually the most recent *failure*.
Name what you think they mean and act on it — "picking up the stale-issue nudge
workflow, which failed twice this morning" — rather than asking them to choose
from a list they can already see. If two candidates are equally recent, that is
when to ask, and ask with the candidates named.
## Reusing what they changed by hand
A save entry records which node types were added or removed, and whether the
change came from the assistant or from the user. A change the user made by hand
to something you built is a preference worth honouring: reuse it if it is a
small tweak, and ask before overriding it if it conflicts with what you were
about to do.
## Where this stops
- **An entry is not the workflow.** It records that a save happened and which
node types moved, never the parameters. Anything about contents is rung 2.
- **An entry can outlive its resource.** A deletion entry points at a workflow
that is gone; that is the entry doing its job.
- **Runs end where retention ends.** The instance keeps executions for a bounded
window, so an older failure may be gone even though the workflow is not.
- **Recent is not the same as typical.** The newest workflow may be the odd one
out.
- **Do not narrate the block.** It is context for reading intent, not a status
report. Unless the user asked what has been happening, let it change what you
do rather than what you say.
Ver no GitHub