Skip to content

Everything we shipped. Dated and versioned.

One entry per release, across the scripts, the plugins and this site itself. Including the breaking changes and the things we got wrong.

Last shipped MagicDesk 3.4

The pace No roadmap theatre
15 releases
Published in the last twelve months, counted from today rather than rounded up to a nice number.
16 products
Scripts, plugins and the storefront. Every one of them has shipped something in this log.
6 months included
Every release of a product you own, published inside six months of your payment, at no further cost.

What that window covers is set out in the licence . Your copy of the source is yours either way — what closes is the window for new releases.

2026

11 releases

v3.4
Script

MagicDesk Model policies, set per workspace

Tenants on the same install no longer have to share one model configuration. An operator can decide which providers a workspace may reach, cap what it may spend, and leave the rest of the estate untouched.

Added
  • Per-workspace model allow-lists, with a fallback chain when a provider is unavailable.
  • Spend ceilings per workspace and per seat, enforced before the request leaves the queue.
  • An audit view showing which policy answered each completion.
Improved
  • Streaming responses now reconnect rather than restart when a socket drops mid-answer.
  • The tenant switcher loads in one query instead of one per workspace.
Fixed
  • Usage records could double-count a retried completion when the first attempt timed out after partial delivery.
v2.1
Security Plugin

Guardrails Injection screening rewritten

The old screen matched patterns, which meant it caught the phrasings we had seen and missed the ones we had not. It now classifies intent before a prompt reaches a tool-using agent, and refuses rather than sanitises when it is not sure.

Security
  • Instruction-override attempts embedded in retrieved documents are now screened, not just user input.
  • Tool calls are checked against the caller's own permissions rather than the agent's.
  • PII redaction covers structured payloads, so an address inside a JSON tool result is masked like one in prose.
Improved
  • Screening runs in parallel with retrieval, which took the added latency from roughly 300ms to under 40ms.
Fixed
  • A moderation failure was logged and swallowed instead of blocking the response. It now fails closed.
v2.0
Breaking Script

AgentForge Durable runs, resumable from any step

An agent run is now a record rather than a request. It survives a deploy, a worker restart and a provider outage, and picks up at the step it was on instead of starting the whole chain again at your expense.

Breaking
  • Agents are defined as classes rather than closures. The upgrade guide ships with a command that converts existing definitions.
  • The `agent_traces` table is replaced by `agent_runs` and `agent_steps`. The migration copies what it can and leaves the old table in place.
Added
  • Run and step tables with full input, output and token accounting on each step.
  • Human-in-the-loop approvals that hold a run open for days without holding a worker.
  • A replay console: re-run any step against a new prompt or model and diff the two outcomes.
Improved
  • Retries use the provider's own backoff headers instead of a fixed schedule.
v2026.6
Platform

Berkine platform Licences, domains and updates on one page

Buyers were asking us which domains a key was registered against, which is a question the site should have been answering itself. Purchases now show the tier, the registered hosts and the date support and updates run to, per licence.

Added
  • Domain registration from the buyer area: add a production, staging and development host per licence.
  • A support window on every licence, so nobody has to work it out from an invoice date.
  • Support threads can be attached to a licence, arriving with the tier and version already on them.
Improved
  • Licence keys are issued the moment an order is marked paid rather than on the next scheduler run.
v1.9
Script

VectorBase Hybrid search you can tune without a deploy

Retrieval quality is settings work, not code work, and it was living in code. Weighting, chunk sizes and reranking now sit in the admin UI where the person who can judge the answers can also change them.

Added
  • Keyword and vector weighting exposed as a setting, with a side-by-side preview of both result sets.
  • Reranking as an optional second pass, priced and timed on the same screen.
  • Chunking profiles per collection: contracts and chat logs no longer have to be split the same way.
Improved
  • Ingestion is incremental. Reindexing a 40,000-document collection went from hours to minutes.
Fixed
  • Documents deleted at source stayed searchable until the next full reindex.
v3.2
Plugin

Model Router Budget-aware routing

Failover kept requests alive; it did not keep them affordable. The router now knows what each provider costs and what is left of the month, and picks accordingly rather than always reaching for the strongest model.

Added
  • Cost and latency budgets per route, with a cheaper model chosen as a budget nears its ceiling.
  • Local models as first-class targets alongside the hosted providers.
Improved
  • Health checks are passive, read from real traffic, so a cold provider is not marked down by a probe.
  • Streaming failover mid-response no longer discards the tokens already delivered.
Fixed
  • A provider returning a 429 with no retry header was retried immediately instead of being stood down.
v1.6
Script

VisionKit Video, on the same pipeline as stills

The image pipeline was already queue-backed and scalable. Video now runs through the same one instead of a second stack beside it, which means one set of workers, one set of limits and one place to watch.

Added
  • Frame-interpolated video generation and upscaling, resumable per segment.
  • Signed, expiring URLs for generated media, served from object storage rather than the app.
Improved
  • Background removal is roughly 4x faster on CPU-only hosts, which is what most buyers deploy on.
  • Failed jobs keep their partial output for inspection instead of deleting it.
v1.4
Script

SupportMind Drafts that cite what they read

An AI draft is only useful if the agent sending it can check it in seconds. Every draft now carries the passages it was built from, and escalation hands a human the thread with those citations intact.

Added
  • Inline citations on every drafted reply, linked to the source document and section.
  • Confidence thresholds per queue: below the line, the draft is held for review rather than sent.
Improved
  • Escalation carries the full context, so a human is not reading the conversation cold.
  • Doc ingestion follows sitemaps, which removed most of the manual URL entry on setup.
Fixed
  • Threads merged by an agent lost the original ticket reference in notification emails.
v2.4
Plugin

Usage Meter Caps that fail closed

A soft cap that only warns is a billing surprise with extra steps. Hard caps now stop work at the boundary, and the boundary is checked when a job is picked up rather than when it was queued.

Added
  • Hard caps per tenant, per seat and per feature, enforced at dequeue.
  • Stripe usage records reconciled nightly, with a report of anything that did not match.
Improved
  • Soft alerts fire at 50, 80 and 95 per cent instead of only at the limit.
Fixed
  • Cached quota counters could drift after a failed transaction, letting a tenant over-spend by a few requests.
v1.5
Script

VoiceLine Diarisation in realtime, on one socket

Transcription and speaker separation were two passes, which meant the second one arrived after the conversation had moved on. Both now stream over a single transport, labelled as they go.

Added
  • Live speaker labels, corrected retroactively as more audio arrives.
  • Word-level timestamps on the transcript, for clipping and captioning.
Improved
  • Reconnection resumes from the last acknowledged chunk rather than the start of the stream.
  • Text-to-speech voices are cached per tenant, cutting first-byte latency to about 200ms.
v2.2
Script

PromptStudio Promote a winner without a deploy

Prompts change more often than code does, and shipping one through a release pipeline made experiments cost a deploy each. A tested prompt can now be promoted from the UI, with the version it replaced kept for rollback.

Added
  • A/B splits with per-variant cost, latency and rating, and a promote button on the winner.
  • Diffs between any two prompt versions, including the model and parameters they ran with.
Improved
  • Versions are immutable once used in production, so a trace always describes what actually ran.
Fixed
  • Rolling back a prompt left the previous variant assignment on active sessions.

2025

7 releases

v1.3
Plugin

Eval Runner Golden sets on every pull request

Regressions in prompt behaviour were being found by customers. Evals now run in CI against a fixed golden set and fail the build on a drop, so they are found by whoever wrote the change.

Added
  • A GitHub Action that posts a pass, fail and drift summary on the pull request.
  • Recorded provider responses, so a suite can run without spending tokens.
Improved
  • Suites run in parallel, taking a 400-case set from about 12 minutes to under 3.
v1.7
Script

InsightBoard Margin per feature, not just token spend

Knowing what the month cost is not the same as knowing which feature spent it. Costs are now attributed to the feature that incurred them and set against what that feature earns.

Added
  • Cost attribution per feature, per tenant and per seat, with margin shown against plan revenue.
  • Scheduled exports to CSV and to a warehouse table, for finance teams that live elsewhere.
Improved
  • Provider price changes are versioned, so last quarter is still costed at last quarter's rates.
Fixed
  • Charts read the browser timezone while totals read the server's, which put spend in the wrong day either side of midnight.
v2.1
Script

DeployPilot Releases with a rollback that works

Zero downtime is easy to claim and easy to lose to a bad migration. Releases are now atomic, health-gated and reversible, and the rollback path is exercised on every deploy rather than trusted.

Added
  • Health-gated cutover: a release only takes traffic once the new containers answer.
  • One-command rollback to the previous release, including queue workers and the scheduler.
Improved
  • Migrations run before cutover and are checked for destructive statements first.
  • Provisioning is idempotent, so re-running it on a live box changes only what has drifted.
v1.4
Plugin

Edge Cache A semantic cache with a staleness budget

Caching completions saves real money and, done carelessly, answers last month's question. Entries now carry a similarity threshold and a staleness budget per route, and anything personalised is excluded by default.

Added
  • Per-route similarity thresholds, with a hit-rate and saving report for each.
  • Automatic exclusion of responses built from tenant-specific retrieval.
Improved
  • Invalidation follows the source documents, so editing a doc clears the answers drawn from it.
Fixed
  • A cache hit did not record usage, which understated spend reports by the amount it saved.
v2025.9
Platform

Berkine platform Checkout, on three gateways

Buying used to end in an invoice email. It now ends in a licence key, through whichever of Stripe, PayPal or Coinbase Commerce an operator has switched on, with webhooks doing the confirming rather than the browser.

Added
  • Stripe, PayPal and Coinbase Commerce, configured from the admin area rather than the environment file.
  • Signature-verified webhooks per provider, idempotent on replay.
  • A guest basket that survives sign-in, so nobody rebuilds an order after logging in.
Improved
  • Prices are resolved server-side from the catalogue at checkout, never taken from the request.
v1.6
Plugin

Team Spaces An audit trail worth reading

Every AI action was already logged. It was logged in a form only we could read. The trail is now a screen an administrator can search, filter and export when somebody asks who did what.

Added
  • Searchable audit log covering prompts, tool calls, exports and permission changes.
  • Invitations with scoped roles, expiring links and a record of who granted what.
Improved
  • Role checks are policy-based throughout, so a custom role needs no template edits.
v3.0
Breaking Script

MagicDesk Rebuilt on Laravel 13 and Livewire 4

A full rebuild rather than an upgrade: the tenancy layer, the billing layer and the chat surface were all carrying decisions made three years earlier. The result is a smaller codebase that starts faster and is considerably easier to read.

Breaking
  • PHP 8.4 and Laravel 13 are required. The 2.x branch continues to receive security fixes for twelve months.
  • Tenant resolution moved to a middleware group; custom resolvers need re-registering, as the upgrade guide sets out.
Added
  • Multi-tenant provisioning with per-tenant database or shared-schema modes.
  • Stripe subscription billing with seats, usage records and dunning included.
Improved
  • First paint on the dashboard dropped by around 60 per cent after the Livewire 4 migration.
  • The test suite runs in parallel and ships with the product, not just with our repository.
Ship notes Monthly, and only when something ships

Nothing here is a roadmap.

We do not publish what we intend to build, because intentions are not something you can buy. This page only ever gets longer after the work is done.