--- 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 `` 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.