Skip to content
Cowliss is in beta: features and pricing may change.

Changelog

To upgrade a project: npm install --save-dev @cowliss/cli@latest.

What changed in each version of @cowliss/cli after 0.16.0, newest first. Earlier versions are listed on npm.

  • One MCP client table, and the marketing site readable by agents
  • Use with your agent on every entity page, MCP setup per client
  • A sendWebhook step names its webhook with webhook
  • A refused call keeps its validation issues
  • emailTrait names the trait-only email reader
  • A cow test scenario names its trigger’s properties
  • A refused push names each failing resource and field
  • cow init’s example sends from the org’s verified domain
  • A confirmed event-list conflict survives other app edits
  • Enrollment status answers none before any enrollment has run
  • Validation issues name resources on the push routes only
  • Apps: An app may name the trait that holds an external unsubscribe URL
  • An external unsubscribe URL rides normalized and within a header
  • Write the email footer in the Brand’s language, with room under it
  • Domains: Exact-string claims and DNS takeover of a held domain
  • Every command’s help lists –org and the other global flags
  • One login covers several organizations
  • The OpenAPI document carries the lockstep package version
  • A confirmed conflict names what it accepts
  • Validate Liquid templates at read and drop the guest layer
  • A push is one transaction over inline resources
  • A source flag on every resource and the Liquid template version
  • Dashboard writes events, purposes and segments; Liquid templates read-only
  • Blueprints ship Liquid HTML emails
  • events, purposes and segments writable over the API
  • Render Liquid templates
  • A Liquid body is stored without its edge newlines
  • The code-pushed prompt stops naming cow build
  • A Liquid or doc template gets the leave links it mentions
  • Partner API, plan override, suspend and purgeOrg (ADR 0039)
  • Close the partner API review findings (ADR 0039)
  • cow status says an automation, not a automation
  • Automations are JSON definitions
  • Rename journeys to automations
  • Agent prompts write automations as JSON definitions
  • emails/*.md and *.maily.json doc templates
  • Doc templates beside module templates
  • Automation steps and run mapping
  • automations.create and definition updates
  • Automation definitions and a pure interpreter
  • A run’s profile read belongs to the step that names the profile
  • Cap what a stored source may unpack to
  • Cap automation rule size and depth, drop json-logic’s log
  • cow pull restores the newest push alone
  • Accept a Clerk OAuth access token as a third credential
  • The contract-driven MCP server as a published @cowliss/mcp
  • Review fixes: standards docs, generated MCP changelog, constants in the route
  • A journey key is unique per app, and every key read names its app
  • Review fixes and close effort 45
  • cow plan refuses –prune for a caller who may not prune
  • Broadcasts: A doc preview takes a header
  • Journeys: Last run and emails sent in 30 days on journey stats
  • Broadcasts: Markdown out and in, and a design prompt for an agent
  • Broadcasts: A header per broadcast, logo and name, name, logo or none
  • Broadcasts: One starter email with demo blocks, no template select
  • Overview: The org’s last 30 days on one route, in the CLI, MCP and Home
  • A Broadcasts card on Home, one row per list across apps
  • cow init writes an example journey and an AGENTS.md
  • Agent prompts ask for a journey, and a journey task prompt
  • Broadcasts: Subject optional until send, every test send says [test]
  • Tool titles, read-only and destructive hints, server instructions
  • Editor commands reach the live editor, and Edit source replaces the paste menu
  • Journeys: Journey stats say lastStartedAt, not lastRunAt
  • Lists: Subscribers show the address a send would use
  • Sends fall back to the newest email identifier
  • Dashboard: Signup form prompt and preview, how to send with a new key
  • Domains: Download the DNS records as a zone file or CSV, copy relative names
  • Domains: Make DNS names relative to the zone, keep the DMARC row out of imports
  • Apps: A Brand tab for the business, look, sender and language
  • Subscribe: Brand and translate the confirm email and hosted pages
  • Brand: Fit the logo into a 200x64 box from its measured size
  • Broadcasts: Email branding label, editor R2 image upload, footer tooltip and template picker
  • Brand: Apply the review of the Brand effort
  • cow apps logo upload reads –file and checks it before sending
  • Broadcasts: Announcement starter template, clearer unset colour swatches
  • Apps: Upload a broadcast logo from the look dialog
  • Journeys: Throttle and meter api.restart, cap journeys per org
  • Broadcasts: Fresh blank template doc, https-only logo url, announcement button
  • Spam strikes pause an org on one 1h/4h/16h/64h ladder
  • Score every email with Rspamd after render, skip on reject
  • Send a multipart form body as FormData
  • Broadcasts: Open tracking and real broadcast stats
  • Broadcasts: Stats contract with the row’s counts
  • Broadcasts: Fan-out workflow, schedule, cancel and credit pre-flight
  • markdownToMaily emits Maily 2 docs
  • Broadcasts from markdown, preview, show, and MCP tools
  • Markdown to Maily, docHashOf, composer url, apps look
  • Broadcasts: Render with Maily 2.0.0-beta.7
  • Broadcasts: drafts, Maily render, app look and default sender
  • Subscribe: Hosted signup page, snippet and double opt-in
  • Lists: Csv import into a list
  • Lists: Dashboard-created lists and the subscriber read model
  • Broadcasts: Reserve credit across sends, claim recipients, tidy stats
  • Lists: A CSV import never re-subscribes someone who unsubscribed
  • Subscribe: One confirm email per address, none while sending is paused
  • Broadcasts: Review fixes from the effort 38 review
  • Delete the catalog, violations, strict mode and the held queue
  • App setup prompt, cow.json and named .env builders
  • App health names its .env source, deliveries stats narrow to one app
  • The user page’s identify call and debug prompt builders
  • A user’s timeline, and executions follow a merge
  • Deliveries: Daily outcome split on deliveries stats, per-app split on event stats
  • The event page’s debug prompt builder
  • What an event caused and the user’s events around it
  • cow status prints the app’s health checks first
  • Apps: App health endpoints with six checks and agent prompts
  • Events: Event names per app against the cow.json list
  • Record each key’s use per app and the calling client on events
  • Events in cow.json, stored per app on push
  • Users: List rows carry last event, live journeys and last delivery
  • The event page names a key past the first page of keys
  • cow status prints the cow.json lines for new unlisted event names
  • Keep the key secret out of the Generate key agent prompt
  • Events: System names count as listed in cow.json
  • Spend past the allowance draws the wallet down for good
  • App and sending-domain limits, and the root-domain warning
  • Subscribe to Plus, mirror the subscription, and meter by plan
  • Plan constants, plan_limit, meta warnings and root-domain helper
  • Emails: Test sends with test: true and reserved test addresses
  • A half-typed domain is not taken for a root
  • cow.templates.preview renders a template with your own props
  • emails.send takes an idempotencyKey and creates the person it emails
  • cow.preferences.get and set, the hosted preferences page as data

No user-facing changes.

  • A hosted email preferences page, linked from every footer and from the app
  • Code an older CLI pushed says when it stops running
  • /v1/protocols says whether each guest protocol has drained
  • The page after an unsubscribe asks, optionally, why
  • An app can carry a public name and a return URL for its unsubscribe pages
  • The unsubscribe page leads with Keep me subscribed, and the page after it can undo
  • cow test passes a project with no journeys
  • The API URL examples name no localhost origin, so the bundle passes check:packages
  • An email declares its purpose in place of a send class
  • Consent: A declared purpose belongs to the app that declares it
  • Build the domain prompt as a task with a DNS provider
  • Build app prompts as tasks with a plain-language summary
  • Emails: cow.emails.send can address a profile instead of an address
  • Emails: Footer offers leaving one purpose or everything, and templates get unsubscribeAllUrl
  • Consent: A granted purpose turns its root on, and a revoked root turns off its names
  • cow login keeps one session per API URL instead of replacing the last one
  • Two apps can each push a template with the same key
  • An outdated cow says so, with the upgrade command
  • A changelog in each package and on the docs site
  • cow test runs every scenario when no journey is named
  • Search executions, the review queue and the credential keys with ?q
  • Add failures.stats and a failures card on the overview
  • Search the delivery log and fold its rarer filters into a popover
  • Search the delivery log by recipient
  • List only a family’s working keys with status=active
  • Add per-app delivery stats
  • Count an app’s journeys and templates
  • cow push links each template to its page under the app that pushed it
  • Consent: Read a developer’s platform profile in the app the platform writes to
  • Store nothing when cow push is handed the tree the app last pushed
  • Cancel a pruned journey’s runs even when none were live at the prompt
  • Refuse cow push –prune unless an admin is signed in
  • Accept a backfill older than the retention window
  • Require a key name of at least 3 characters