Repository navigation
v0.15.0
This release closes the gaps ClawHub's security audit of the portage-buy skill found, hardens the opt-in decision check, and adds a live one-store search and two read-only skills.
- Security: a checkout mismatch always stops the purchase.
buyused to stop on a checkout that didn't match the request (item dropped, another quantity, another unit price) only underPORTAGE_ABORT_ON_CHECKOUT_MISMATCH, so a real--yesrun could pay for the wrong checkout and reportpurchased. Every mismatch on a real run now ends incheckout_mismatchbefore the payment token, policy and completion. There is no opt-out: that variable is deprecated and ignored.- Extra lines count. A priced line nobody asked for (an upsell, "shipping protection", a second copy, or something already in a WebMCP store's cart) is a mismatch. A line that costs nothing is allowed. A checkout in another currency than the catalog's price is a mismatch too.
- WebMCP hand-offs too. A mismatched cart on a Shopify-style page stops before
proceed_to_checkoutand before autofill, with the store's/cartpage ascheckout_url. - Quotes. A
--quoterun's cap now applies before every WebMCP hand-off, and a quote with no total refuses (quote_changed) instead of buying uncapped. - A
--dry-runkeeps itsdry_runoutcome and now carriescheckout_mismatch: truewhen a real run would stop.
- portage-cli 0.12.0.
- Decision check hardened. The state sent to the backend (Jev) is built field by field from an allowlist: the request, the approved quote, and the checkout's lines, totals, discounts and shipping option. Never the payment token, the address, the buyer's name, phone or email, links, discount codes or environment values. The question compares the checkout against the approved quote.
- Runs before every WebMCP hand-off, preset or not, after the quote cap and the mismatch stop. A hold reports
low_confidencewith the/cartpage ascheckout_url, and nothing is handed to the checkout. No backend enabled: unchanged. portage find --store URL --query Q [--max-price N]. Searches one store's catalogue live, skipping the search backends and retailer sources. It is what the skills use to re-check an index hit before quoting a price or stock.- Keeps
portage-ucp~> 0.11.
- portage-ucp-decision 0.1.2. A backend answer that isn't a probability (below 0, above 1, NaN, Infinity) now raises
BackendError, so the purchase is held. Before, an answer above 1 cleared any threshold. Install it withgem install portage-ucp-decisionif you use the check. buyplugin 0.10.0.- New
shop-researchskill, for questions with no purchase in mind: what something costs, where to get it, whether it's in stock, whether Portage can buy from a store, what you ordered. It runs only read-only commands and never invents store details. buyhas narrower triggers. Its description covers shopping, buying and ordering on your behalf, not general questions about prices or products, and points lookups toshop-research. Each OpenClaw env var says you set it yourself and the agent never reads or prints it.- Describes the hardened checks: the mismatch stop, the allowlisted decision check, and
find --storere-checks. Those needportage-cli0.12.0, and the older-install fallbacks stay. The minimumportage-clistays 0.9.0.
- New
shop-via-ucpand the newbrowse-via-ucpskill.shop-via-ucpis now for completing a purchase and gains a guardrail: never pay for a checkout that differs from what you approved. The new read-onlybrowse-via-ucpreads a store's manifest and searches its catalogue, and hands over toshop-via-ucpto buy.
No other gem changed. The docs-only notes in portage-ucp-client and portage-ucp-webmcp stay unreleased. The ClawHub listing is published separately, at buy 0.10.0.