vikstra · the manual · v0.1 early access

Work on ServiceNow without fighting the UI.

A chapter-by-chapter account of what vikstra does on a ServiceNow instance: how it signs in, what the editor checks before you save, how update sets are reviewed, and the rules every write follows.

  • no API account, no OAuth app
  • production read-only by default
  • chats and snapshots encrypted locally
  • macOS

Type a command, or paste what you have.

⌘ K

slash commands

  • /brBusiness rules on a table, in the order they run/br incident
  • /aclACLs for a table or field, with the chain that decides/acl change_request
  • /logsSystem logs in a bounded window, tailed while visible/logs
  • /diagSlow transactions, scheduled jobs, email, event and ECC queues/diag
  • /usUpdate sets: contents, collisions, review as a pull request/us
  • /impImpersonate a user in a side session; vikstra stays you/imp abel.tuter
  • /bgBackground script, checked against the logs afterwards/bg
  • /skippedSkipped records after an upgrade, sorted three ways/skipped
  • /sweepsAnti-patterns, dead code and near-duplicates from the local index/sweeps
  • /propsSystem properties, searched and compared across instances/props glide.ui
  • /dictDictionary entries and schema for a table/dict sc_req_item
  • /envRelease, patch, plugins and key properties for every instance/env

or paste what you have

  • 46d44a23a9fe19810012d100cca80666the record, whatever table it lives in
  • INC0010001the incident, by number
  • https://example.service-now.com/nav_to.do?uri=change_request.do?sys_id=…the same record, opened in vikstra
  • incident.short_descriptionthe dictionary entry for that field
  • active=true^priority=1a list, with the row count before it runs
  • sys_script_includethe table, as a list

Also /cs /ui /schema /onboard /new, plus commands you define yourself.

The command bar opened with the Cmd+K shortcut, listing its slash commands.The command bar opened with the Cmd+K shortcut, listing its slash commands.
the command barcmd+k · slash commands · local results
the manual · nine chapters

What it does, in the order you will meet it.

Sign in the way you already do.

Each instance opens in its own browser window: your SSO, your second factor, the normal login page. vikstra keeps that session and makes every call through it. There is no API account to request, no OAuth app to register, nothing to install on the instance.You can do what your user can do, and nothing more.

The session stays alive the way the platform UI keeps it alive, and lets go after four idle hours or as soon as the session ends. Each instance gets its own tabs, its own index and an environment tag, and a tab opened on one instance can never save to another.

specifics
session
kept separately for each instance
keepalive
the way the platform UI does it · stops after 4 h idle
remember me
stored in the OS keychain
env tags
dev · test · prod · other, shown in the rail and top bar
impersonate
a separate side session; ends with un-impersonate or logout
refused
web-service-only accounts, up front
The vikstra home screen: the connected instance, the work you left off, the update set your changes land in, and recent chats.The vikstra home screen: the connected instance, the work you left off, the update set your changes land in, and recent chats.
instances, each with its own sessioninstance · last work · update set · recent chats

The editor reads the live dictionary.

Business rules, script includes, client scripts, ACLs, scripted REST, transform maps, widgets, catalog items with their variables: 35 artifact types open in a Monaco editor. Completion comes from the instance’s live dictionary, so current. offers the fields that table really has, and your own Script Include methods show up next to the Glide API.

The validator runs on open and on save. It catches unknown tables and fields, Glide classes that do not exist, and GlideAjax mistakes, with quick fixes where a fix is safe. Before you save, the footer tells you what you are about to touch.

Example editor footer: 7 references · before-insert on 4.1M rows · 3 ACLs
specifics
artifact types
composite types own their child tables · catalog item → variables
completion
Glide API, tables, fields, current. / previous., dot-walks, instance Script Include methods
navigation
F12 definition · Shift+F12 usages, answered from the local code graph
quick fixes
lightbulb · fix all safe fixes · F8 next finding · 24 rules deliberately have none
history
every version with a real diff, revert behind a confirmation
compare
the same artifact across instances, matched by name
A script include on a dev instance, with its record fields on the right and the editor footer showing no findings.A script include on a dev instance, with its record fields on the right and the editor footer showing no findings.
a script include, open on devscript include · findings clean · 7 references

Records, and why they look that way.

Lists open in the instance’s own views, with columns sized to what they hold and reference cells that open the record they point at. Forms follow the form layout configured for the view. The All fields view shows every field of the table and its parents, the raw value beside the display value, the table it was declared on, and which fields the form leaves out.

The record’s own UI actions run through the platform. The record explorer answers the questions you would otherwise answer about any record: what runs on save and in which order, why a field is mandatory or read-only, which ACLs decide whether this user can do this.

Why did this record change? vikstra joins the audit trail to the business rules that write each field and ranks them likely or possible. With a model configured, plain-language list filters resolve display values and show the row count before anything runs.

specifics
on save
business rules, policies and scripts in execution order
access
the ACL chain in check order, and “can this user do this?” from Access Analyzer
field state
why mandatory, why read-only, which rule set it
export
Markdown · XML · JSON, plus translations and attachments
act as
impersonation pill “as <user>” in the context bar
Incident INC0000060 laid out as the instance lays out its Default view: the main section in two columns, then full-width fields, then Notes.Incident INC0000060 laid out as the instance lays out its Default view: the main section in two columns, then full-width fields, then Notes.
the form, as configureddefault view · two columns · notes
The All fields view of the same incident filtered to reference fields: name, label, target table, display value beside raw sys_id, and the table each field is declared on.The All fields view of the same incident filtered to reference fields: name, label, target table, display value beside raw sys_id, and the table each field is declared on.
all fieldsraw value · display value · declared on
An incident list in the instance's default view, with columns sized to their values, full choice labels and clickable reference cells.An incident list in the instance's default view, with columns sized to their values, full choice labels and clickable reference cells.
a list in its default viewview picker · references open · 77 shown
The active business rules on incident as a list, with the encoded query and quick filters above it.The active business rules on incident as a list, with the encoded query and quick filters above it.
business rules on incidentencoded query · quick filters · 40 shown
An incident open in the record explorer, listing the reasons behind each mandatory field and the save-time business rules in execution order.An incident open in the record explorer, listing the reasons behind each mandatory field and the save-time business rules in execution order.
what runs on savewhy mandatory · business rules on save · in order
The ACL chain for reading an incident, on the record itself: the candidate rules in the order the platform checks them, each with the roles or script that grant it.The ACL chain for reading an incident, on the record itself: the candidate rules in the order the platform checks them, each with the roles or script that grant it.
who can read this recordACLs in check order · what grants each
An incident list filtered from a plain-language sentence, showing the encoded query it became and the row count.An incident list filtered from a plain-language sentence, showing the encoded query it became and the row count.
a filter in plain words · uses a modelplain words · encoded query · row count

Background scripts that clean up after themselves.

Run scripts with saved snippets and parameters, keep a scratchpad, read parsed output. When/sys.scripts.do is not available to you (disabled, role missing, a scoped session), run the script as a temporary Fix Script or a run-once Scheduled Script Execution instead. In auto mode vikstra switches to a Fix Script by itself when a scoped session is refused, and a script that ran and failed is never run twice.

Then it deletes that record and its sys_update_xml capture row. If the app stops halfway, it finishes the cleanup the next time you are signed in to that instance. If anything is left, you are told what and where. Every save and every run is checked in the instance logs afterwards.

specifics
fallbacks
Fix Script (synchronous) · Scheduled Script Execution (scheduler context)
cleanup
record and capture row removed; after a crash, once you are signed in again
logs
bounded windows · tail polls only while visible · find in logs for any record
The system log, newest first, with each line linked to the script that wrote it.The system log, newest first, with each line linked to the script that wrote it.
the logs, after a runnewest first · linked to the writing script

Read an update set entry by entry.

Each entry in an update set opens with a real diff. The validator runs over every script in the payload, and a dependency check against the target instance runs before you promote. Collisions across open sets are flagged, and the capture audit finds what did not get captured: an ACL without its roles, a field without its table, a cross-scope reference.

After an upgrade, skipped records are sorted into three piles: only the out-of-box version changed, only you changed it, or both did. Mark them reviewed or revert to out-of-box.

specifics
review
per-entry diff · payload validation · target dependency check
housekeeping
move updates between sets · collision detection · XML export
skipped
OOB-only · customer-only · conflict
store apps
versions, release notes, install one app at a time
scope moves
global to scoped analysis and an ordered plan; nothing moves on its own
Review tab for a named update set: a business rule marked ok, and a Script Include marked warn with its script diffed line by line against the previous version.Review tab for a named update set: a business rule marked ok, and a Script Include marked warn with its script diffed line by line against the previous version.
one update set, reviewedok · warn · side-by-side diff · SN-STYLE-003

Every script, indexed on your machine.

vikstra keeps an encrypted index of every script body on each instance, with full-text search and a table of who references what. A where-used question becomes a local query that sends nothing to the instance.

On top of it: sweeps that rank anti-patterns by how far you exceed the out-of-box baseline, a security review of eight deterministic checks with evidence, an ACL matrix of users by operations, a dependency graph several hops deep with rename impact, and code rules you can write yourself.

12,901
artifacts searched for ArrayUtil
129
references found
1.4 s
wall time
0
live requests to the instance
specifics
index
SQLite per instance · FTS5 over script bodies · incremental by watermark
security
ACLs · client-callable classes · open REST · roleless processors and pages · secret-named properties · credential-shaped strings
acl matrix
read probed by impersonation; writes never probed by writing
on prod
full index builds refused during quiet hours
Sweeps: every script on the instance run through the validator, ranked by how far above the out-of-box rate each rule fires.Sweeps: every script on the instance run through the validator, ranked by how far above the out-of-box rate each rule fires.
sweepsevery script · validator rules · ranked above out-of-box rate
Security review results grouped into elevated roles, public endpoints and script findings, each rated by confidence.Security review results grouped into elevated roles, public endpoints and script findings, each rated by confidence.
security reviewelevated roles · public endpoints · script findings

Flows you can watch run.

A flow is drawn as a graph: trigger, steps, if and else side by side, loops with their next-item edge. Add a step on any edge, set data pills, publish with a backup. Run it and the path lights up as it executes. Compare two runs step by step to see the timing difference and the paths only one of them took.

For ATF, with a model configured, point vikstra at a business rule or script include and ask for tests. Each proposed case runs once. Only cases that pass and leave nothing behind are kept, and generated code cannot forge the verdict. Generation is refused on production.

specifics
flows
graph · edit · publish · replay a run · version diff · saved test cases
atf
tests, suites, results; runs through the platform’s own executor
needs a model
ATF test generation
not yet
custom Flow Designer actions
An on-call approval flow drawn as a graph, showing each branch and the steps inside it.An on-call approval flow drawn as a graph, showing each branch and the steps inside it.
a flow, drawn as a graphif · else-if · steps

AI, if you want it.

Everything above works without a model, except plain-language list filters and ATF test generation. Add one and it reads the live instance through about 70 read-only tools: records, schema, logs, flows, ACLs, and whether a rule would run for a given record. Answers cite their sources, and a sys_id that no tool returned is flagged.

Scripts it writes are checked against the live dictionary, then every table, field and property they name is looked up on the instance. They are marked verified only when both checks ran. Larger changes arrive as a plan; your approval is bound to the plan’s hash, so the plan you read is the plan that runs.

A personal-data filter sits in front of every request, hosted or local, and cannot be switched off. If the detector is unavailable, the request is blocked rather than sent.

User story mode writes one ServiceNow story. It reads the instance and the docs, asks you what it needs, and can picture a form or list as you see it, with fields or buttons that do not exist yet drawn in. It always runs on a local model, keeps its pictures encrypted with the chat, and writes nothing to the instance. The story exports as a PDF.

specifics
providers
Anthropic · OpenRouter · any OpenAI-compatible server · local Ollama
policy
per instance: allow hosted · local only · no AI
story
uses the instance’s own Story form when it has one · local model only
dry run
reads are real, writes are recorded and listed · on a PDI: 2 would-be writes, 0 rows landed
apply
per scope: switch, create set, write, read back, verify capture; stops on failure
trail
every AI run, step by step, in a tamper-evident hash chain
mcp
server on loopback, bound to one instance, same gate · also an MCP client
The task plan card: one step to add a system property, the update set it will be captured in, and a wait for approval.The task plan card: one step to add a system property, the update set it will be captured in, and a wait for approval.
a plan, before approvalone step · update set · waiting for approval
The personal-data filter test: a name, an email address and a phone number replaced with placeholders before a model sees them.The personal-data filter test: a name, an email address and a phone number replaced with placeholders before a model sees them.
the personal-data filtername · email · phone · placeholders

Nine rules the app does not break.

They hold for the editor, the agent, your own automations and anything connected over MCP.

  1. Every write goes through one gate.

    UI push, agent tool, scripting host, MCP. There is no second path to the instance.

  2. Production is read-only until you allow writes.

    Write access lasts for the session. Dry runs and ATF generation are refused on prod regardless.

  3. You confirm the exact change.

    The change you see is the change that is sent.

  4. Every write is read back.

    Success is reported only after the record has been read back from the instance.

  5. The previous state is snapshotted first.

    Into an encrypted undo store on your machine, before the write leaves.

  6. Every write is audited.

    An append-only log, long bodies truncated and hashed, with the write volume. If the audit fails, you hear about it.

  7. Stale edits are refused.

    A push compares sys_mod_count and asserts the scope before it writes.

  8. Arbitrary records cannot be deleted.

    One gated, snapshotted path exists for composite child rows. The agent, MCP and scripts cannot delete at all.

  9. Local data is encrypted.

    Chats, open tabs, jobs and snapshots under ~/.vikstra use AES-256-GCM, with the key in the OS keychain; the index is sealed on quit and screen lock. The audit log and flow backups are plain files, and so is the script copy in the default workspace mode. Secure-mode instances keep none.

questions

The technical questions.

How does vikstra make its calls?

Through your own signed-in session, the same one you would have in a browser. There is no integration account and nothing installed on the instance, so vikstra can do what your user can do and no more. Each instance is kept separate, and the session stays alive while you work.

What happens when background scripts are disabled for my role?

Run it as a temporary Fix Script or a run-once scheduled job instead; in auto mode vikstra switches to a Fix Script by itself when a scoped session is refused. vikstra then deletes the record and its sys_update_xml capture row. If the app stops first, it removes them the next time you are signed in to that instance, and anything it could not remove is reported.

What is stored on disk, and what leaves the machine?

Chats, open tabs, jobs, snapshot values and the AI trail are encrypted with AES-256-GCM. The key is held by the OS keychain; where the system offers none, such as Linux without a keyring, it falls back to a protected key file and tells you so. The index is decrypted while the app runs and sealed on quit and screen lock. Plain files: the audit log, flow backups taken before a save, and in the default standard workspace mode, a copy of the instance’s scripts. Secure-mode instances keep no plaintext workspace. Traffic goes to the instance, the AI provider you configure, an update feed if one is set, Hugging Face for the privacy model when no filter service is set up, and GitHub when you download the ServiceNow docs. There is no telemetry, crash reporting or analytics.

Which features need a model?

Chat and the agent, plain-language list filters, and ATF test generation. Everything else runs without one. Each instance can be set to allow hosted models, local only, or no AI.

What survives a crash or a restart?

Long actions are journaled and picked up at the next start: index builds resume, flow and ATF runs are followed again, temporary script records are removed. A plan that was being applied is never redone; you are offered a way to restore the update set and scope. A change plan still waiting for approval is lost.

How are updates delivered?

From a manifest signed with Ed25519, with every file hash-checked before install. Builds are not code-signed yet, so the first launch on macOS needs right-click and Open.

How do I get it, and what does it cost?

It is early: version 0.1, and builds are not public. Write to us, tell us what you work on, and we will talk about access and pricing directly.

early access · v0.1

Try it on your own instances.

We are working with a small group of ServiceNow developers and consultants. If that is you, write a line about your instances and what slows you down.

I'm interested

or write to Richard at