Platform State — automation engine status
Agent runs — recent fleet activity
Recent proposals — latest activity
Executive Value — what belton-os is finding and saving
The quantified value the platform surfaces across revenue, time, security, and client health. $ figures are recoverable/month where priced; counts elsewhere. Everything propose-only — realized value grows as proposals are approved.Time saved — the 30% automation KPI
Security posture — exposure across the fleet
Client health — RMM health distribution; lowest first
| Client | Devices | Offline | Score |
|---|
AI spend — this month, by feature (routed + budgeted)
Approvals Inbox — pending proposals across all engines and agents
Review and decide. Approving triggers the executor (currently simulated). Rejecting closes the proposal. All decisions are permanently audited.Proposals
| Kind | Agent | Summary | Min saved | Age | Status | Actions |
|---|
Shadow trials — preview, not yet live
Observe-only — these are would-writes, nothing sent to AutotaskThe following trials are running in shadow mode, capturing what each executor would do before being armed. Review the evidence here; arm a trial when you are satisfied it is correct.
Trial 1 — Ticket categorisation
Priority and queue would-writes from the triage + categorisation executor.
To go live: set ATCAT_ARMED=1 + write-scoped AT creds.
| Ticket | Field | Current | Would write | Confidence | Recorded |
|---|
Trial 2 — Catchall company resolver
Company would-assigns from the Catchall resolver agent.
To go live: set ATCOMPANY_ARMED=1 + write-scoped AT creds.
| Ticket | Current company | Would assign to | Confidence | Recorded |
|---|
Overnight digest — what the platform did while you slept
Compliance uplift opportunity
Clients ranked by purchasable compliant-uplift value (indicative one-off, ex-GST) — the click-to-sell pipeline from open security gaps. (sim) = simulated posture signals.| Client | Score | Open gaps | Opportunity |
|---|
Action queue
Open propose-only proposals by kind — what needs a human decision.| Kind | Open |
|---|
Agreements expiring (next 60 days)
| Client | Agreement | Type | Ends | Auto-renew |
|---|
Security scorecard — grade per client (AV + patch + EDR)
| Client | Devices | AV% | Patch% | EDR% | Grade |
|---|
Client risk — cross-signal, attention first
| Client | Risk | Health | Band |
|---|
Patch compliance — OS patch status across the fleet
| Lowest-compliance client | Devices | Patched | Compliance% |
|---|
License reconciliation — M365 / RMM / EDR per client, flagged
| Client | M365 users | RMM devices | EDR agents | Flags |
|---|
Fleet security benchmark — score distribution across assessed clients
Coverage by security domain
Across clients with telemetry: covered / gap / unknown per domain (MFA · EDR · Backup · Patching) + the uplift opportunity to close gaps. unknown = the proving connector isn't wired — never counted as covered.| Domain | Covered | Gap | Unknown | Coverage | Opportunity |
|---|
Security & compliance gap matrix
Per client: posture score, open gaps (evidence-backed only) and the purchasable uplift opportunity. CIS IG1 · ASD Essential 8 · ISO 27001. Only clients with telemetry are assessed.| Client | Score | Gaps | Open gaps | Opportunity |
|---|
Client posture dashboard — persisted assessment scores across docs, posture & coverage (PRO)
| Client | Overall | Status | Posture | Coverage | Docs | Total gaps |
|---|
Compliance control status — CIS IG1 / ASD E8 / ISO 27001 auto-assessed from telemetry (PRO)
| Client | Signals active | Gaps | Top gaps | CIS IG1 met | E8 met | ISO 27001 met |
|---|---|---|---|---|---|---|
| Loading compliance data… | ||||||
| Framework | Control | Name | Status | Signal | Source | As at |
|---|
Client QBR
Pick a client → the AI fabric narrates their REAL facts (seats, devices, renewals — every number from our DB) into a draft Quarterly Business Review. Draft only — save it as a proposal to record sign-off; nothing is ever sent automatically.Set client IT budget
Sets the annual IT budget for a client so the portal planning card shows a spend-vs-budget comparison. Admin only.Revenue opportunity pipeline
Compliance uplift (indicative one-off, client-purchasable) + billing recovery (directional — contracted > invoiced). Ranked by annualised value.| Client | Type | Detail | Value | Annualised | Action |
|---|
AI ticket triage
gpt-4o classifies open tickets (impact/urgency/priority + category) as propose-only assessments on the action queue — inert until reviewed; no Autotask write.| Ticket | Priority | I | U | Category | Reason | Status |
|---|
Service Delivery Monitor
Slow Death / Overdue
| Ticket | Client | Assigned | Status | Idle (days) | Tier |
|---|
Bouncing Tickets
| Ticket | Client | Reassigns | Queue Hops | Reopens |
|---|
At-Risk Tickets
| Ticket | Client | Reasons |
|---|
Proposed Interventions
| Ticket | Signal | Action | Status |
|---|
Investigation Tickets
CRITICAL/HIGH security and coverage gaps proposed as Autotask tickets — approve to queue for creation, reject to dismiss| Severity | Client | Gap type | Devices | Drafted title | BOP | Status | Actions |
|---|
Labour cost rate
Blended real labour cost per productive hour (from Xero labour accounts)Cost breakdown & basis
Per-product margin
Edit Unit cost to override (COGS = unit cost × units) · flagged where margin < 10% or negative| Product | Sell | Units | Unit cost | COGS | Margin | Margin % |
|---|
Per-SKU product mappings — Xero descriptions → canonical SKUs
The AI drafts mappings (it may only pick from the delivered-SKU vocabulary, or 'unknown'); you confirm. Only confirmed mappings feed per-SKU analysis — the unmapped remainder is shown honestly.| Description | → SKU | Conf. | Status |
|---|
Under-invoiced
Delivered > invoiced| Client | Product | Delivered | Inv. seats | Inv. 12mo |
|---|
Never invoiced
Delivered, no billing record| Client | Product | Delivered | Inv. seats | Inv. 12mo |
|---|
Backup coverage gaps — delivering backup, ~$0 billed
Per-client delivered backup units (Cove/Veeam/iFTP/Datto) vs billed on the backup revenue accounts. The coverage gap is exact; the $ leakage awaits the per-unit rate decision (P1-3).| Client | Sources | Delivered units | Billed 12mo |
|---|
🔴 Real leakage — recoverable
Pax8 delivered → Autotask contracted → Xero billed. These are delivered, never contracted, AND never billed in Xero = genuinely uninvoiced. Raise a ticket. $ = per-product median of Belton's own Autotask unit_price (monthly).| Client | Product | Delivered | Contracted | Gap seats | $/seat | $/mo | Term |
|---|
🟡 Config gaps — fix the agreement (already billed)
Delivered > Autotask contracted, BUT the client is billed for M365 in Xero. The money is coming in — the Autotask agreement just isn't updated. Hygiene / audit, NOT lost revenue.| Client | Product | Delivered | Contracted | Gap seats | Term |
|---|
Proposals
Troubleshooter — M365 never-invoiced
Each finding is investigated across 9 cross-source checks (Pax8 · CIPP · Autotask · Xero). The verdict and evidence are 100% deterministic — the model never computes a number. dry_run runs on prod with zero writes so you can validate before committing.Income trends — GL accounts, month over month
Every income / other-income GL account (scope derived from the chart of accounts, not a fixed list), with its latest month, net delta (ex-GST), and the AI commentary that explains what drove the move. Click an account for its monthly series, per-customer drivers, and invoice-line evidence.| Account | Month | Net Δ (ex-GST) | Commentary |
|---|
Account detail
Invoice-line evidence
Billable utilisation — per staff, current period
Billable hours divided by total logged hours, per resource, for the period. Classification is two-tier: the platform classifier verdict is used where it exists; the PSA billable flag is the fallback for unclassified entries (directional only). Resources with no logged hours are omitted. The Unclassified column shows how many entries used the fallback signal.| Resource | Total h | Billable h | Utilisation % | Unclassified |
|---|---|---|---|---|
| Loading... | ||||
Billing pattern changes — possible missed revenue
Every client's recurring Xero billing read as a month-by-month series. Lapsed = a steady charge that stopped. Qty / Amount drop = still billed but lower. Once-only = a recurring-looking charge billed once (review). Cadence-aware, so annual subscriptions aren't false-flagged mid-cycle. Click any row for the evidence.| Client | Product | Change | Prior | Latest | $/mo | Last billed | Account |
|---|
Billing assurance — contracted vs invoiced
Per client: contracted monthly recurring (Autotask) vs invoiced recurring (Xero, avg/month) across ALL recurring revenue. Xero-anchored. Directional — see caveat.| Client | Contracted /mo | Invoiced /mo | Gap /mo | Ratio |
|---|
Invoiced > contracted / no contract on file
Billing recurring revenue with little/no matching contract — annual cadence, extra services, or a contract not recorded. Review, not necessarily a problem.| Client | Contracted /mo | Invoiced /mo | Kind |
|---|
Software billing assurance — installed but not billed
Detected via RMM software inventory. Each row = a client running a separately-billable product that is not billed (Xero) and not covered by a managed contract. Est. $/mo is directional ex-GST — review before actioning. Change status or add a note, then Save.| Client | Service | Devices | Est. $/mo gap | Status | Review | Evidence |
|---|
Renewal forecast — forward revenue by window + risk
Renewal risk register — all vendors
Pax8 commitment end-dates (Microsoft) + open Autotask renewal tickets (Fortinet/3CX/Adobe/domains/SSL/…) · critical ≤14d (incl. overdue) · warning ≤60d| Risk | Vendor | Client | Item | Detail | Source | Renews | Days |
|---|
Agreements registry
All client agreements on file — type, status, expiry, and Autotask contract link.| Client | Title | Type | Status | Ends | Auto-renew | AT contract |
|---|
Create agreement — admin only
Adds an agreement record for a client. Find the client by searching below, then fill in the details. Admin role required.Agreement templates
Reusable templates — instantiate to create an agreement from a template for a specific client. Admin required to create templates or instantiate.| Name | Title | Type | Term | Auto-renew |
|---|
Automation actions
All actions are propose-only — they raise proposals for human review. Nothing executes automatically. Sync from Autotask imports contracts from the already-synced canonical contracts table (no API call). Run auto-renewals raises agreement_renewal proposals for expiring auto-renew agreements. Sync-to-Autotask per agreement raises a SIMULATED agreement_autotask_sync proposal — no Autotask write until approved and credentials are configured.Open pipeline by stage
raw Autotask stage codes · bar = $ value, notch = probability-weightedBy owner
open dealsProjects
| Project | Client | Status | Est $ | Est hrs | Actual hrs |
|---|
Open ticket aging
time since created · greener = fresh, redder = staleOpen by priority
raw priority codesOpen by client
top 30 by load| Client | Open |
|---|
Gated Workflow Rail
Stage-ordered workflows with single-owner enforcement. Tickets bound to a workflow must complete each stage checklist before advancing. Out-of-sequence handoffs are flagged as proposals.Queue Mapping
Map each stage to its Autotask queue so out-of-sequence detection can fire. Requires admin role.Select a template above to configure its stage queues.
Active workflow instances
Tickets currently tracked in a workflow. Click a row to see the checklist and advance the stage.| Ticket | Workflow | Current Stage | Status | Started |
|---|
Workflow Detail
Current Stage Checklist
Out-of-Sequence Flags
These proposals flag that the ticket was seen in a team queue that does not match the current stage owner. Propose-only -- not a hard block.Clients
All clients in your tenant. Click a row to open the full client console.| Client | Portal | Users | Last login | Devices | M365 seats | MRR (ex-GST) | Spend 12mo (ex-GST) |
|---|
—
Overview
Value summary
Total spend (ex-GST, last 12 months)
Revenue account codes — no cost or marginSpend by account code
Last 12 months, ex-GST, revenue side only| GA code | Account | Spend ex-GST (12 mo) |
|---|
Tickets
open first, then recent| # | Title | Status | Priority | Open | Created |
|---|
Managed devices
Datto RMM| Hostname | Company | Class | Online | AV | Patch | Warranty | Last seen |
|---|
M365 licences
Pax8 seats| SKU | Qty | Term | Renewal | Company |
|---|
Invoices
ex-GST (Xero ACCREC)| Invoice # | Date | Status | Amount (ex-GST) | Total (inc-GST) |
|---|
QBR history
Monthly reports
Renewals
Upgrade & uplift bundles
Security posture
Portal access
When enabled, contacts for this client can log in to the portal using their email and password.
Portal users
| Name | Active | Last login |
|---|
Device-billing coverage
Managed devices (Datto RMM) vs whether the client holds a covering (managed/block) Autotask contract — via ADR 0001 (accepted). devices_unmanaged = endpoints we manage but may not bill. Datto internal buckets (names starting *) are filtered from proposals.| Client | Devices | Covering contract | Flag | Last seen |
|---|
Identity coverage (CIPP)
CIPP licensed M365 users (identity truth) vs Pax8 seats (licensing delivery) per client. seats_exceed_users = possible waste; users_exceed_seats = licences sourced outside Pax8. RunPOST /sync/cipp with CIPP creds to populate.
| Client | CIPP users | Pax8 seats | Variance | Flag |
|---|
RMM Intelligence — proactive insights over Datto RMM (read-only)
A view the RMM doesn't give you: device freshness, AV/patch coverage, stuck alerts, chronic machines, and billing/coverage gaps. Alert-driven boards populate from the nightly Datto sync. Everything propose-only.Stuck alerts — open >7d, not muted
| Device | Client | Type | Age (d) |
|---|
Repeat-offender devices — most alerts / 90d
| Device | Client | Alerts | Replace? |
|---|
User vs device gap — M365 users vs managed devices
| Client | Users | Devices | Gap | Likely |
|---|
Stale devices — offline 90d+; tombstone candidates billed
| Device | Client | Offline (d) | Billed? |
|---|
Coverage gaps — forgotten maintenance mode + endpoints without antivirus
| Issue | Device | Client |
|---|
Audit timeline — technician/system actions, retained beyond Datto's 180 days
| When | Who | Action | Client |
|---|
Patch plan — what we'd patch · DRY-RUN, nothing deploys
| Client | Needs patch | Statuses |
|---|
Predictive worklist — fix before they call
| Device | Client | Score | Why |
|---|
Automation KPI — time saved by the propose-only agent fleet
Realized = minutes on EXECUTED proposals (the real KPI). Potential = minutes queued on open proposals awaiting approval. Target 30% reduction vs your baseline. Each agent raises proposals a human approves — nothing auto-executes. Per-agent control (admin): toggle Enabled (a disabled agent is skipped by the fleet run), set Mode — observe (propose-only, default) vs live (only when the tenant holds the automation.autoexecute entitlement) — and override Cadence. Train-and-observe stays the default; agents are propose-only regardless of mode.| Agent | Cadence | Enabled | Mode | Open proposals | Potential (min) | Executed | Realized (min) | Last run |
|---|
Per-staff automation opportunities — recurring work, ranked by real logged hours (#87)
| Staff | Hours (window) | Occurrences | Top recurring patterns |
|---|
Proposal lifecycle
propose → approve → execute → auditBy category
proposal kinds| Kind | Total | Executed | Min saved |
|---|
Activity
immutable audit trailRules engine — conditions → actions, fire as proposals
Rules are evaluated by the pure engine; LIVE matches against open tickets become propose-only actions on the spine (inert until approved). mode: dry_run (shadow) · live · disabled. Gated by the per-tenant safety stack. Admin to edit. Click a rule row to expand logic + preview on live tickets.| Rule | Priority | Tags / Role | Conditions → actions | Mode |
|---|
Agent Flow — run → proposal → decision → execution → audit
Click any agent run row to see the proposals it raised. Click a proposal to see its evidence, decision, and the immutable audit entry.| When | Agent | Status | Proposed |
|---|
Proposals from run
| Kind | Status | Proposed by | When | Evidence |
|---|
Audit Log — automation actions, newest first
Read-only immutable record of automation actions on this tenant: rule promotions, proposals, approvals, rejections, executions, kill-switch / freeze / stop-all events. Admin or approver.| When | Actor | Action | Entity | Detail |
|---|
Backtest a rule — prove it on 100+ real tickets before go-live
Replays a candidate rule over completed tickets and grades each firing against what your team actually did. The bar: ≥100 matched at ≥99%. A rule that scores low is rejected, not shipped. Use icontains for titles (contains is case-sensitive).| Disagreed ticket | proposed | actual |
|---|
Evidence dashboard — is each rule ready to promote?
Every rule's accumulated evidence in one place: shadow firings graded against what the team actually did, the running match-rate, a 14-day trend, and whether it clears the ≥100 graded / ≥99% promotion bar. Promotion from dry_run to live stays a deliberate human action — nothing here promotes anything.| Rule | Mode | Risk | Match | Mismatch | Pending | Rate | 14-day trend | Promotion |
|---|
Completion billing summaries — client-friendly, evidence-graded
On ticket completion the AI drafts a plain-language billing summary, grounded in the ticket's resolution + real time entries (never invents work or prices). Runs in shadow; once it earns ≥100 graded at ≥99%, drafts become propose-only proposals. Nothing is ever sent.AI prompts — the system prompt behind each AI engine
Defaults ship with the platform; an override tunes this tenant's tone/calibration without code changes (versioned + audited). Output contracts are enforced separately, so a bad override fails safe. Admin to edit.| Prompt | Engine | Status |
|---|
Learning — how you decide — from every approve/reject on the spine
Advisory only. The platform learns from your proposal decisions: what you keep rejecting (candidates to stop proposing), what you always approve (future auto-approve candidates — nothing auto-executes without an explicit gate), and where decisions are piling up.| Kind | Signature | Decided | Rejected |
|---|
| Kind | Signature | Decided | Approved |
|---|
| Proposal kind | Proposed | Pending | Approval rate | Median hrs to decide |
|---|
You should create this rule — patterns detected in your recent activity
Grounded suggestions mined from recent ticket re-homes, recurring proposals, and stale-ticket queues. Each suggestion ships a fully-formed candidate rule ready to add in dry_run/shadow mode. Adding a suggestion NEVER creates a live rule — promote to live separately via the Evidence dashboard once it has 100+ graded shadow runs at ≥99% match.Automation Activity — running log of what the agent fleet has done
Merged, reverse-chronological feed: agent fleet runs, proposals raised/approved/executed, and automation audit entries. Ticket links open the Autotask record directly (requires the Autotask zone to be set in Connectors). Read-only.| Time | Source | Action | Status | Summary | Ticket |
|---|---|---|---|---|---|
| Loading… | |||||
Build backlog — what we want to build
The living worklist for the productised platform. Each item is architected (area · phase · sell-value · how-to-build note) and advanced through status. Change Status inline as we build. See docs/PRODUCTISATION_PLAN.md.| Feature | Area | Phase | Value | Status |
|---|
Plan & Features — the "AutoStatus feature mode" switch
A tenant's plan grants capabilities; per-capability overrides force on/off. Routes gate on this (HTTP 402 if not entitled).| Capability | In plan | Effective | Override |
|---|
Data freshness — per-source sync state
Last advanced = the last time the data actually changed (the false-fresh-proof watermark) — a source can run green while returning stale data; this column catches it. Syncs run in the background (202 + job); the nightly chain runs automatically.| Source | Last run | Last advanced | Status | Last job |
|---|
Connectors — this tenant's vendor connections
Each tenant supplies its own Autotask / Pax8 / Xero / Datto / … credentials, encrypted at rest. Secrets are write-only — never shown. Click a vendor to configure. See docs/CONNECTOR_MODEL.md.| Vendor | Status | Verified | Fields set | Updated |
|---|
Managed-client documentation completeness — clients under an active agreement
| Client | Completeness | Compliant | Stale | Non-compliant | Missing |
|---|
Per-document assessment
Client-facing ≠ confidential violations are flagged in red. Missing = no doc found; non-compliant = present but fails the standard.| Document type | Construct | Facing | Classification | Status | Issues / fixes |
|---|
BOP health for this client
Existing documents in IT Glue
| Title | Type | Updated |
|---|
BOP gaps
| BOP | Category | Gap | Updated |
|---|
Client assessments — persisted doc audit scores across the managed fleet
Scores are written by the nightly doc_assurance agent. Run audit manually to refresh now.| Client | Domain | Score | Status | Gaps | Assessed |
|---|
Per-domain detail
Completeness score, status, and gaps per domain for this client.| Domain | Score | Status | Gaps | Assessed |
|---|
Belton Documentation Standard — 20 required doc types
This is the config that drives the assessment engine. Source of truth: docs/DOCUMENTATION_STANDARD.md. Scope: client docs are per-client in IT Glue; Belton docs are in the Belton org.| Doc type | Scope | Construct | Facing | Classification | Cadence | Required sections / fields | Source of truth |
|---|
Base Operating Procedures (BOPs) — 25 procedures
Per-tenant markdown overrides replace the catalogue default. Override active = shown in preview. Admin or editor role required to edit.| BOP | Category | Override | |
|---|---|---|---|
| Loading… | |||
Document preview
Edit template
Edit BOP
Archived Organisations
Select an org to browse its archived resources.| Organisation | IT Glue ID | Latest Snapshot | Last Seen |
|---|---|---|---|
| Loading… | |||
Backup Runs — last 10
| Started | Type | Status | Orgs/Counts | Reconciliation |
|---|---|---|---|---|
| Loading… | ||||
Resources
| Type | IT Glue ID | Name/Title | Snapshot At | Deleted? | Action |
|---|---|---|---|---|---|
| Loading… | |||||
Snapshot Detail
Read-only replica — this is the archived snapshot, not live IT Glue data.
Users & roles — tenant admin
admin = full control · approver = approve/reject/execute proposals · editor = edit doc templates + BOPs · member = read + propose. admin implies approver. Toggle roles inline.| User | admin | approver | editor | member | Created |
|---|
Tenants — super-admin control plane (platform operator only)
Create, suspend, and set the plan for each tenant. Cross-tenant; requires a platform-admin token (you are one locally). See docs/TENANT_CONTROL_PLANE.md.| Tenant | Slug | Plan | Status | Created |
|---|
Belton OS is a whole-MSP automation platform on a propose → approve → execute → audit spine. Billing is the first engine live; here's the rest.
Blocked on you
credentials & decisions that unlock the next engines| Needed | Status | Unlocks |
|---|
Audit log — the spine's immutable trail (admin)
| When (UTC) | Actor | Action | Entity | Detail |
|---|
The spine — propose → approve → execute → audit
Every automated action in belton-os is a proposal. No engine, agent, or rule writes to Autotask or any external system without an explicit human approval. The flow is always:
- Proposed — an engine or agent detects a condition and raises a proposal with evidence, rationale, and a proposed action.
- Approved — an approver or admin reviews the proposal and clicks Approve. Rejected proposals are audited and closed.
- Executing — the executor runs the action (e.g. create a ticket, update a contract line, send a communication). If write credentials are absent or the kill switch is ON, the executor simulates and logs "SIMULATED".
- Executed / Failed — the final state. Every transition is written to the immutable audit log with actor, timestamp, and outcome.
This is the moat: agents can act continuously without becoming a liability. Nothing is autonomous — everything is traceable.
The engines
Each engine is a propose-only producer — it finds, flags, and raises proposals. Humans decide.| Engine | What it looks for | Proposal kind |
|---|---|---|
| Triage | Open tickets matching priority/keyword conditions | ticket_triage |
| Growth | Uplift and expansion opportunities across the client base | revenue_opportunity |
| Billing Assurance | Billing deltas — delivered vs invoiced | rebill_review |
| Software Billing | Software present but not billed or covered by contract | software_billing_gap |
| Client Health | At-risk clients based on RMM/ticket signals | client_health_action |
| QBR / Client Intel | Quarterly business review narratives per client | qbr_narrative |
| Security / Gap Matrix | Security posture gaps across the fleet | security_gap |
| AI Proposal | Natural-language brief → validated catalogue quote | ai_proposal |
| Renewals | Contracts expiring in the next 90 days | renewal_action |
| SDM | Bouncing, slow-death, and at-risk tickets | sdm_action |
| Gap Scanner | Silent gaps — no AV, no backup, billing leakage, renewal risk | gap_finding |
| Investigation Tickets | CRITICAL/HIGH gap findings needing Autotask tickets | ticket_create |
The safety stack
- Kill switch — per-tenant master stop. When ON, no rules fire, no proposals execute, and executors simulate. Use "Stop automation + clear pending" to turn it ON, revert all live rules, and reject open proposals in one click.
- Entity freeze — a specific client or ticket can be frozen so no automation touches it while an operator is working it manually.
- Hourly rate breaker — hard cap of 100 proposals per hour per tenant. Trips automatically and logs a RATE_BREAKER audit event.
- Dry-run / shadow mode — rules in dry_run mode fire, evaluate, and log — but do not raise proposals. Safe to run without risk.
- Autoexecute entitlement — proposals only auto-execute when the tenant holds the
automation.autoexecuteentitlement AND write-scoped Autotask credentials are configured AND the "Automation Complete" ticket status exists in Autotask. - RLS tenant isolation — every DB query runs as
belton_app(no bypass); row-level security enforces that no tenant sees another's data.
How to drive the platform
- Confirm connectors — go to the Connectors tab, ensure Autotask, Datto RMM, and Pax8 are wired. Without connectors, engines have no data.
- Run the fleet in dry_run — click "Run fleet" on the Automation tab. All rules are in dry_run by default; proposals are raised but nothing executes.
- Review proposals — go to the Activity tab. Review each proposal's evidence and rationale. Approve or reject.
- Promote rules to live — once you are satisfied that rules are accurate, use "Promote proven → live" to move the proven AutoStatus-faithful rules from dry_run to live. Live rules raise proposals that are subject to autoexecute when armed.
- Arm autoexecute (admin only) — this requires three conditions to be true (see checklist below): the autoexecute entitlement granted, Autotask write credentials configured, and the "Automation Complete" picklist status created in Autotask. Contact your platform admin to grant the entitlement.
- Monitor — the Platform landing page shows the live state: banner, counters, agent runs, and recent proposals. The Audit Log tab has the immutable trail.
The 30% automation KPI
The KPI is computed from the audit trail: sum(minutes_saved) where status='executed' divided by the performance_baselines table (total staff minutes per period). This is the only honest measure — proposals that are raised but never approved score zero. The KPI cannot be gamed by building agents that do not get approved.
Target: 30% reduction in manual time. Current progress is shown on the Automation KPI card.
Arm Autoexecute — prerequisites checklist
These three conditions must all be true before autoexecute is safe to arm. Status loads from /platform/overview. Admin role required to act.To arm autoexecute: contact your platform admin to grant the automation.autoexecute entitlement, configure Autotask write credentials in Connectors, and verify the "Automation Complete" ticket status exists in Autotask.
Cross-portal matching coverage
Every portal's entities vs canonical-client links. Approving a candidate writes a permanent alias — the join sticks across all future syncs on every portal.| Portal / source | Entities | Matched | Coverage | Pending review |
|---|
Review queue summary
Resolution candidates pending human confirm. Approve commits the join; reject discards it. Both are audited. dangling_autotask_id candidates resolve automatically once the inactive company sync runs.| Reason | Pending | Bulk action |
|---|
Candidates
| Name | Reason | Company (proposed link) | Source | Active? | AI suggestion | Created | Actions |
|---|