Start with what’s unique to you
The most common mistake is telling the agent things it already knows. Neo ships with built-in skills — diagnosis methodology, end-user communication, PSA and Microsoft 365 know-how — and sensible defaults. Your instructions sit on top of those and win wherever they conflict. So spend your words on what’s specific to your MSP: your processes, your decision rules, your guardrails, your tone. Don’t restate things Neo already does:
Everything you don’t have to write is room for the guidance that actually matters.
Custom instructions are per-agent and apply to every company that agent serves. To add rules for one specific client — their escalation contact, their preferred tone, their custom-field conventions — use Memory instead. Both are “your instructions” and both override skills.
Say what to do and where the limits are — usually not how
This is the most important default to get right — it’s where most instructions go astray. Your agent already has its tools, and it picks the right one at runtime from each tool’s description. As a default — especially when you’re starting out — describe the outcome and the guardrails, and leave the mechanics to the agent. Reaching for specific tools, API endpoints, HTTP methods, PowerShell cmdlets, or raw system field names tends to make instructions more brittle, can box the agent in, and is easy to get subtly wrong. Saying what you want is usually shorter and survives product changes, PSA differences, and new tools.Don’t ask an end-user chat agent to log the conversation onto the ticket. Once a chat is linked to a ticket, Neo records every message from both sides on it automatically — the user’s as customer replies, the agent’s as internal notes — turn by turn, with retries, and each message goes to the ticket it is actually about rather than whichever one the chat last touched. When that check can’t run — your PSA won’t return the ticket it compares against, or the check itself errors — the message is recorded on the ticket the chat was already on (see What the ticket records). An instruction like “log the full conversation” or “add all replies as a note” only confuses the agent — no tool posts a note whose text you dictate, so it either does nothing or files a ticket it shouldn’t. What is the agent’s decision — and worth an instruction — is when a ticket is needed, when to escalate, and when to mark it resolved.Watch for an instruction that answers both questions in one line, such as “wait until the conversation is finished, then add it all as a note”. The timing half is a real policy worth keeping; the logging half is the part to drop. Choose when the bot opens a ticket has the three shapes to paste in its place.
A structure that works
Most strong agents follow the same simple skeleton. You don’t need every section, but this order reads well to the model:1
Goal — one line
Open with what this agent accomplishes. Many of the best instructions literally start with
Goal:.2
Role — who it is
Especially for chat agents: “You are a friendly first-line IT support assistant for end users.” This frames everything that follows.
3
Steps or decision rules
The ordered work, as bullets. Keep them short. For branching logic, state the condition, then the action.
4
Guardrails — what never to do
The hard limits. Be at least as explicit here as in the steps.
5
Escalation — when to hand off
The conditions that send a ticket to a human, and what to leave behind for them.
6
Output — what to leave behind
What the agent should record: an internal note, a status change, a customer message.
Format your instructions
The instructions editor renders formatting as you type, like a document editor — headings look like headings, lists like lists — and structure helps the model follow long instructions. Use the toolbar (headings, bold, lists, quotes, links, code blocks, tables) or type Markdown directly:## starts a heading, - starts a list, **bold** bolds, and ⌘B/Ctrl+B and ⌘I/Ctrl+I work as you’d expect.
- Pasting from Word, Google Docs, a web page, or a Markdown file keeps your bold text, headings, lists, and tables — nothing is flattened to plain text.
- To indent a list item, press Tab — Shift+Tab moves it back out. Typing
-or1.at the start of an item indents it too, so you can type a nested list straight through. The first item of a list has nothing to sit under, so it can’t be indented. - Use headings to separate sections (steps, guardrails, escalation) and lists for rules. Bold the words that carry the rule: “Never reset without verifying identity.”
- A line of
=,-,*or_characters stays exactly as you type it — length and character included. Frame a section header with one if you want the agent’s output to carry it. - Prefer to write the Markdown yourself? Switch the box to Markdown with the control in its top-right corner and edit the raw text. It is the same text the agent reads, and it saves exactly as you type it — switch back to Editor to see it rendered.
- The left margin numbers your instructions: the Markdown view numbers every line, and the Editor view marks the line a heading, paragraph, list item or table starts on. Every number is a line of the saved text, so “change line 14” means the same line in either view and in the Neo Support chat. A block the Editor view cannot match to the saved text — a paragraph written with
_italic_, which the editor writes back as*italic*, for example — carries no mark from there down, and the Markdown view still numbers it. - Under the hood the instructions are stored as Markdown — the same text the agent reads — so anything you already saved keeps working unchanged.
Write decision rules, not vibes
“Handle urgent tickets quickly” tells the agent nothing it can act on. Give it the actual rule — a threshold, a list, a condition. Specific instructions produce consistent agents. A security-triage agent, for example, classifies every alert with explicit bands instead of “use your judgment”:Guardrails and escalation
State the limits as clearly as the work — the best instructions often write the “never” list more emphatically than the “do” list. Cover:- Hard prohibitions — “Never make tenant-wide, network-wide, or security-impacting changes.” “Don’t provide account or password support for the client’s line-of-business app (e.g. their accounting or HR system) — only help with installation and updates.”
- Security basics for anything customer-facing — never ask a user to type a password, MFA code, or PIN into the chat; reframe (“can you sign in?”, not “what’s your password?”). Don’t perform account or permission changes yourself — log a ticket and let a technician handle them through a secure channel.
- When to escalate — the conditions that send a ticket to a human, named concretely: the issue persists after basic checks, it needs configuration access, or it involves safeguarding or sensitive data.
- What to leave for the human — an internal note with what was checked, what’s still needed, and the suspected cause, so the technician has full context.
Wording a hold-until rule
A common guardrail holds everything back until some condition is met — an approver has signed off, or the ticket has reached a given status. Word it by what it blocks, because that is what the agent can check. The agent sees each of its tools labelled writes to client systems — it can change a PSA record, an identity or RMM object, a mailbox, or send a message to a person — or read-only, which changes none of that, or reads or writes, depending on your request for the tools that do both, where the agent classifies each call instead of the tool. So a rule phrased in those terms needs no interpretation:Tone and customer-facing language
For chat agents and any agent that messages end users, write for the reader — the end user, not your technicians — and control two things separately:- Voice — how it sounds: “Friendly, warm, plain language, no jargon. Brief over verbose.”
- What it may and may not claim — the part teams forget. Tell the agent not to imply work it didn’t do, not to commit to specific dates or ETAs, and not to expose internal process:
Keep it concise
Aim for the shortest instructions that fully capture your intent. Prefer a tight set of bullets over a long numbered playbook, and cut anything that restates a Neo default or pads the page. Most agents need about a page — a few thousand characters is a good ceiling for everyday agents. Long, sophisticated agents do exist — a senior-technician agent handling a whole queue might run to several pages of decision tables. That’s fine when every line earns its place. Length should come from real complexity, not from boilerplate.Advanced patterns
Once the basics are solid, these are the techniques Neo’s most advanced customers rely on. Reach for them when an agent’s logic is genuinely complex.Decision tables for multi-factor logic
Decision tables for multi-factor logic
When an outcome depends on two or more variables — queue × priority, business hours × severity — a small table is clearer to the model (and to you) than nested prose. List the conditions and the action for each row.
Name the model's failure modes and rule them out
Name the model's failure modes and rule them out
LLMs can talk themselves into almost anything. If your agent keeps rationalizing the wrong call, legislate against it in plain language. Power users write lines like: “The bar is ‘can the agent finish this end-to-end with no human needed’ — not ‘does this seem reasonable.’ If a technician has to do anything later, escalate instead.” Naming the failure mode is often more effective than adding another rule.
Disambiguate rules that interact
Disambiguate rules that interact
When two rules could collide, say which wins — explicitly. “The quiet-hours rule suppresses customer messages, but it does NOT stop escalation: if the ticket needs a human, hand it off regardless.” One sentence here prevents a whole class of wrong decisions.
State the why, not just the rule
State the why, not just the rule
A short rationale helps the agent generalize to cases you didn’t list. “Escalating a ticket that turns out simple costs little; failing to escalate one that needed a human costs a lot — so when in doubt, escalate.”
Re-run safety for agents that fire repeatedly
Re-run safety for agents that fire repeatedly
An agent that can trigger on its own notes can loop. Sophisticated setups stamp each note with a marker and tell the agent to check for a recent one before acting again — “if you’ve already processed this ticket in the last few minutes and nothing new has happened, do nothing.” If you build multi-step or multi-agent automations, design for repeat runs.
One persona across a fleet
One persona across a fleet
Running several agents on the same accounts? Give them a shared persona name so every note, time entry, and customer message reads as one consistent technician rather than a committee.
Send a notification only in some cases
Send a notification only in some cases
Notification instructions can be conditional. Tell the agent when to stay silent and it sends nothing at all — no blank message, no empty email:“Post only for P1 and P2 tickets. If the priority is P3 or lower, do not post any message.”Write the silent case explicitly, as its own rule. “Only generate a message if…” works equally well.
Let Neo draft them for you
You don’t have to start from a blank box. In the agent editor, Adjust with Neo sits inside the instructions box while it still holds the short starter line (“Goal: Resolve the ticket” or “Help the user”), saved or not, and next to the Custom Instructions title otherwise. An end-user chat agent starts with a full policy in the box, so its button is next to the title from the start. One click opens the Neo Support chat, which reads what the agent already holds and opens on options you can click. What it offers depends on where you are:- A new agent you have not written anything into — a short intake opens first, in the dashboard rather than the chat, so there is nothing to wait for. It asks what kind of work the agent takes on, shows you the templates in that category in case one already does the job, takes one line about what you want, and asks what starts it. The trigger you pick is written into the builder straight away. Neo then opens with your answers already in hand and asks only what they leave open.
- A new agent you have already started — Neo reads your draft, names the kind of agent you are building, and offers what to do next for that kind of work. If the draft already reads like working instructions, a review is one of the options.
- A saved agent — Neo offers Review my agent and Update my agent. A review reports what is unclear, contradictory, already handled by Neo, or missing a tool, and changes nothing. An update is a change you confirm before it is applied.
- Nothing set up beyond the instructions and the tools you picked — Neo can create the agent for you, disabled, so nothing runs until you review it and switch it on. If you accept, the agent exists: leave the builder without saving, or you will end up with a second copy.
- You have already set a schedule, filters, integration permissions, or settings on a tool — Neo offers the button and nothing more. Those settings live only in the builder, and an agent created from the chat would not have them.
The button waits for a saved agent to have no unsaved edits, because Neo works from what is stored. Save, then click it. On the Neo Support Agent itself only the review is offered — Neo owns that agent, so its instructions can’t be changed from here.
Test, then iterate
Instructions are never one-and-done. The fastest way to improve them is to watch real runs:1
Start in test mode
Turn test mode on so the agent describes what it would do instead of doing it. Read those decisions against what you’d want.
2
Watch real executions
Review the agent’s runs in Executions — where did it hesitate, over-reach, or misread a ticket? Each miss points at a missing rule or an ambiguous line.
3
Refine one thing at a time
Add the rule that would have prevented the miss, then re-test. Small, specific edits beat rewrites. Neo can also learn from your feedback and suggest instruction refinements automatically.
Agents
What agents are and how they work end-to-end
Memory
Durable per-client and MSP-wide facts that layer on top of your agent instructions
Skills
The built-in expertise your instructions sit on top of
Technician-in-the-Loop
Require human approval before sensitive actions
