Releases: makkr-studio/pattern
Release list
Pattern v0.4.0
Pattern 0.4.0 turns the framework's introspection — a self-describing op catalog, a validator with located errors, event-sourced run traces — into things that author and explain workflows for you.
✦ Meet Buddy
A chat dock inside the editor: describe what you want, and Buddy drafts the workflow — grounded in your app's own handbook and op catalog, validated before you ever see it — then applies it to your open canvas as an ordinary, undoable edit. It debugs failed runs straight from their traces (one-click "why did this fail?"), remembers the conversation per workflow, and — naturally — Buddy's own pipeline is a Pattern workflow you can open and reshape.
🔌 The control plane goes public
Buddy's ten pattern_* tools (search ops & docs, read/validate/save workflows, deploy, inspect runs) are ordinary tool workflows — served over MCP. HTTP mode is guarded by scoped, revocable API tokens (author ≠ deploy); pattern mcp serves stdio for local dev, so Claude Code or Cursor become Pattern authors the moment they open your project (.mcp.json ships in the scaffolds).
🧠 Vector search — and a chat that remembers you
@pattern-js/mod-vectors: embedding collections that declare their model alias and filterable fields, hybrid search (vector + keyword, RRF-fused), a driver SPI, and an admin page that is the whole RAG loop — paste, search, read the scores. On top of it, mod-chat grows cross-conversation, per-user memory with receipts: a visible remember tool, write-time reconciliation (contradictions supersede instead of piling up), and every memory linking to the exact run where it was learned — browsable, forgettable, admin → Chat → Memories.
📬 Inbound email
email.inbound triggers workflows per received message (svix-verified Resend webhook, attachments as blobs), and email.reply answers in-thread. Email your app; a three-node workflow answers.
🛠 And throughout
- Real user administration: invites as records (statuses, next path, revocation), disable/delete with last-admin guards, role editing,
PATTERN_PUBLIC_URLso emailed links are absolute anywhere. - Scaffolder DX: provider picks seed working model aliases — a fresh app answers
/rag/askthe moment your key lands in.env. - Core: any mod can ship trigger ops; mod load order can no longer break seeded workflows.
343 ops across the first-party mods (175 in core), one command to start:
npm create pattern@latest
Pattern v0.3.0
Pattern 0.3.0 — Agents, voice, sign-in & email. The whole loop, on the canvas.
This is the biggest Pattern release yet. 0.2 gave the framework its handbook; 0.3 gives it its superpowers: a native AI capability layer over 40+ providers, an agent loop that is Pattern code all the way down, a chat app that listens and talks back, real login methods, and transactional email — all of it visible, traceable, and rewireable in the admin, because in Pattern everything is a workflow.
Five new packages ship today: @pattern-js/mod-ai, @pattern-js/mod-auth-oidc, @pattern-js/mod-email, @pattern-js/mod-email-resend, and @pattern-js/mod-email-smtp.
To taste what that means in practice: an agent that calls a live weather tool, writes a Markdown email about it, and delivers it through Resend is nine nodes on one canvas — request → brief → agent → run → send → response, with the tool call showing up as a linked sub-run in the trace viewer.
🧠 mod-ai — every AI modality as an op
The new AI capability layer, built on the Vercel AI SDK's full provider catalog (40+ providers, lazy-loaded, the AI Gateway built in):
- Ops for every modality:
ai.text.generate/ai.text.stream,ai.object.generate(schema-validated structured output),ai.embed/ai.embed.many,ai.image.generate,ai.speech.generate,ai.transcribe, andai.video.generate. - Models are aliases, not hardcodes. An alias is an admin-configured instance — provider + model id + a vault- or env-sourced key — resolved by name at run time. Re-point
defaultin Settings → AI Providers and every workflow that uses it retargets instantly. No redeploys, no config hunts. - An AI Providers settings page in the admin: define aliases per modality, keys stay in the encrypted vault and are masked out of run samples.
- MCP in both directions:
ai.mcp.clientpulls tools from any remote MCP server (HTTP or stdio — paste a whole command line, it's tokenized for you) into a toolset value; theai.mcp.serverroute exposes your tool workflows to any MCP client. Your workflows become tools; other people's tools become nodes.
🤖 mod-agents — the agent loop is now Pattern code
The agent runtime was rebuilt from the ground up as a native loop — no external agents SDK underneath:
agents.agent/agents.run/agents.run.resume, on any provider viamod-ai. No model wired = the configured default alias.- Tools are workflows. A tool starts with
boundary.tool(name, description, JSON-Schema params — validated by the engine before your graph runs, so a hallucinated argument never reaches it) and ends withboundary.tool.return. Every call is a linked sub-run with sampled I/O in the admin. - Guardrails, human-in-the-loop approvals, history compaction — all graph nodes, all visible. Agent name and instructions are runtime inputs, so one agent definition can vary per request.
@pattern-js/mod-agents-openaiis retired:mod-agents+mod-aireplace it on every provider (see Breaking changes).
🎙️ Chat learns to listen and talk
The bundled chat app (mod-chat) had a full experience overhaul:
- Voice input — in-browser speech-to-text with Silero VAD and locally-served Whisper assets (no audio leaves the machine until you send), and spoken-style agent instructions on voice turns so replies read like speech.
- Voice output — text-to-speech playback, and a fullscreen WebGPU particle voice avatar (with a Canvas2D fallback) that breathes with the conversation.
- Per-turn model switcher backed by language-model aliases: pick a model for this message, the pinned default stays put.
- Multi-instance serving: one shared chat backend, many branded SPA instances — per-namespace agents by forking the turn pipeline alone; the most specific route wins.
- A three-way theme (light / dark / system), lucide icons, avatar polish, and image / transcribe / speech tools with conventional aliases.
🔐 Real sign-in: OIDC joins magic links
@pattern-js/mod-auth-oidc — authorization-code + PKCE against any OpenID Connect issuer (Google, Microsoft, Keycloak, …):
- ID tokens verified with
jose; sessions minted bymod-identity, same as magic links. - Several providers side by side — each gets its own routes, its own login button, its own state cookie (concurrent flows don't collide).
- Account linking is by verified email only (configurable), so an IdP can't take over an existing account with an unverified claim.
- Configured in code via a small app-local wrapper mod (
mods/oidc.mjs) — your providers are versioned with your app; only the client secret lives as a vault/env reference. - The login page renders every registered method, and every OIDC failure surfaces as a human-readable message.
✉️ Transactional email, in the box
@pattern-js/mod-email is the email contract; drivers plug into it:
- Accounts (provider + from + secret refs) managed under System → Email, with a real-send Test button. Driver field lists auto-generate the account form.
email.send— write the body once in Markdown and it renders to inline-styled HTML plus a plain-text alternative (a paragraph that is exactly one link becomes a button). Attachments from blobs, in-memory media, or literal files.email.deliver-token— the packaged delivery workflow: create thedefaultaccount and identity's sign-in links send themselves. Console fallback until then and on any failure — you are never locked out of your own app.- Two drivers ship today: Resend (plain fetch) and SMTP (nodemailer, pooled digest-keyed transports). Writing a third is a small package.
🧰 create-pattern — more choices, zero staleness
- Sign-in methods multiselect: magic link, OIDC, or both (
--oidc,--magic-link/--no-magic-link). OIDC scaffolds the wrapper mod +.envhints. - Sign-in link delivery choice: console, Resend, or SMTP (
--email). - New
studio-aimodpack — the visual studio + the full AI op catalog, no agent loop — and a--providerspicker for the AI packs. --help, validated flag values, and notes instead of silence when a flag doesn't apply to your selection.- Version-proof scaffolds: every generated project derives its
@pattern-js/*ranges from the CLI's own version, so a fresh app always resolves the mods published alongside thecreate-patternthat made it. Templates can never go stale across a minor again.
📚 Docs, admin & site
- Four new chapters (OIDC login, Email, Resend, SMTP), identity docs covering both login methods and packaged delivery, and getting-started documenting every scaffold dimension.
- A focused catalog: plumbing routes can mark themselves
internal— chat's CRUD rows now hide behind the "show internal" toggle, so the flagship pipelines stand out. The approval pipeline and MCP server gained descriptions and hand-laid layouts. - Honest numbers on the README and the site: 175 base ops (every single one with "when to use" prose) — over 300 with the first-party mods.
⚠️ Breaking changes
@pattern-js/mod-agents-openaiis retired. Replace it with@pattern-js/mod-agents+@pattern-js/mod-ai: the agent ops keep their shape, and models now come from anai.modelnode or a configured alias — on any provider, not just OpenAI.- 0.2.x scaffolds pin
^0.2.0, which semver-excludes 0.3.0. Bump your app's@pattern-js/*ranges to^0.3.0when upgrading (new scaffolds handle this automatically, forever).
🚀 Get started
npm create pattern@latest my-app
# pick a modpack — try `agent-chat` for the full agent + voice chat experience,
# or `studio-ai` for the visual studio + AI opsUpgrading an existing app: set every @pattern-js/* dependency to ^0.3.0, then npm install.
The full story, per area, is in the CHANGELOG.
By the numbers: 17 published packages (5 new) · 175 base ops, 300+ with first-party mods, 100% documented · 7 scaffold templates · 456 tests · one canvas.
Pattern v0.2.2
A pipeline and polish release. No functional changes to the published packages.
Changed
- The marketing site now deploys to Cloudflare Pages from CI:
main→ staging,
a release tag → production. This is the first tag to ship the production site
alongside the npm packages. - A more playful easter egg on the site, for anyone who remembers a certain
arcade button sequence.
Install
```
npm create pattern@latest
```
Pattern v0.2.1
A small maintenance release on top of the 0.2.0 public launch.
Fixes
- Docs handbook rooted at its mount. Handbook pages now resolve at the
intuitive/docs/getting-startedinstead of the doubled/docs/docs/....
Other mods' chapters keep their slug prefix. - LICENSE copyright corrected to Makkr Studio.
Install
npm create pattern@latest
Existing projects: bump @pattern-js/* (and create-pattern) to ^0.2.1.
Full notes: see CHANGELOG.md.