Vocion 8.0: one place for when, and a Marketing app
Vocion 8.0 puts every schedule and event in automations, on a named clock, and sends a mission's result when its check finishes. The new Marketing app runs Google Ads with an agent, and every spend change waits for a person.
Status: shipped. #1454 and #1453, cut as v8.0.0. One migration (0220) and a manifest codemod. This is a major version: read Upgrading to 8.0 before you pin it.
One place for when
A schedule or an event now lives in one place: an automation. A mission says what it is for and where its result goes. It no longer carries a schedule of its own.
# automations/marketing-daily-update.yaml
when:
schedule: '30 6 * * 1-5'
timezone: workspace # or an IANA zone, e.g. America/Los_Angeles
do:
checkMission: daily-marketing-update
- Schedules read on a named clock.
timezonetakes a zone orworkspace(the workspace's owndefaults.timezone). A 6 update stays at 6 after daylight saving changes. Before 8.0 every schedule read in UTC and moved an hour twice a year. - No check fires twice. A mission's own schedule used to fire alongside an automation that checked the same mission. We found it in 17 places in Vocion's own plugins and templates. Each now fires once.
- Every scheduled run is visible and guarded. A mission's schedule used to start runs on its own: no run log, no overlap guard, no hold while it waited on you. Every fire now goes through an automation, so it gets all of those, and the Automations page shows the next run.
Results go out when the work is done
A mission names where its result goes:
# missions/daily-marketing-update.yaml
deliver:
email: true # the workspace's accountable person, or a list of addresses
The briefing a check published is mailed when that check finishes. A check that published nothing sends nothing. A check that failed sends a short note with the reason and a link to the run, never an older briefing under today's subject. Before 8.0 a second automation mailed the briefing at a fixed time after the first, so a slow or failed check sent yesterday's.
Wake up when something happens
An automation can start from an event instead of a clock. The Marketing app below runs a light guard every four hours. It uses no model and raises three events:
ads.ad_limited: Google disapproved or limited an ad.ads.pacing_off: spend is well under or over the daily budget.ads.first_conversion: a new campaign records its first conversion.
Each rings once. An automation on those events has the Marketing lead say what happened in three lines and propose the fix as a card for you to approve.
A Marketing app
Marketing runs paid search with an agent (#1453). Connect Google Ads with one Google login.
- Campaigns, with spend, clicks, CTR, cost per click and conversions over 7 and 30 days, and a page per campaign with its keywords, ads and Google's review status.
- Search terms, where Exclude and Add keyword are one tap.
- A daily update every weekday morning, on the Briefings page and by email: what was spent and what it bought, wasted searches, ads Google limited, what waits on you, and one recommendation. A shorter summary comes on Saturday.
- Every change waits for you. Budgets, negatives, keywords, ad text, pausing and new campaigns are proposals in Review. Google checks each change before it is applied, the result is read back, and each one can be undone.
Google retired Ads API developer tokens in September 2026, and the connector no longer needs one. See Marketing.
Also since 7.4
- Charts that read well on a phone. One chart engine draws charts in chat and in documents. It picks horizontal bars for long names, splits a waterfall whose small steps would disappear, and puts values on the bars. The agent sees the chart it drew and can redraw it once (#1443, #1451, #1452).
- One pane for everything you open. Artifacts, records, runs and background work open in the same side pane. On a phone it is a drawer with a tab for each open item, and it folds to a bar above the composer (#1446).
- "What do I owe on Alliant?" reads everything open on an account in one pass: drafts approved but not sent, items in Review from any agent, open follow-ups, the newest decks and the last call's next steps (#1434).
- Chat works the Review queue. Ask it to clear decisions older than a week and it raises one card with the count; nothing is declined until you approve (#1414, #1435).
- A client call drafts its own follow-up, one card per call (#1419).
Upgrading to 8.0
What breaks, and what happens if you do nothing:
| Was | Is | If you do nothing |
|---|---|---|
workspace.yaml version: 1 | version: 2 | Version 1 loads through 8.x with warnings. It is removed in 9.0. |
A mission's schedule: | An automation with when.schedule and do.checkMission | In a version-1 workspace it runs as the automation <mission>-check, in UTC. In version 2 it is an error. |
| Every schedule read in UTC | Read in when.timezone, else the workspace's zone | Version-1 workspaces keep UTC, so nothing moves. |
| A report mail timed after a check | The mission's deliver: | The timed mail still sends, and says when its briefing is not new. |
- Deploy 8.0.0. Migration
0220runs with the deploy. It backs up every schedule, pins the ones with no time zone to UTC, and moves each mission schedule to an automation. - Run
workspace:applyfor each workspace right after the deploy. - Move each workspace repo to version 2 with the codemod. It shows a diff first, and a second run changes nothing:
npm run migrate:automations -w @vocion/core -- path/to/workspace # the diff
npm run migrate:automations -w @vocion/core -- path/to/workspace --write # apply it
npm run migrate:automations -w @vocion/core -- path/to/workspace --write --localize # move simple schedules onto the workspace's clock
Then run workspace:check and apply. To roll back, deploy your last 7.x pin and apply; the upgrade guide in the repository has the SQL that restores the backed-up schedules. The runner image line is now 8.x. See Missions, workflows and automations and Release lines.