Skip to main content

Documentation Index

Fetch the complete documentation index at: https://docs.neoagent.io/llms.txt

Use this file to discover all available pages before exploring further.

A single index of the settings most often asked about in support. Each entry lists the field name, where it lives in the workflow/agent JSON, the default, and a one-line description. If a question starts with “how do I…” or “what does X do?”, the answer probably starts here.

Triggering

FieldWhereDefaultWhat it does
trigger_typeworkflowrequiredSCHEDULED (runs on a clock), TRIGGERED (runs when a PSA event matches), or NONE (chat agent — user-initiated).
entity_typeworkflowticketWhat this workflow processes: ticket, project_ticket, task, scheduled_entry, time_entry.
callback_settings.target_changesworkflow (TRIGGERED only)requiredList of PSA events that fire this workflow — combination of change_type (e.g. TICKET_CREATED, FIELD_UPDATED) + optional target_field + target_value/source_value.
callback_settings.run_only_once_per_entityworkflow (TRIGGERED only)falseIf true, the workflow runs on each ticket at most once, ever. Used when you want a workflow to fire on creation but never again.
process_sub_entities_only_onceworkflowfalseFor sub-entities (time entries, notes, scheduled entries on a ticket): if true, Neo processes each sub-entity at most once. Without it, the same time entry can be re-processed every time its parent ticket changes.
process_entities_sequentiallyworkflowfalseIf true, the workflow processes matched tickets one-by-one instead of in parallel. Slower but predictable when later steps depend on earlier ones. Incompatible with REQUEST_TECHNICIAN_APPROVAL.
execution_orderworkflowrequiredInteger position in the per-client ordering. Lower runs first when multiple workflows match the same event.
ignore_execution_orderworkflowtrueIf true, this workflow ignores ordering and runs in parallel with other matching workflows. Set false only when ordering is load-bearing.

Scheduling (SCHEDULED workflows)

schedule object on the workflow.
FieldDefaultWhat it does
schedule.time_periodnullRecurrence interval, e.g. { "interval": 1, "unit": "HOUR" } for hourly, { "interval": 1, "unit": "DAY" } for daily.
schedule.start_datetimes[]Specific clock times when the workflow runs (e.g. 08:00 and 15:00 for twice-daily).
schedule.daily_execution_windowsnullPer-weekday allowed run windows. Use this when a workflow should only run during business hours (e.g. Mon-Fri 08:30-17:30). Preferred over the deprecated allowed_execution_hours + should_skip_weekends.
schedule.timezoneUTCIANA timezone for the schedule (e.g. America/New_York, Europe/London). All other schedule times are interpreted in this timezone.
schedule.allowed_execution_hoursnullDeprecated — replaced by daily_execution_windows. Single start/end window applied every day.
schedule.should_skip_weekendsfalseDeprecated — set daily_execution_windows with weekday entries only instead.
Common gotcha — business-hours triggering: schedule.daily_execution_windows only constrains when the workflow itself runs. For TRIGGERED workflows (event-driven, not scheduled), the trigger fires whenever the PSA event matches — there is no “only trigger during business hours” knob today. If you need that, gate it with a filter on the ticket’s received_at or a deterministic business-hours filter.

Filters

Filters live inside the first action (FIND_ENTITIES.input.filter_conditions).
FieldWhereWhat it does
field_namea single filter conditionPSA field to match on — board, status, priority, type, sub-type, item, queue, company, owner, or any custom field (use the PSA’s exact custom-field name).
operatora single filter conditionEQUALS, NOT_EQUALS, IN, NOT_IN, IS_NULL, IS_NOT_NULL, CONTAINS, etc.
value / valuesa single filter conditionSingle value or list, depending on operator.
logical_operatorbetween conditionsAND (default) or OR for combining multiple conditions. Custom-field filters and standard fields can be mixed freely.
AI filter (ai_filter_prompt)filter conditionsNatural-language predicate — Neo evaluates the ticket against your description (e.g. “ticket is about a printer issue”). Slower and consumes credits per evaluation; use deterministic filters first and AI filters only for fuzzy matches.
Common gotcha — NULL handling in ConnectWise filters: ConnectWise’s API uses SQL three-valued logic. A filter like Owner != "Alice" AND Owner != "Bob" silently drops tickets where Owner IS NULL, because NULL != "Alice" evaluates to NULL (not TRUE). To include unassigned tickets, use Owner IS NULL OR (Owner NOT IN ["Alice", "Bob"]) instead.

Test mode & re-running

FieldWhereDefaultWhat it does
agent_settings.test_modeagentic / conversational workflowsfalseIf true, the agent will not call tools with side effects (no PSA writes, no emails, no SMS). It adds an internal ticket note instead, describing what it would have done.
agent_settings.report_test_viaagentic / conversational workflowsInternal Ticket NoteWhere the agent posts its dry-run report when test_mode=true: Internal Ticket Note, Email to Internal Team, Teams Message to Internal Team, or Dashboard Message.
agent_settings.sandbox_enabledagentic / conversational workflowstrueIf true, the agent can write+run Python in a sandbox for bulk operations. Counts toward credits (SANDBOX_BASH is ADVANCED tier).
emulate_main_ticket_as_newly_createdre-run dialogfalseWhen re-running, pretend the ticket was just created (so triage logic that gates on “newly created” runs again).
ignore_previous_neo_executionsre-run dialogfalseSame as “Start fresh” in the UI — the agent doesn’t see prior Neo executions on this ticket. Without it (“Continue previous”), the agent picks up where it left off.

Technician-in-the-Loop (TIL)

FieldWhereDefaultWhat it does
agent_settings.til_channelagentic / conversational workflowsTeamsWhere TIL approval requests go: Teams (adaptive card sent to configured technicians) or Chat (approval card inline in the chat session — default for CONVERSATIONAL agents).

Custom instructions

FieldWhereWhat it does
agent_settings.custom_instructionsagentic / conversational workflowsFree-text instructions that the agent loads as a system prompt. Use to encode MSP-specific naming, escalation paths, tone, prohibitions.
Action-level instructionsCHAINED_ACTIONS Action.instructionsPer-step instructions for an individual action (e.g. dispatch agent specifics). Layered on top of custom_instructions.
Skill filessrc/agents_v2/skills/prompts/Built-in skills the agent loads on demand (resolve-issue, end-user-communication, etc.).
Skill loader settingsagent_settingsWhich built-in skills are enabled.

Notify-action delays

Notify actions support a configurable random delay so messages don’t all leave at the same second.
FieldDefaultWhat it does
include_random_delayfalseIf true, the notify action waits a random number of minutes before sending.
min_range_delay_in_minutesnullLower bound (in minutes) of the random delay.
max_range_delay_in_minutesnullUpper bound (in minutes) of the random delay.
If include_random_delay=true but min and max are both 0/null, the delay is skipped (not an error).

Sub-entity callbacks

FieldWhereDefaultWhat it does
sleep_before_callback_processing_secondsclient (not per-workflow)4Seconds Neo waits after receiving a PSA callback before kicking off the matched workflows. Gives the PSA time to settle (audit rows visible, related records consistent). Tune per-client only if your PSA needs longer.
process_sub_entities_only_onceworkflowfalseSee Triggering above.

Inbox notifications

FieldWhereWhat it does
InboxException(send_email=…)source codeWhen True, dispatches an email + inbox card to the MSP admin (used for required action like missing settings, auth failures). When False, only an inbox card. Default is False — emails are reserved for MSP admin must act.
Dedup keyderivedclient_id + message_id. If the same InboxMessageId can occur for distinct subjects (per end-client, per mailbox), use compose_inbox_message_id(...) to scope per-subject and avoid collapsing distinct failures into one message.

Credits

ConceptDetail
CHAINED_ACTIONS workflowsEach action sets its own credits_consumed (typically 1 per ticket). Sum = total per run.
AGENTIC entity-triggeredBilled at the max credit tier across the resolved toolbox (raw + auto-injected). Tiers: BASIC=1, STANDARD=2, ADVANCED=3.
AGENTIC conversational (no entities)Billed as the sum of tier × call_count across each tool actually invoked.
Auto-injected toolsMS_GRAPH_REQUEST (when MS Graph perms non-disabled), CW_PSA_REQUEST (when CW PSA enabled), SANDBOX_BASH (when sandbox_enabled=true), and integration *_REQUEST tools all count toward credits — even though they don’t appear in the dashboard toolbox.
Generic API tool tierSTANDARD when all enabled perms are READ_ONLY; ADVANCED when any perm is READ_WRITE. PowerShell tools stay ADVANCED regardless.

Versioning & sharing

FieldWhereWhat it does
created_by_userworkflowWho owns the workflow. Required to view/edit unless the workflow is shared (or unless you are a super-admin).
version_timestampworkflowOptimistic-lock version. PUT requests must include the version they’re editing against; mismatches return 409 Conflict.
stateworkflowENABLED, DISABLED, or DELETED. Disabled workflows don’t run; deleted are tombstoned.
group_name, group_orderworkflowPurely organizational folder + position within the folder. Doesn’t affect execution.

See also