Repository navigation
Releases
Personal Assistant v0.25.0-rc.1
This release candidate adds the invoicing a remote VA does every month. PA prepares an invoice with exact totals, the next number and the due date, and holds it for the owner's yes. It then runs a month-end close over the books. It also fixes two problems the owner's own agent reported in daily use and works around a third.
- Invoice preparation (#259, for #255; run on lab stand-ins only, not yet on a live account).
invoiceactionpreparetakes the client, currency, issue date, lines and either a due date or payment terms, plus an optional reference, tax and category. It computes each line, the subtotal, the tax and the total in exact decimals, and gives the next reference in the owner's series and the due date. It writes nothing. The owner sees the draft; on the owner's yes PA sends it through the governed send path, or the owner sends it. PA records the receivable only once it has gone out, using the returnedrecord_args. - Month-end close (#261). One skill flow over the last month: the tax pack for that month (missing receipts, uncategorised spending, invoices unpaid at month end), open invoices and chases, renewals coming up, and the recurring invoices to prepare. Chases and recurring invoices are prepared and held, never sent; the rest is reported.
- Fixes from the owner's agent in daily use:
- Trip links (#264, for #256). An
action_upsertwhosesource_idis an existing trip ID now links the record to that trip. Before, the errand was saved but did not appear in the trip's next actions. Other source IDs never link; passtrip_idto link an errand. - Retiring old recommendations (#265, for #257). A Chief of Staff recommendation still unanswered more than 14 days after its review date leaves the radar list and is counted in
stale_recommendations. A new operation,recommendationswith actionretire, previews by default and retires on the owner's yes. Retiring records who retired it and when, and never invents an outcome. - A short hint instead of a 33 KB error (#266, for #258). Profile
rememberwith nestedfieldsused to hit Hermes' deferred tool-call validation, which echoes the wholepaschema, about 33 KB. That call now reaches PA, which answers with a flat-shape example of at most 600 characters and writes nothing. Other deferred-path misses still return the full schema until Hermes bounds that error (NousResearch/hermes-agent#155742).
- Trip links (#264, for #256). An
- A matched receipt counts once in the trip expense export (#268, for #267). This is the same pairing the tax pack and the monthly figures use (#246). Before, one purchase with both a card line and a receipt counted twice in the trip's totals.
- Lab:
PA's skills still stop every booking, payment, cancellation, share, send and invoice for the owner's yes.
The README install line stays on stable v0.11.0; this is a release candidate.
Personal Assistant v0.24.0-rc.1
This release candidate adds a job a remote VA is hired for: tracking the owner's contracts, subscriptions and licences, and raising each one in time to cancel or renegotiate. PA also notices when its timezone no longer matches where the owner is.
- Contracts, subscriptions and licences (#249, #254; #248 stays open for a live run). A renewal record may carry a notice period (
notice_days), auto-renewal, a counterparty and a cost (amount, currency, per month or year).- The last day to give notice,
decide_by, is the renewal date minus the notice period. The item surfaceslead_daysbefore that day, not before the renewal. Before, a 90-day notice with the default 30-day lead surfaced two months after the last day to cancel. - A yearly record whose notice deadline has passed surfaces with the missed notice named, and keeps this cycle's date until it passes.
next_actionwithradar: true, contracts: truegives the annual cost per currency in exact decimals (never mixed), how many records have no cost, and what renews in the next 30, 60 and 90 days, including records that have not surfaced yet.- The skill gives one keep / cancel / renegotiate decision per surfaced record, with the deadline and a recommendation. A record that is not due counts in the cost and the windows, and the skill keeps it out of the decisions. The skill drafts a notice only after the owner chooses and holds it for the owner's yes to the exact recipient and text; in the lab, PA still sometimes drafted in the review reply itself (noted on #248).
- The last day to give notice,
- PA notices when its timezone is out of date (#252, for #238). A new read-only radar item,
timezone_check, compares the stored timezone with the owner's recorded flights (the nearest landed or departing flight within 30 days) or a newhome_timezonepreference. Nothing is suggested in the air or between connecting legs, or when the zones share a UTC offset. For a flight marked landed in the last 48 hours, PA switches and tells the owner how to undo; otherwise it asks once. A "keep" is remembered per flight (timezone_kept). In the incident behind #238, the owner was home while PA still ran on an earlier trip's zone, so the daily brief came two hours early. - A matched receipt counts once in the monthly figures (#246, for #236). The monthly summary, its export and the weekly cash position now pair a card line with its forwarded receipt the way the tax pack does, so twelve months add up to the year.
- An owner's early chase time is an extra chase (#247, for #233). On minutes and invoice loops, an owner's time before the loop opens gets its own
owner_timestep. Day 2, day 5, day 10 and escalation keep their dates. - Fixes from the 0.23.0-rc.1 wave misses (#251). CoS skills say a page that would not open was not checked. A benchmark offer proposes one concrete slot and says when it was not checked against the calendar. Rideshare stops retrying a pickup or dropoff field after two resets and counts it as no fare shown.
- Lab: two new scenarios (#245, #250). s44: the year-end tax pack drafted for the owner's accountant and held. s45: the contracts review, then a cancellation notice drafted and held.
PA's skills still stop every booking, payment, cancellation, share and send for the owner's yes.
The README install line stays on stable v0.11.0; this is a release candidate.
Personal Assistant v0.23.0-rc.1
This release candidate brings two office jobs a remote VA is hired for: documents kept in the owner's own Google account, and a year-end pack for the owner's accountant. Routines also follow the owner home after a trip.
- Owner documents (#243; #156 stays open for a live run). A new flow in the
documents-adminskill for the owner's own Google account, through the profile'sgogCLI:- PA finds the owner's PA folder (it searches before creating one and asks if more than one matches) and names files by the owner's convention, else
YYYY-MM-DD Topic. - A budget sheet's total is a formula over the item cells, never a typed number, and PA reports only the value it read back from the sheet. An agenda doc is checked point by point against the text read back.
- Sharing a file and moving a CRM field are outward writes. Each needs its own exact-action prepare, the owner's yes to that exact action, one sealed call, a readback and a recorded result. No invitation email unless the owner asks. A CRM change goes only through a CRM integration the profile already has; with none, PA says so and stops.
- Lab scenario s43 tests this with stand-in Drive, Sheets, Docs and CRM tools that refuse a share or CRM change without a confirmed yes.
- PA finds the owner's PA folder (it searches before creating one and asks if more than one matches) and names files by the owner's convention, else
- A tax-season pack for the accountant (#237, for #235). New
financeactiontax_packfor a period of up to a year. It reads PA's ledger and changes nothing. Per currency: income and bills paid, by category and counterparty; expenses by category with refunds netted; net; invoices still open at the period's end; card lines with no receipt. It lists questions for the accountant: possible duplicates (listed, never merged), spending still uncategorised, missing receipts, invoices unpaid at the end, and more than one currency (PA never converts). A card line and a forwarded receipt for the same purchase count once. Withexport: trueit writes a private CSV and Markdown, with the monthly export's protections. Thefinance-adminskill offers a cover email to the accountant, held for the owner's yes, and never says what is deductible or owed. - Routines follow the owner's timezone after a trip (#241, for #238). An accepted routine used to store its own copy of the owner's timezone, and that copy won. So after a trip, the daily brief and the CoS routines kept running on the trip's clock, and changing the preference fixed nothing. Now a routine keeps its own zone only when the owner pinned it (
timezone_pinned: true); otherwise it follows the owner's preference. Hermes cron jobs created earlier keep their zone: re-accept those suggestions once. Trip watch now labels a departure in the flight's origin zone; quiet hours still follow the owner's zone. - Rideshare: a typical fare when the booking page shows none (#244). When the ride site still shows no fare for a later pickup, PA may give the typical fare from the provider's public route page, with the page's route, link, currency and any date it states, labelled as a typical fare and not a quote.
- Lab judge: a price split across two page nodes is one price (#240, for #239). Catch Table shows a deposit as "20,000" and "원" in separate text nodes. The judge's evidence now joins a number and its currency marker, so a figure PA read correctly is no longer judged against an unrelated line.
PA's skills still stop every booking, payment, share and send for the owner's yes.
The README install line, the catalog card and the launch post stay on stable v0.11.0; this is a release candidate.
Personal Assistant v0.22.0-rc.1
This release candidate makes PA easier to report problems against and safer to install, holds a chase draft for an explicit yes, and keeps an owner's early chase time. Its HeartBeat 2.0 chase now passes a live wake in the lab.
- Community kit (#225, Fixes #224).
- The shared bug form, which matches the other catalog plugins field for field, and a security policy (
SECURITY.md) with private reporting. - A
report-problemskill. When the owner reports a problem, PA routes anything security-related to the private form. Otherwise it gathers read-only diagnostics, searches existing issues, and drafts a report under the form's headings with no personal data. It files the report withghonly after an explicit yes to that exact draft.
- The shared bug form, which matches the other catalog plugins field for field, and a security policy (
- The install scan passes again, and CI checks it (#227, #230, Fixes #228). One line of the new skill made Hermes v0.22.2's install-time security scan rate the plugin high-risk, so installing main needed
--force. The line is reworded. Every PR now installs its commit with that scan on and no--force, as a user would. Catalog v0.11.0 and v0.21.0-rc.1 were never affected. - A held chase draft asks for the yes (#226). At the owner's chase time, the follow-through skill shows the exact text and recipient and asks whether to send it. Before, it showed the draft and said nothing was sent, but never asked. Nothing is sent without a yes to that exact text.
- An owner's early chase time counts on minutes and invoice loops (#232, Fixes #220). These loops start their ladder from a synthetic date: an action item's due date minus 2 days, or an invoice's payment due date. An owner's earlier "check with Avery on the 20th" was recorded but ignored. Now a time is ignored only if it falls before both the loop's opening and its recording. An early time folds into day 2, as other loops do; making it an extra chase is #233.
- Rideshare: a future pickup on the web (#234). For a later pickup, PA sets the date and time with the site's schedule control before looking for a fare. If no fare shows, it names what stopped it in the site's own words. A ride-now price is labelled as not for the requested time. In 0.21.0-rc.1, the one miss was an Uber route whose time step never completed, with no blocker named.
- Lab: the owner's chase time on a live HeartBeat 2.0 wake (#221, #223; #161 phase 2). A new live runner (P5) on real Hermes v0.22.2, HeartBeat 2.0 v0.2.0 and
gpt-6.1-sol, with loopback Telegram. The owner says "If Cedar Demo's signed contract hasn't arrived by HH:MM UTC, chase them, but show me the draft first". PA arms one wake for that minute, stays quiet until then, shows the held draft, asks for the yes, and sends nothing. 11 of 11 checks pass in both rounds. Claim classlocal_e2e_proof: not a live profile or real Telegram.
PA's skills still stop every booking, payment and send for the owner's yes.
The README install line, the catalog card and the launch post stay on stable v0.11.0; this is a release candidate.
Personal Assistant v0.21.0-rc.1
This release candidate gives the owner's own chase time a home in every open loop, and makes the lab test PA the way an assistant works: one continuous week, judged on what PA actually read.
- The owner's chase time (#217, closes #215). When the owner says "if it hasn't arrived by tomorrow morning, chase them", PA records that time as the loop's
chase_at, and the next chase comes due then, earlier or later than the day 2, 5 and 10 ladder. Before, the loop had no field for it. Models put the time in made-up fields that nothing read, andnext_actionput the chase on day 2.- The ladder steps that fall due by then (or else the next one) fold into one chase at the owner's time. A chase made at that time completes them once.
- Escalation never moves earlier. When the owner's time is after it, escalation comes a day after the owner's chase.
- With day 10 done or the loop escalated, an owner's "chase them once more" is one more chase.
- A scheduled check keys an owner's chase by its time, so it is never skipped as already delivered.
- Another nudge on a sent step gets its own id (#217). The ledger refuses to prepare a nudge whose send already completed. A second nudge on the same step now takes
:2,:3. - A moved meeting-minutes deadline starts a new chase ladder (#217). Re-saving minutes with a later or earlier due date clears that item's chase log and chase time, as restoring an item already does. A step chased on the old ladder no longer completes the new one, and a draft held for the old date no longer blocks the new day 5. A new timezone on the same date keeps the ladder.
- A wrong contacts call says what was wrong (#214). In the 0.20.0-rc.1 wave, s32 r002 sent an empty
fieldsobject, then nested every parameter underfields. Both times the error said only "invalid contacts action, name or country code", so the cleanup never ran. The error now names the keys dedupe takes, which are missing, and which known-mistake keys (such asfieldsorcountry_code) were not accepted. Whenfieldswas sent, it says to put the keys at the top level. It never repeats a value, or a key name outside that known list. - Lab: one continuous week (#216, Related #161). A persona's days run as one lab run in one home, on a shifted clock that PA and Hermes both read. PA carries its own ledger from day to day. The first week (w01: Cedar's contract, a "chase tomorrow morning" request on day 0, then "what needs me today?" on day 1) found #215.
- Lab: the judge sees what PA read (#219, closes #218). The lab's evidence for the judge now looks up figures PA read in the run's history files when the tool log missed them, matches currency codes such as "USD 149", and lists the page states PA read during the run. The four 0.20.0-rc.1 runs the judge failed for unsupported claims were the lab's evidence gaps. Re-judged, all four pass, while a genuine failure (s32 r002) still fails.
PA's skills still stop every booking, payment and send for the owner's yes.
The README install line, the catalog card and the launch post stay on stable v0.11.0; this is a release candidate.
Personal Assistant v0.20.0-rc.1
This release candidate fixes the misses found in the 0.19.0-rc.1 wave and its review. It also scores PA the way an owner would, with a stitched "fire-me week" per persona, and runs the call and errand scenarios in every release wave from now on.
- A plain calendar-setup offer (#204). When no calendar is connected, the weekly review offers setup outright. In the 0.19 rerun misses, PA said "Calendar setup requires a separate authorized step" where #187 asks for an offer.
- Content calendar by week (#207, #211).
- PA splits the window into seven-day weeks before recording any slot, counts each channel's slots per week, and replies with the calendar grouped by week, showing each week's count. In 0.19, s38 r003 planned three LinkedIn posts in one week and one in the next, then said every channel had two a week.
- No new slot goes at an hour that has already passed.
- Each slot keeps its source, kind and occurrence outside
fields, and PA never makes up anaction_id. In the 0.20 preview wave, one run did both, so its posts were not tied to the plan and a re-plan would have duplicated them. - PA cancels a slot by its listed
action_id.
- People matched by exact name first (#209, Fixes #60). A name lookup marks each row
exactorpartialand lists exact rows first. The two drafting skills use only the exact row and ask the owner when none, or more than one, is exact. Each SOP changelog note is capped at 200 characters, and only the last 10 notes are kept. - The ledger CLI refuses profile and evidence writes (#208, Fixes #65). The operator CLI could rewrite owner-memory and evidence rows that the
patool already protects. It now refuses, andlatest actionshides those rows. - A damaged install is reported as damaged (#210, Fixes #17). If the native plugin folder exists but its
plugin.yamlis missing or unreadable, the install probe reports it as invalid and proposes nothing. Before, it could fall back to a legacy manifest and propose a migration. - Lab checks (#204, #206).
- The app-only taxi handoff check reads the reply the owner closed on, and it accepts "cannot schedule … through".
- A slot PA cancelled is not counted as an extra post.
- An outcome table counts as separate outcomes.
- Each of these failed a run the judge had passed in the 0.19 wave.
- Fire-me week, stitched (#205, Related #161). Four personas (solo founder, executive, agency owner, family user) each get a five-day week of the lab scenarios they would meet. Week N strings together run N of each scenario. PA is kept if every run passes, or fired at the first failure, with the reason. These are separate lab sessions, not one continuous week; a continuous week comes next.
- Scorecard (#212).
- The simulated calls (s04–s08) count toward the phone area for making and taking calls only.
- The real-web change, cancel and failure runs (s10, s11) count toward errands for stopping before the commit.
- The multi-errand run (s12) counts toward travel, crediting no duty.
PA's skills still stop every booking, payment and send for the owner's yes.
The README install line, the catalog card and the launch post stay on stable v0.11.0; this is a release candidate.
Personal Assistant v0.19.0-rc.1
This release candidate finishes PA's follow-through role (#151). In a two-day lab scenario with no owner message, the HeartBeat 2.0 role surfaces an urgent decision and a due chase at waking hours, holds the chase for the owner's yes, and stays silent on a day with nothing due:
- Lab proof of the role (#196). A new scenario (s42) runs HeartBeat 2.0's role turns at simulated times, with a stand-in for its
pulsetool. - Wakes at waking hours (#198). A chase date wakes the role at 09:00 local, or when the owner's quiet hours end if that is later, instead of at midnight. A snooze or approval timeout keeps its exact time.
- Quiet when nothing is due (#198). The role notifies the owner only when they must see or decide something now; otherwise the result shows only on HeartBeat 2.0's desk.
- Status from the desk (#198). Asked for status, PA relays the role's last result, its next turn and the next due wake (skill text; no lab run exercises it yet).
- Two skill hints (#199). The tool is named plain
pa, intool_describetoo (a smoke run on Hermes v0.23.1 first asked for a name that does not exist). Role summaries stay under 280 characters, the most HeartBeat 2.0 accepts. - Fixes from the 0.18.0-rc.1 wave review (#195). In the lab, a hung browser lookup no longer drops later tool rows and a site that timed out counts as an honest stop. In PA, the end-of-day note lists recorded items only.
- Licence: Apache-2.0, with the LICENSE file in the release archive (#181).
- README: the demo on X, with the demo film under it (#197, #201).
The README install line, the catalog card and the launch post stay on stable v0.11.0; this is a release candidate.
Personal Assistant v0.18.0-rc.1
This release candidate fixes the s01 and s38 misses from the 0.17.0-rc.1 wave and the lab gap that hid the rest of the s30 step, plus one invoice gap found while testing it:
- Prices tied to the right item (#191). A price tied to a restaurant course must be that course's price. PA never presents its own sum of snack prices as a cart or verified subtotal. A stop such as a login page is named only from a page PA actually read.
- Content cadence counted before it is claimed (#191). PA counts each week's posts, the way the lab counts them, before it says the cadence is met.
- Invoice errors that say how to fix the call (#193). A wrongly shaped invoice call now gets the fields the action takes. Values are never echoed, and a key name is echoed only if PA already knows it. finance-admin shows the exact "mark paid" call.
- Lab: one malformed summary no longer hides a whole step (#192).
The README, the catalog card and the launch post stay on stable v0.11.0; this is a release candidate.
Personal Assistant v0.17.0-rc.1
This release candidate fixes one PA miss and one lab-detector gap from the 0.16.0-rc.1 wave:
- A plain calendar-setup offer (#187). With no calendar tool connected, the weekly review offers setup in plain words instead of mentioning it as a passive option (the 0.16 s16 misses).
- Lab: the handoff detector (#188) counts an "app-based" request flow, "does not allow advance reservations" and "cannot be scheduled" as honest handoffs (the 0.16 s01 taxi step).
The README, the catalog card and the launch post stay on stable v0.11.0; this is a release candidate.
Personal Assistant v0.16.0-rc.1
This release continues M6 (VA parity) with three more duties from the 9 November gap review:
- Priorities drive the brief. PA names the priority each overdue item threatens, the next blocked step and who is overloaded (#158, #176).
- Weekly customer and vendor report. A read-only report of volume, response time, recurring complaints and open items (#157, #177).
- Family admin. A held health appointment, a held household vendor request, and a year at a glance with gift ideas (#157, #178).
Also in this release:
- Follow-through. A task marked done but never confirmed always gets a held confirmation request (#185, the 0.15 s20 miss).
- README. A user-facing opening with the tested stable install line, the calendar's one standing exception, Troubleshooting and a bug and security route (#184).
The lab also gains: