Releases

Changelog

Every release, security fix and change to SignalVault, published with a date.

v0.18.2 · Today Latest

Maintenance

No change to the API, the proxy or the dashboard.

Improved

  • Maintenance

    No change to the API, the proxy or the dashboard.

v0.17.4 · 6 days ago

Maintenance

No change to the API, the proxy or the dashboard.

Improved

  • Maintenance

    No change to the API, the proxy or the dashboard.

v0.17.3 · 6 days ago

Maintenance

No change to the API, the proxy or the dashboard.

Improved

  • Maintenance

    No change to the API, the proxy or the dashboard.

v0.17.2 · 6 days ago

Audit events are delivered even when rule checks are rate-limited

A request over the rule-check limit is still recorded, and the SDKs queue and retry audit events.

Improved

  • Requests over the rule-check limit are recorded

    Above 120 rule checks a minute per app, a request is still recorded in the audit trail, marked unchecked, with whether your SDK sent it on to the provider. No rule runs on it and its prompt is not stored. The dashboard labels unchecked requests and counts them per app. With Node SDK 0.6.0 or Python SDK 0.7.0, its response is recorded too.

  • Audit events queued and retried

    Node SDK 0.6.0 and Python SDK 0.7.0 keep audit events in a queue and retry a failed send up to 6 times over about two minutes, without storing anything twice. Closing the client or exiting waits up to 10 seconds for queued events, and any event that is dropped is logged with its event_id and counted. Responses and tool calls do not use rule checks. Every event type shares one ceiling of 3,000 events a minute per app.

v0.17.1 · 8 days ago

New-app defaults in the detection docs

Improved

  • New-app defaults in the detection docs

    The PII detection page lists the identifiers a new app's PII rule starts with: email addresses, phone numbers, US social security numbers, payment card numbers and IBANs. Every other identifier on the page can be added to the rule.

v0.17.0 · 8 days ago

1,000 free requests, at least 14 days

The free trial includes 1,000 requests and runs for at least 14 days, shared by all your apps.

Improved

  • 1,000 free requests, at least 14 days

    The trial runs for at least 14 days whatever you send, up to 5,000 requests. From day 14 it ends at 1,000 requests, and on day 60 it ends whatever the count. Choose a plan before the trial ends and requests carry on without a break. The dashboard shows the count and the dates. A request after the trial has ended gets a 429 with the code trial_limit_exceeded and a link to choose a plan.

  • One trial for all your apps

    An account's apps share one trial, where each app had its own, and an account on trial can hold up to 5 apps. If you were on the trial before 21 October, your 14 days start on 21 October and the requests you have already sent count towards the 1,000.

v0.16.4 · 8 days ago

Event search by ID and metadata

The event search box finds events by request ID, tool name and the metadata you send with them.

Improved

  • Search by request ID, tool name and metadata

    The search box on the events page matches model, provider, request and event IDs, tool names and metadata values, such as a user or session ID. The term is matched as typed, so % and _ are not wildcards. Prompts and responses are encrypted at rest and are not searched.

v0.16.3 · 9 days ago

Complete audit export

The audit export holds every field SignalVault stores encrypted, in readable form.

Improved

  • Every encrypted field in the export

    The JSON export decrypts every field SignalVault encrypts: prompts and responses, message lists, tool definitions, tool-call inputs and outputs, and provider error text. Each keeps its key name, such as payload.tool_input_encrypted. An export downloaded before 20 October holds these fields encrypted; download it again for a readable copy.

  • A new last column in CSV exports

    CSV exports end with an unavailable_fields column, which names any stored field that could not be read and is otherwise empty. A JSON row carries unavailable_fields only when it names a field. If you read CSV exports by column position, allow for the new last column.

v0.16.1 · 10 days ago

EU and UK identifiers

The PII rule detects national identity and tax numbers from Germany, France, Italy, the Netherlands and Spain, and UK National Insurance numbers, and scans long prompts in less time.

Improved

  • Faster PII scanning

    Most identifiers are found in one pass over the text, so a PII rule scans long prompts in less time.

v0.16.0 · 11 days ago

Nordic identifiers and IBAN

The PII rule detects IBANs and personal identity numbers from Denmark, Finland, Iceland, Norway and Sweden, each confirmed by its check digits or its date.

Improved

  • New apps detect card numbers and IBANs

    The PII rule created with a new app also detects payment card numbers and IBANs. Existing rules are unchanged.

v0.15.12 · 11 days ago

More precise PII detection

Every identifier the PII rule detects is listed in the docs and the rule editor, and each match is confirmed before it counts.

Improved

  • Choose PII identifiers by region

    Tick a whole region in the rule editor, or name it in a rule's patterns list ("us"), and the rule detects every identifier for that region, including ones added later. Each addition is named in the changelog.

  • PII detection confirms what it finds

    Card numbers must pass their Luhn check digit, IP addresses must have four parts from 0 to 255, US phone numbers need an area code and exchange that can exist, and social security numbers that are never issued are ignored. Order numbers, timestamps and similar values are flagged less often, so a PII rule set to block or redact refuses fewer requests that hold none.

v0.15.9 · 13 days ago

Changelog, security and blog pages

The changelog, the security page and the blog are rebuilt to be read on any screen, with feeds you can subscribe to.

Improved

  • Blog and Security in the navigation

    Both pages are linked from the top of every public page, and the page you are on is marked.

v0.15.8 · 13 days ago

Redaction through the proxy

A request through the proxy that matches a redact rule is forwarded to your provider with the matched values masked.

Improved

  • Redact rules mask requests through the proxy

    A request through the proxy that matches a redact rule is forwarded to your provider with the matched values masked. Message text, the Anthropic system field, tool inputs and results, and tool-call arguments are rewritten; the rest of the request is sent as you wrote it. This covers OpenAI and Anthropic, streaming and non-streaming, and the response carries the header x-signalvault-decision: redact. To refuse a matching request instead, set the rule's action to block.

  • The masked request is checked before it is sent

    It is evaluated against your rules again and compared with the text stored for the request. It is refused with a 400, and nothing reaches your provider, when the rule's type has nothing to mask, when a match cannot be removed cleanly, or when an exact copy of a masked value (8 bytes or more) is still present elsewhere in the request. The response carries a reason code and a description, and the refusal appears in your dashboard with the same reason.

  • Tool inputs and tool-call arguments are evaluated

    Rules evaluate the string values in tool inputs and tool-call arguments before a request is forwarded, for OpenAI and Anthropic, through the proxy and on the events API. The values in one tool input are read as lines of one text, so a pattern can match across two adjacent values.

  • Rules apply to requests with tool calls

    Requests that carry tool calls can be flagged, masked or blocked by your rules. Violation counts and token estimates rise for apps that send OpenAI tool calls, and argument values count toward the 200 KB prompt limit. For Anthropic, stored prompt text lists tool input values one per line, and token estimates fall for requests whose tool inputs are objects.

  • Keyword rules match beside accented letters

    Keyword rules match keywords next to accented letters and typographic punctuation, in either letter case, so violation counts can rise on such text.

  • PII rules match beside non-ASCII text

    Built-in PII rules match a value directly beside a typographic quote, an accented letter, or non-Latin text such as Chinese or Cyrillic, the way they match a value between spaces. Violation counts can rise on such text.

v0.15.7 · 14 days ago

Dashboard periods, billing and rules

Improved

  • Cards follow the selected period

    On Events, the 1h, 24h, 7d and 30d control sets the time range for the event list and for the cards above it.

  • Request and cost lines show every interval

    The request and cost lines show every interval in the selected range, including ones with no activity, so quiet periods show as a drop to zero.

  • App pages open in place

    Events, Violations, Costs, Rules and Settings open in place, without a page reload.

  • Upgrade opens the app's billing settings

    Upgrade on the Rules page opens that app's Settings › Billing, where you change its plan. "Manage in Stripe" there covers payment methods, invoices and cancellation.

v0.15.5 · 15 days ago

Costs from list prices

Costs are recorded from a list price or not at all.

Improved

  • Costs come from a list price

    A response is priced when its model is in our price table by exact name. For any other model, no cost is recorded and the dashboard shows that it is not available. You can always send cost_usd on the response to record your own figure.

  • Costs shows what its totals leave out

    Costs shows how many responses its totals leave out and which models they used.

  • Monthly spend limits count responses with a cost

    A monthly spend limit counts only responses that have a cost. If you use a model that is not in the price table, those responses do not count towards the limit — Settings › Budgets shows how many that is this month. Send cost_usd on the response, or use a daily token limit, which counts every response.

  • Each model name has its own price entry

    A dated or newly released variant records no cost until it is added. Costs already recorded are unchanged.

  • Anthropic cost from input and output tokens

    For Anthropic, cost is worked out from input and output tokens. Prompt-cache tokens count towards your token budget and are not included in the cost.

v0.15.4 · 15 days ago

Anthropic token counts

Improved

  • Token counts cover Anthropic traffic

    The daily token budget, the token figures on Events and the token totals on Costs count requests made through the Anthropic proxy, including tokens read from or written to Anthropic's prompt cache.

  • Check daily token budgets on Anthropic apps

    This applies to usage already recorded today. If an app has a daily token budget and uses Anthropic, check the limit is still where you want it — an app that is already past it will have its next proxy request refused with a 402 until the next UTC day or until you raise the limit.

  • Token totals on Costs rise for Anthropic apps

    For apps that use Anthropic, token totals on the Costs page rise across the past 30 days.

v0.15.3 · 15 days ago

Tool-call guardrails and sampling

Improved

  • Guardrails run on every tool call

    Guardrails run on tool calls whatever your sampling rate, the same as on requests and responses. A tool call whose payload is not stored is still evaluated, and a match is recorded with the rule's decision.

  • Violation counts reflect all traffic

    If you use sampling below 100, tool calls that match a rule show as warn, redact or block, and violation counts and alerts reflect all of your traffic. Expect those counts to rise.

  • Violations without a stored payload

    A violation on a tool call whose payload was not stored records which rule matched, with no detail from the payload.

  • One record per violation

    Tool calls through the proxy record each violation once, and a model allowlist rule counts a tool call once, by the model it names.

v0.15.2 · 15 days ago

Sampling follows the plan

Improved

  • Sampling applies on Growth

    Request sampling applies while an app is on the Growth plan. On every other plan each payload is stored in full.

  • Saved rates are kept across plan changes

    If you saved a sampling rate on Growth and later moved the app to another plan, it stores full payloads from now on. The saved rate is kept and applies again if the app returns to Growth.

v0.15.0 · 17 days ago

Dashboard redesign

The dashboard is now organised around one app at a time, with a guided setup for your first request and an event detail you can link to.

Improved

  • The dashboard opens where you left off

    It takes you to the app you were last in. With no record of one it opens the app with the most recent event, and a new account goes straight to creating its first app.

  • Filter chips on the events list

    A segmented period control, a filter menu, and a chip for each active filter that removes it in one click. Changing a filter or the period returns you to the newest events.

  • Tool calls in the event drawer

    Each tool call shows its tool, input and output. Event rows now open from the keyboard too.

  • Readable sub-cent costs

    Costs under a cent read <$0.01 on Events and Costs, with the exact figure on hover and in the event detail.

  • Settings matches Account

    Same layout, with each section under its own title. The alerts section is now named Alerts, and a new API key is shown once with Copy key and Copy as .env.

  • Laid out for every screen

    Every dashboard and account page works on phones, tablets and desktop. Creating an app has its own page, and dashboard pages open with their own header.

v0.14.0 · 28 days ago

Streaming tool guardrails

Tool-call guardrails now run on streaming responses, which is how most chat interfaces work.

Improved

  • Tool calls arrive in one frame while they are evaluated

    While a tool call is being evaluated it arrives in a single frame rather than token by token. Text content streams as before, and most agent clients do not render tool arguments incrementally.

  • The Anthropic SDK works unchanged

    The Anthropic proxy accepts the x-api-key header used by the official Anthropic SDK. If you configured an Anthropic integration before 29 September, check that your base URL reads https://api.signalvault.io/proxy/anthropic — without /v1, which the Anthropic SDK appends itself. The OpenAI base URL does include /v1, since that client expects it.

  • One shape for redaction results

    Redaction results use a consistent shape across the API and both SDKs, with the SDK reference updated to match.

  • Sessions persist across external pages

    Sessions persist when you return to SignalVault from an external page — Stripe Checkout, an email verification link, or a link from the documentation. If a subscription or verification did not go through between 3 September and 1 October, it should work now.

  • Email verification page

    The page confirms when you are already signed in and only need to click the link we sent.

  • Reminders for unconfirmed signups

    Signups that have not confirmed their email receive at most two reminders, and unconfirmed accounts are removed after 30 days.

v0.13.3

Starter environments and integration fixes

Improved

  • Proxy base URL includes the api subdomain

    The proxy base URL shown in Settings and in the setup guide includes the api. subdomain. If you configured an integration before 27 September, check your base URL — it should read https://api.signalvault.io/proxy/openai/v1.

  • A new link for an expired verification

    An expired verification link offers to send a new one.

  • Rebuilt homepage
  • Typography and mobile navigation

    Typography is refreshed, and the mobile navigation menu collapses on small screens.

  • The setup guide can be reopened

    Reopen it from your app dashboard after you dismiss it.

v0.13.2

Trial and onboarding fixes

Improved

  • Development and staging keys during the trial

    Trial apps can create development and staging API keys, so you can evaluate SignalVault locally before pointing production traffic at it.

v0.13.1

Security patch

Improved

  • Uptime history on the status page

    The status page links to live uptime history.

v0.13.0

Reliability

Improved

  • Recoverable delivery jobs

    Failed delivery jobs are detected and recoverable without manual intervention.

v0.12.0

Security and dashboard improvements

Improved

  • Session handling

    Session handling and authentication are consistent across all dashboard views.

  • Email verification

    The email verification flow recovers from delivery failures.

v0.9.0

Launch hardening

Improved

  • Event lists and analytics

    Paging on event lists, 7-day activity counts on app cards, and analytics that refresh automatically.

v0.8.0

Refreshed UI

Improved

  • Redesigned dashboard

    New sidebar navigation and improved mobile support.

  • Refreshed public pages

    Landing, pricing, blog and documentation pages are refreshed.

  • One visual design

    The same visual design throughout the app.

v0.6.0

Transparent proxy endpoint

Improved

  • Rate limiting per app

    Rate limits apply per app (60 requests per minute) rather than per IP.

v0.4.0

Email alerts and pricing

Improved

  • Subscribe from the pricing page

    Signed-in users can subscribe directly without leaving the page.