Integrations

Fits what you already run.

The core speaks in domain types and imports no vendor SDK. Every external system sits behind a port, so swapping one is configuration rather than a migration — and adding one does not touch the core.

Signum Causa

The incident, end to end.

Where the conversation happens, where the ticket lives, and which model reads the transcript. All three are your choice.

LayerSystemWhat it covers
Collaboration Slack Events API ingress, channel-name binding, in-channel review actions
Collaboration Microsoft Teams Graph ingress, same binding and review model
ITSM ServiceNow Tickets, problems, attachments, private notes, knowledge articles
ITSM FreshService Tickets, problems, attachments, private notes, knowledge articles
ITSM BMC Helix Tickets, problems, attachments, private notes
ITSM Ivanti Neurons Tickets, problems, attachments, private notes
Model Anthropic Claude Structured extraction, knowledge drafting, problem-link scoring
Model OpenAI Structured extraction, knowledge drafting, problem-link scoring
Model Google Gemini Structured extraction, knowledge drafting, problem-link scoring
Model OpenAI-compatible Bring your own endpoint, including self-hosted
Identity OIDC Google, Microsoft, Okta and any compliant provider
Identity SAML · SCIM Enterprise sign-on and automated provisioning

Every row above is implemented and covered by contract tests against a mock transport — no live credential required to run them.

Signum Memoria

Whatever your knowledge is already sitting in.

A connector hands Memoria a stream of records and a scope. That is the whole contract, and it does not care what the source is — if a system can be read over an API, it can be a source. What exists today is a list of adapters against that contract, and the list grows; what is already true of every one of them is the part that is hard to retrofit.

SourceScopeState
Confluence Named spaces, read-only OAuth. Page restrictions honoured by exclusion at ingest available
Drop folder A watched directory — anything you can put in a folder, staged for review available
CSV import Tabular records mapped to pages available
Slack Allow-listed public channels only. No DMs, no private channels platform-proven
FreshService Tickets, changes and knowledge articles platform-proven
SharePoint · OneDrive Named sites and libraries under Sites.Selected, honouring existing sensitivity labels specified
Jira Named projects. Comments are the highest-value and highest-risk content specified
Microsoft Teams Allow-listed channels. Feasibility unresolved — see below unresolved

Platform-proven means Signum already talks to that system — Causa ships built, contract-tested adapters for Slack and FreshService, so the authentication, the rate limits and the HTTP client are settled. What remains for Memoria is mapping those records onto pages. That is real work, and it is not a new integration.

Teams is the lowest-value and highest-risk source in the inventory: tenant-wide channel-message read has no clean per-resource equivalent of Sites.Selected, and some of the APIs are gated by Microsoft behind written justification. Slack already covers the conversational category. Not building it is an acceptable outcome, and we would rather say so than leave it on a roadmap.

Indexing and ranking

Your choice of provider, or none at all.

Retrieval is two steps and a check, each behind its own provider seam. Voyage and Amazon Bedrock ship as the options; anything offering equivalent embedding and rerank can take their place, and every one of them can be set to none if you would rather run without it.

StageProviderWhat it does
Embeddings Voyage · Amazon Bedrock Turns each chunk into a vector so a question can match meaning, not just words
Reranking Voyage · Amazon Bedrock Re-scores the shortlist against the actual question before anything is shown
Answer-presence judge Anthropic Checks whether the retrieved pages actually contain an answer

The provider is a sub-processor and is named in your data-processing terms. Changing the embedding model is a one-way door while indexed data exists — the vector dimension changes with it — so it is guarded rather than a setting anyone can flip.