SyncroNow AI FIELD MANUAL
v0.9.4 · pre-release Source
ServiceNow source control & build pipeline

Your ServiceNow
code, in Git.

SyncroNow AI pulls your scoped-app source out of the instance as plain, editable files — real diffs, branches and pull requests. Every save is built through modern tooling and pushed straight back to the record.

FIG.01 — THE SYNC LOOP ● tracked
SN instance local git SN record refresh ↓ plain files build + push ↑ ts→js output commit · branch · PR
24
CLI commands
6
build plugins
61
MCP tools
≥22
Node.js
§01

The asymmetric model

Studio source control locks your code inside the instance. SyncroNow inverts that: the source you write lives in Git, and its build output is what lands in ServiceNow. The code you author is never the code that runs.

YOU WRITEscript.ts
+ class Example {+   sayHello() {+     gs.info("Hi, SyncroNow!");+   }+ }
SERVICENOW RUNSscript include
"use strict";
var Example = (function () {
  function Example() {}
  _createClass(Example, [{
    key: "sayHello", value: …
  }]);
  return Example;
})();
typescript → babel → prettier · one save, built & pushed in ~140ms
Real version control
Code downloads as plain files — diffs, history, branches and pull requests over what would otherwise live only inside the instance.
Asymmetric builds
Write modern TypeScript; SyncroNow builds it through Babel/Webpack and pushes the output to the record.
Save → build → push
Dev mode watches tracked files. Each save runs your rule pipeline and lands the result in the matching record automatically.
Multi-instance & MCP
Encrypted credential profiles for dev→prod, plus a built-in MCP server so an AI assistant can drive the workflow.
NOTE

SyncroNow AI is the next-generation successor to Sincronia. Architecture, records, dictionary and other metadata stay managed in ServiceNow the normal way; once code is in your project it becomes the source of truth — you edit it locally, not in the instance. That shift is what gives you real diffs, code review and CI over code that would otherwise only exist inside ServiceNow.

§02

Why teams pick it

For teams deciding how to manage ServiceNow scoped-app code. SyncroNow AI is pre-1.0 and early — these are the honest trade-offs.

  SyncroNow AI Studio + native Git Sincronia Update sets
Edit in your own editorpartial
Git diff / PR review of code
Local build pipeline (TS / Babel / Webpack / Sass)
Multi-scope CLI from one repopartial
AI / MCP analysis
Works without a companion appn/an/a
TL;DR

ServiceNow's native Git moved your code into Git. SyncroNow AI moves your workflow into modern engineering — local build pipelines, a multi-scope CLI, and an AI layer that understands your scope.

Honest gaps today: versus first-party tooling it still lacks SSO in the MCP server, a support SLA, and a packaged distribution (Homebrew / Windows installer). These are the active priorities — see the roadmap.

§03

Quick start

You need Node.js 22+ and a ServiceNow instance you can reach — a free PDI works great. WSL is required on Windows.

1
Install the CLI from npm
npm i -g syncrona
# or as a project dev dependency:
npm i -D syncrona
2
Log in and initialize your project
syncrona login
syncrona init
3
Start dev mode — every save builds & pushes
npx syncrona dev
TIP

Once configured, commit to Git and ignore node_modules and .env — you really don't want credentials in your repository.

§04

The workflow

Source code is owned locally; everything else — tables, dictionary, config records, metadata — stays managed in ServiceNow and moves with your usual update-set / deploy process.

A · DEVELOP — author on dev, every save builds & pushes back
create record in SN refresh local copy dev mode save build in record ✓
B · DEPLOY — point at prod, push the master version up
load master code point at prod push all files built prod updated ✓
File structure
project/
  src/
    table_name/
      record_name/
        field_name.ext

Records are folders because one record can hold several code fields. Never give two records the same display value in one table — or set a differentiatorField to keep them apart.

DOCS

Once a scope is downloaded, syncrona docs generates Markdown and Mermaid diagrams (overview, tables, per-record) — a fast way to explore what a real project looks like.

§05

Command index

Every command runs as npx syncrona <cmd> (or bare syncrona if installed globally). Filter below.

init
no alias
Walks you through creating a SyncroNow AI project from scratch — the recommended way to start.
syncrona init
refresh
alias: r
Refreshes the manifest and downloads new files created in ServiceNow. Never overwrites local content.
syncrona refresh
dev
alias: d
Watches tracked files, then builds and pushes each save to its record.
syncrona dev
push
no alias
Builds and pushes all local files to the instance in your .env. Supports --diff, --dry-run, --update-set, --scope-swap.
syncrona push
build
no alias
Builds the project locally into the build folder. --diff records which files changed for a targeted deploy.
syncrona build
deploy
no alias
Deploys the built files in the build folder to the ServiceNow instance.
syncrona deploy
download
no alias
Downloads a scoped app, overwriting local files. Destructive — confirms first, resumable via checkpoint.
syncrona download my_app
docs
no alias
Generates Markdown docs and Mermaid diagrams describing the downloaded scope.
syncrona docs
repair
no alias
Reconciles the manifest with local files: re-downloads missing, prunes orphans. Destructive — confirms first.
syncrona repair
status
no alias
Extended workspace status: instance, user, scope, config paths, env and connectivity.
syncrona status
doctor
no alias
Runs local config and ServiceNow connectivity diagnostics with actionable fixes.
syncrona doctor
check-env
no alias
Checks machine prerequisites — Node 22+, platform/WSL, Git — and prints fixes.
syncrona check-env
plugins
no alias
Shows configured plugin rules and reports package availability.
syncrona plugins
config
no alias
Inspect or extend config: show-defaults, or add-plugin for a paste-ready rules snippet.
syncrona config add-plugin
mcp
no alias
Starts the standalone MCP server and can auto-configure local MCP client files.
syncrona mcp
login
no alias
Saves ServiceNow credentials in the encrypted global CredentialStore and can set the active instance.
syncrona login dev123.service-now.com
logout
no alias
Removes stored credentials for one instance (or all with --all).
syncrona logout dev123.service-now.com
instances
no alias
Lists instances saved in the CredentialStore and marks the active one.
syncrona instances
use
no alias
Sets the active stored instance for subsequent commands.
syncrona use dev123.service-now.com
jira
no alias
Fetches rich context for a Jira issue, resolving the key from the current branch name.
syncrona jira SCRUM-123
jira-login
no alias
Saves Jira credentials in the global store (Cloud email + API token, or Server / Data Center PAT).
syncrona jira-login
jira-logout
no alias
Removes stored Jira credentials.
syncrona jira-logout
No commands match that filter.
Cross-cutting flags
--diff <branch>Uses git diff against a branch. On push it pushes only changed files; on build it builds everything but records which files changed for a later targeted deploy.
--dry-runPreviews effects without writing — on push, deploy, download and build.
--instance-profile <name>Selects profile env vars (SN_INSTANCE_<PROFILE>, SN_USER_<PROFILE>, SN_PASSWORD_<PROFILE>), falling back to base vars.
--refresh-interval <seconds>Tunes how often dev re-reads the manifest (default 30s; 0 disables polling).
§06

Configuration

A single sync.config.js in your project root drives everything — source layout, plugin rules, and which tables/fields are tracked.

module.exports = {
  sourceDirectory: "src",   // watched in dev mode
  buildDirectory: "build",  // where local builds are written
  // Most specific extension first — the first matching rule wins.
  rules: [
    { match: /\.ts$/, plugins: [
      { name: "@syncrona/typescript-plugin" },
      { name: "@syncrona/babel-plugin" },
    ] },
  ],
  excludes: {},  // tables/fields to drop, on top of defaults
  includes: {},  // tables/fields to force-track
  refreshInterval: 30,
};
includes / excludes

Layered on top of built-in defaults — list them with config show-defaults, then override and refresh.

excludes: {
  sys_scope_privilege: false, // re-enable a default
  my_cool_table: true,        // drop a whole table
  new_table: { cool_script: true },
},
includes: {
  sys_report: true,           // force-track
  special_table: { field: { type: "js" } },
}
plugin rules

A filename regex maps to an ordered plugin chain. Only the first matching rule runs — order specific patterns first.

rules: [
  { match: /\.secret\.ts$/, plugins: [] }, // no-op
  { match: /\.ts$/, plugins: [
    { name: "@syncrona/typescript-plugin",
      options: { transpile: false } },
  ] },
]
tableOptions

Name the record folder, disambiguate duplicate display values, or scope a table by encoded query.

tableOptions: {
  some_table: {
    displayField: "name",
    differentiatorField: ["version", "sys_id"],
    query: "active=true",
  },
}
MULTI

Multi-part extensions unlock several pipelines for one base file: script.client.js and script.server.js can run Webpack and Babel respectively. As long as the base filename is stable, add as many extensions as you like.

WARN

A sys_id differentiator puts a colon in the filename, which breaks native Windows and WSL /mnt paths. Prefer a non-sys_id differentiator, and avoid it entirely on native-Windows teams.

§07

Build plugins

Each is a separate @syncrona/* dev dependency wired into a rule. Chains run in order — the output of one feeds the next.

@syncrona/typescript-pluginType-checks and compiles TypeScript files.
@syncrona/babel-pluginRuns Babel on .js / .ts files.
@syncrona/webpack-pluginBundles your files with Webpack.
@syncrona/sass-pluginCompiles Sass / SCSS to CSS.
@syncrona/eslint-pluginRuns ESLint over your files on build.
@syncrona/prettier-pluginFormats output files with Prettier.
PRESETS

Supporting presets — @syncrona/babel-preset-servicenow and @syncrona/babel-plugin-remove-modules — adapt modern output for the ServiceNow runtime, so a small TypeScript class becomes transpiled, instance-compatible JavaScript while you keep the readable source in Git.

§08

MCP server

The bundled Model Context Protocol server (@syncrona/mcp-server) turns any MCP-capable client — Claude Desktop, Claude Code, VS Code Chat — into a teammate that can read your scope, map dependencies, analyse scripts and propose gated changes behind a dry-run guardrail. It exposes 61 MCP tools in 8 families.

Run npx syncrona mcp to start the server and optionally write local client config (.vscode/mcp.json, .syncrona-mcp/secrets.json), or register it directly:

{
  "mcpServers": {
    "syncrona": {
      "command": "npx",
      "args": ["-y", "@syncrona/mcp-server"]
    }
  }
}
61 tools · 8 families
Session & guardrailsscope, update set and preflight control · 8 tools
  • sync_get_session_context — current scope and active update set
  • sync_set_scope — switch the active scope by scope code
  • sync_list_scopes — list available scopes from sys_scope
  • sync_set_update_set — switch the active update set, optionally creating it
  • sync_list_update_sets — list update sets, optional encoded query
  • sync_prepare_session — one-call scope + update-set setup
  • sync_preflight_check — validate context against guardrails
  • sync_check_instance_capabilities — verify scoped endpoints before automation
Records & metadataquery, read and update instance records · 7 tools
  • sn_query_records — query a table, optional grouped analysis
  • sn_create_record — create a record in any table
  • sn_list_metadata_records — inventory BR, Client Script, ACL, Dictionary, UI Policy, Scripted REST
  • sn_get_metadata_record — read one metadata record, normalized
  • sn_update_metadata_record — controlled update with confirm + dry-run gate
  • sn_search_scripts — full-text search across script tables with excerpts
  • sn_get_record_history — field-level change history from sys_audit
Dependency & impactgraphs, blast radius and relations · 5 tools
  • sn_build_dependency_graph — nodes/edges with cycle detection and hotspots
  • sn_analyze_impact — ranked downstream blast radius for a change
  • sn_diff_dependency_graphs — deterministic before/after graph diff
  • sync_analyze_scope_relations — full table relation map for a scope
  • sync_generate_table_dependency_report — one-command dependency report
Code analysisstatic analysis and semantic indexing · 8 tools
  • sn_analyze_script_architecture — architecture anti-pattern analysis with remediation
  • sn_analyze_script_security — security-focused static analysis
  • sn_analyze_script_performance — performance-focused static analysis
  • sn_analyze_script_full — unified weighted risk score, optional suppressions
  • sync_build_semantic_index — symbol-level index from local source files
  • sync_search_semantic_index — search the semantic symbol index
  • sync_symbol_cross_reference — symbol occurrences by file and count
  • sn_render_analysis_markdown — deterministic markdown report
Change & releasedrift, validation, diffs and release notes · 9 tools
  • sync_detect_drift — local vs instance drift summary with actions
  • sync_diff_instance_vs_local — changed, local-only and instance-only records
  • sync_validate_change_package — required-dependency checks for selected records
  • sync_validate_before_push — pre-push analysis + conflict check, ready or blocked per record
  • sync_compare_instances — compare a scope across two stored profiles (dev vs prod)
  • sync_list_recent_changes — recent scope changes from sys_update_xml
  • sync_generate_release_notes — release notes from an Update Set, markdown or JSON
  • sync_export_update_set — export an Update Set as XML plus metadata
  • sync_unified_change_workflow — preflight → analysis → approval → footprint/rollback
Scope docs & knowledgedurable, reusable scope context · 4 tools
  • sync_generate_scope_knowledge — scope knowledge artifacts (md + json)
  • sync_validate_scope_knowledge — validate knowledge JSON against the schema
  • sync_generate_scope_docs — full docs bundle (overview, dependencies, relationships, per-object)
  • sync_scope_knowledge_auto_update — trigger-based updates (init / refresh / change / drift)
Workflow & orchestrationCLI wrappers, gated execution, ATF and AI planning · 15 tools
  • sync_status — connected instance, scope and user
  • sync_refresh — refresh the local manifest from the instance
  • sync_build — build local files through the plugin pipeline
  • sync_push — push local files to the instance (destructive, gated)
  • run_workspace_command — run a local workspace command for automation
  • sync_create_script_include — create a Script Include, optionally pull it local
  • sync_create_script_include_and_sync — create, sync and return local file paths to edit
  • sn_execute_background_script — gated background-script execution with raw output
  • run_node_code — execute JavaScript with Node.js in the workspace
  • sync_run_atf_tests — run ATF tests (test, suite or whole scope) and poll results
  • sync_suggest_tests — scaffold an ATF server-side test skeleton from a Script Include
  • sn_autonomous_remediation_workflow — detect → propose → dry-run/apply → validate, with approval
  • sync_ai_next_actions — prioritized next actions from a natural-language objective
  • sync_plan_minimal_footprint — rank where-to-modify targets with minimal-footprint scoring
  • sync_onboarding_bootstrap — onboarding wizard/checklist with quickstart defaults
Diagnostics & contexthealth, contracts, coverage and Jira · 5 tools
  • sync_health_check — MCP health, endpoint diagnostics and per-tool reliability metrics
  • sync_metrics_trend — trend deltas between diagnostics windows
  • sync_tool_contract_info — tool-contract version, declared tool list and contract hash
  • sync_table_api_coverage_matrix — metadata coverage matrix and supported Table API operations
  • jira_get_issue — rich Jira issue context (summary, status, links, comments)
WARN

Writes obey a guardrail policy and a dry-run gate; background-script and Node execution are explicit, gated capabilities meant for non-production environments. Always point the MCP server at a least-privilege integration user.

§09

Security & credentials

Authenticate with a dedicated least-privilege integration user over HTTPS — never your admin account. Six authentication options: HTTP Basic, three OAuth 2.0 grants, an inbound REST API key, and mutual TLS layered on top of any of them.

Authentication methods

syncrona login shows a method picker, or pass --auth-method non-interactively. Everything can also come from env vars — SN_AUTH_METHOD selects the method; Basic needs none, so a legacy .env keeps working unchanged.

MethodSelect withUse when · key variables
HTTP Basic (default) --auth-method basic Simplest start — PDIs and dev instances. SN_USER / SN_PASSWORD.
OAuth 2.0 — Password grant --auth-method oauth-password User-context Bearer tokens instead of raw Basic on every request. SN_OAUTH_CLIENT_ID / SN_OAUTH_CLIENT_SECRET plus SN_USER / SN_PASSWORD.
OAuth 2.0 — Client Credentials --auth-method oauth-client-credentials Service-to-service — CI and automation with no user password. SN_OAUTH_CLIENT_ID / SN_OAUTH_CLIENT_SECRET.
OAuth 2.0 — JWT Bearer grant --auth-method oauth-jwt-bearer Key-based trust — sign a JWT assertion instead of sending a password. SN_JWT_KEY (path to the signing PEM), SN_JWT_KID / SN_JWT_ISS / SN_JWT_SUB / SN_JWT_AUD, plus client id/secret.
Inbound REST API key --auth-method api-key One revocable key, no password at all. SN_API_KEY; header name via SN_API_KEY_HEADER (default x-sn-apikey).
Mutual TLS (mTLS) --client-cert / --client-key Certificate-pinned transport, layered onto any method above — not an --auth-method value. SN_CLIENT_CERT / SN_CLIENT_KEY (PEM paths), optional SN_CLIENT_KEY_PASSPHRASE.

OAuth grants exchange credentials for a Bearer token at oauth_token.do, refreshing on expiry or 401. The JWT signing key and mTLS cert/key are stored by path only — key material never enters the encrypted store.

Where credentials live

The global store writes each instance to ~/.syncrona/credentials/<instance>.enc, encrypted with AES-256-GCM. The encryption key is resolved with this precedence:

Key sourceHowStrength
SYNCRONA_STORE_KEY Explicit 32-byte key (hex / base64) from a secrets manager — best for CI / shared environments. Strongest
OS keychain (default) macOS Keychain / Windows Credential Manager / libsecret via optional @napi-rs/keyring; opt out with SYNCRONA_USE_KEYCHAIN=0. Strong
Machine-derived (fallback) Derived from hostname + username when the keychain is unavailable. Obfuscation-grade — guards against casual inspection, not a compromised account or stolen disk. Obfuscation

Safety model

  • Least-privilege by default. A dedicated integration user with only the roles your scope needs.
  • Encrypted credential store. AES-256-GCM at rest; set a real key or enable the keychain for genuine at-rest protection.
  • Dry-run everything risky. --dry-run previews push, deploy, download and build; the MCP server gates writes behind confirmation and dry-run.
  • Destructive ops confirm first. download and repair ask before overwriting (--ci skips the prompt) — keep source in Git so a bad run is a git checkout away.
  • Secrets stay out of Git. Ignore .env and node_modules; for CI, source SYNCRONA_STORE_KEY from a secrets manager.
  • One secret detector, fail-closed. @syncrona/redaction is the single answer to “is this a credential?” — key names, secret-shaped values, a bounded scan budget that reports rather than skips oversized input, and a redaction marker digested from the plaintext so a rotated secret still shows a diff.
SECURITY

With the default machine-derived key, anyone who can read the .enc file as your user can decrypt it. Report vulnerabilities and review data handling in SECURITY.md.

§10

Architecture

A Node 22 monorepo of 14 @syncrona/* packages. Two ServiceNow clients — the core CLI and the MCP server — share one transport policy, one encrypted credential store and one secret detector, so auth, scoped-API resolution, retry behaviour and redaction are identical across both.

AI assistant Your editor + Git MCP server @syncrona/mcp-server core CLI · syncrona syncrona types shared contracts sn-transport · credential-store shared transport policy + encrypted credentials ServiceNow instance REST / Table API · 6 auth options stdio · MCP save · build REST
15 PACKAGES core mcp-server types sn-transport credential-store redaction jira typescript babel webpack sass eslint prettier +2 babel presets
Two clients over one transport, one credential store and one secret detector; shared types keep their contracts in lock-step, and six build plugins power the local pipeline — one Node 22 workspace.

CLI commands and MCP tool families are each declared one entry at a time in a registry; the orchestrators are generic interpreters, so adding a command or tool family is a contained, contract-checked change. Quality gates (type-check, lint, dependency-cruiser module boundaries, tests) run via npm run check. Full detail: docs/ARCHITECTURE.md.

§11

FAQ

How do I delete something?
Turn off dev mode, delete the record in ServiceNow, run refresh, then remove the files from your project. It is deliberate rather than automatic because deleting files should never be accidental.
How do I add new scripts?
Turn off dev mode, create the record in ServiceNow, and run refresh — the files are created automatically.
Does my source code still live in ServiceNow?
No. Once code is in your project you take control of it and no longer edit it directly in ServiceNow — everything else (tables, metadata, config) is still tracked in the instance. That is why Git is strongly recommended.
How do I work with multiple instances or scopes?
Use the encrypted global store (login / use / instances) or instance-profile env vars with --instance-profile to route one command at dev, test or prod. For several scoped apps in one repo, treat each scope as its own project under packages/, run commands from the scope directory, and share node_modules and plugins at the root. status shows which instance and credential source are active.
Is SyncroNow AI affiliated with ServiceNow?
No. It is an independent, third-party tool, not affiliated with, endorsed by or sponsored by ServiceNow, Inc. "ServiceNow" is a trademark of ServiceNow, Inc., used here only to indicate compatibility.
Does it work without installing anything on the instance?
Yes. The CLI talks to standard ServiceNow REST / Table APIs and works with or without the optional companion scoped app — which only enables a few enhanced endpoints. It is broadly release-agnostic; if you hit a release-specific issue, open an issue with your instance version.
How is this different from ServiceNow's native Git?
Native Git moves your code into Git. SyncroNow AI moves your workflow into modern engineering: a local build pipeline, a multi-scope CLI you run from your own editor, and an AI / MCP layer that understands your scope's metadata and dependencies.
Does it run on Windows?
On Windows, WSL is currently required (Ubuntu, build 1903+) — run every syncrona command inside the WSL shell. Native Windows support is on the roadmap; macOS and Linux are first-class.
Is it production-ready?
It is pre-1.0 and early. The engineering is solid — type-checked lint, enforced module boundaries, tests and a security model — but review the security model for your own deployment, and keep your source in Git. Track progress in the roadmap.
Why the package name @syncrona/*?
The project ships under the @syncrona npm scope (the CLI is syncrona, exposing the syncrona command); the GitHub repository is IvanBBaev/syncrona. It is the modern successor to Sincronia / sinc.