The operations platform Castle Rock Sky uses to run its MSP — M365, HaloPSA, Huntress, ImmyBot, ScreenConnect, DNSFilter and ConnectSecure in one console for technicians, account managers and clients.
753 Pester tests passing, main clean, last shipped PR #115
Castle Rock Sky's MSP work is spread across a dozen vendor consoles — M365, HaloPSA, Huntress, ImmyBot, ScreenConnect, DNSFilter, SherWeb, ConnectSecure. SkyOps pulls them into one place and turns the data into views someone can act on, rather than tabs someone has to reconcile by hand. Built for internal use first, designed with a future as a vendor product for other MSPs.
Three distinct audiences, and the difference between them drives most design decisions. Technicians get remediation and automation, embedded in HaloPSA via iframe. Account managers get QBRs and the renewal/refresh conversations — which is why end-of-life is its own report rather than a section of a security one. Clients get a restricted self-service portal and an AI assistant embedded in the Halo client portal.
A technician, an account manager or a client can answer their own question without opening a vendor console — and every tenant-touching action is audit-logged for the HIPAA/SEC clients.
ConnectSecure as a sixth asset collector
Feed asset_view (serial number, BIOS, encryption state, architecture, security grade) into the nightly asset pipeline, joined on serial number, to close remaining gaps in the unified asset view.
Three separate reports rather than one master view, because the audiences differ: Active Vulnerabilities is a remediation job, End of Life is an account-manager replacement conversation, and End-of-Life Software is an uninstall-or-upgrade job. All three share one refresh (~142s) and one tenant-to-company mapping, but each pass is wrapped independently so a failure in one cannot discard the others' caches.
Three separate reports rather than one master view, because the audiences differ: Active Vulnerabilities is a remediation job, End of Life is an account-manager replacement conversation, and End-of-Life Software is an uninstall-or-upgrade job. All three share one refresh (~142s) and one tenant-to-company mapping, but each pass is wrapped independently so a failure in one cannot discard the others' caches.
Conversations were originally tied to a throwaway session, so suggesting a reboot lost all context. They are now anchored to a Halo ticket with no idle expiry, and each turn appends a hidden note so the ticket stays current even if the session is interrupted. Artie also gained the ability to open, check and resolve tickets rather than only advise.