Repository navigation
Releases: tomtom87/Portage
Release list
v0.20.0
Portage's Shopify MCP connector was scoring poorly on Glama's tool-documentation grader: every generated tool's description was just its bare namespaced identifier (e.g. dev.ucp.shopping.catalog#get_product), every parameter schema was empty, and no MCP annotations were set.
- portage-ucp 0.15.1.
- Fixed: generated MCP tools carry a real description, per-parameter description, and
readOnlyHint/destructiveHint/idempotentHintannotations. NewMcp::ToolMetadatasupplies this per action, sourced from the@param/@returndocs already onAdapter's methods; an action without an entry still falls back to the oldcapability#actionformat.Adapter, the wire format and every adapter gem are unchanged — this only changes what a calling agent reads intools/list. Patch-level.
- Fixed: generated MCP tools carry a real description, per-parameter description, and
Every other gem and both plugins are unchanged. Their portage-ucp constraints already allow 0.15.
v0.19.0
portage-ucp now speaks UCP 2026-08-25, the version live Shopify stores already serve. Before this, a strict 2026-08-25 client couldn't find our signing keys.
- portage-ucp 0.14.0.
- Breaking: the manifest puts
keys(a JWK Set) at the document root;ucp.signing_keysis gone. Anything that reads signing keys must readkeysinstead. Each key needs akid. - Breaking:
config.payment_handlersis now a Hash ofreverse-domain-key => [entry, ...], and each entry carries anid. The default is{}; an Array no longer works.config.servicesarrays still work. - Changed: the UCP version is 2026-08-25 in the manifest,
WireEnvelopeand theSchemaValidatordefault. Services, capabilities and payment handlers are keyed by reverse-domain name and carry dateversions, and the whole manifest validates against the 2026-08-25 business profile schema. - Changed:
FulfillmentOptionsendsdescriptionas an object rather than a bare string, as 2026-08-25 requires. - Removed: the vendored 2026-04-08 schemas.
portage-ucp-clientreads remote profiles without vendored schemas, so stores still serving 2026-04-08 keep working.
- Breaking: the manifest puts
Every other gem and both plugins are unchanged. Their portage-ucp constraints already allow 0.14.
v0.18.0
portage orders reconcile can now settle a checkout the shopper paid in their browser on four of the five adapter stores, and it works against native UCP stores again. A store that escalates its checkout can now go through require_approval too. None of the adapters' platform order lookups has been tried against a live store yet.
- portage-ucp 0.13.0.
- Added:
Support::CheckoutStatecan ask the platform about a checkout this process doesn't track. An adapter can define a privateplatform_checkout_order(checkout_id)that returns the order its platform placed from that checkout. When there's no record of the checkout in this process, the status is thencompleted,#checkout_orderreturns the order confirmation, and#checkout_from_platform_orderrebuilds the checkout from the order if the platform has already dropped the cart. If there's no order, no hook or a failed lookup, the status staysincomplete, as before. TheAdaptercontract is unchanged.
- Added:
- Adapter gems: a checkout paid in the browser reads as
completedfrom a new process. Each one now requiresportage-ucp~> 0.13.portage-ucp-bigcommerce0.2.1: v2 orders filtered bycart_id, paid statuses only.portage-ucp-magento0.2.1: guest cart →quote_id→ admin order search,processing,completeorclosedonly. Needsadmin_token. A cart that 404s with no order now returns nil instead of raisingApiError.portage-ucp-wix0.2.1: Search Orders oncheckoutId,status: APPROVEDonly.portage-ucp-shopify0.6.1: Adminorders(query: "cart_token:…"). Needs the Admin token.- WooCommerce can't do this. When the shopper pays in the browser, the cart moves into a new session, and nothing on the order points back to it. Those hand-offs stay pending, so
portage-ucp-woocommercestays at 0.3.0.
- portage-cli 0.13.1.
- Fix:
orders reconcileandbuy --waitcan read a native UCP checkout again. Reconcile left out the agent profile, so every real UCP store rejected the call and a pending hand-off never settled. It now sends the same profilebuydoes. - Fix: a store that escalates its checkout can be approved and reconciled under
require_approval. Before, a dry run reported it asrequires_escalationand saved no quote, so there was nothing to approve. Now a dry run reportsdry_runwithhandoff_expected: true. The gated run then returnsneeds_approval, and the hand-off from the approved run is recorded for reconcile. - Keeps
portage-ucp~> 0.11.
- Fix:
Known gaps: a checkout rebuilt from an order has no links. On BigCommerce, Magento and the Shopify adapter, the order snapshot that reconcile saves has a blank checkout_id.
portage-ucp-client, -journal, -decision, -webmcp, -etsy, -instagram and -woocommerce stay where they were. The buy and OpenClaw plugins didn't change and stay at 0.10.5.
v0.17.0
This release is mostly a cleanup: dead code removed, duplicated helpers shared, and one less system tool needed. It also fixes two bugs and removes the buy skill's raw-UCP direct-checkout fallback. Removing unused public methods and constants is breaking for anyone who called them, so the gems that lost one get a minor bump. Each removal is marked breaking in that gem's changelog.
- Security: the
buyskill no longer has a direct-checkout fallback. ClawHub's audit of theportage-buyskill 0.10.4 flagged its "No CLI available" section. Withportagemissing, that section had the agent create and pay a store's checkout over raw UCP itself, outside Portage's spending policy, approval and checkout-mismatch checks. Now the skill tells the agent to ask the user to install or upgradeportageand stop.references/raw-ucp.mdis gone. Buying over raw UCP stays in the standaloneshop-via-ucpskill. - portage-cli 0.13.0.
portage browser importno longer needs thesqlite3command-line tool. It reads the copied Chromium, Firefox and Safari history through thesqlite3gem, whichportage-clialready depends on.error: "reader_unavailable"now means a SQLite error reading the copy, or a missingplutilfor Safari bookmarks.- Fix:
payment enrollworks against your own adapter-backed store again. The fallback referenced a class that doesn't exist, and the error was swallowed, so it always reported no session. - Fix:
payment enrollfollows homepage redirects (for example apex towww), up to five, likebuydoes. Every hop stays on thepaymentproxy route. - Breaking: removed the unused
BrowserProfile::Cdp.close_tab, andBrowserImport::Sqlite.newno longer takescommand:. - Keeps
portage-ucp~> 0.11.
- portage-ucp 0.12.0.
- Fix: a trusted JWK whose
xoryisn't valid base64url now gets a 401invalid_signature. It used to raise a rawArgumentError, so the request failed with a 500. - Security hardening:
Content-Digestis compared withOpenSSL.fixed_length_secure_compareinstead of a hand-rolled byte loop. - Breaking: removed
CapabilityNegotiator(nothing called it),Dispatcher#call's ignoredagent_profile:keyword, andSchemaValidator#valid?(useerrors_for(...).empty?). The EC curve constants moved fromSecurity::SignatureandAp2::MandateSignatureto the newSecurity::EcJwk. - The unused
embedded.openrpc.jsonschema no longer ships in the gem.
- Fix: a trusted JWK whose
- Adapter gems, breaking removals only. The removed methods were unused public pass-throughs and client methods. Nothing changed for a store running the adapter.
portage-ucp-shopify0.6.0 andportage-ucp-wix0.2.0:Mapper.money.portage-ucp-bigcommerce0.2.0:Mapper.money,Client#v2_post,Client#v3_put.portage-ucp-magento0.2.0:Mapper.money,Client#admin_post.portage-ucp-woocommerce0.3.0:Client#admin_post,Client#store_delete.portage-ucp-instagram0.2.0: thesite_url:keyword onMapper.product.
- One shared
examples/portage_ucp.rb. It now lives once inportage-ucp/examples/, replacing seven identical copies in the adapter gems. The adapter exes and READMEs link to it. buyplugin and OpenClaw plugin@tomtom87/portage0.10.5. They carry the skill change above. The OpenClaw plugin also gets small internal tidy-ups, with no change in behaviour.
portage-ucp-client, portage-ucp-webmcp and portage-ucp-etsy changed only in docs, comments or internals, so they stay at 0.6.3, 0.2.0 and 0.1.5.
v0.16.2
This release brings a native OpenClaw plugin for Portage, @tomtom87/portage, and the fixes from ClawHub's security audits of it. ClawHub's audit of 0.10.4 passes: "No suspicious patterns detected". It covers the 0.16.0, 0.16.1 and 0.16.2 release sets, none of which were tagged before.
- New: OpenClaw plugin
@tomtom87/portage0.10.4 (ClawHub). It gives an agent 23 typedportage_*tools over theportageCLI, with arguments passed as an array and never through a shell.- Read-only by default. The 13 read-only tools are on by default. The 10 that price, approve, buy, hand off, open a browser or edit the index are opt-in.
- Portage's policy still decides every payment. No tool passes
--yesfor a URL or an offer.portage_approverelays a yes only when told the user gave it. Policy, payment,setupand history clearing are not exposed. - Bundled skills. It ships the
buyandshop-researchskills plus a shortportage-openclawskill that maps each buying step to its tool. - Requirements. It needs
portage-cli0.12.0 or newer and OpenClaw 2026.5.28 or newer. - Install with
openclaw plugins install clawhub:tomtom87/portage.
- Security: no direct-checkout fallback. The plugin's copy of the
buyskill no longer has the "no CLI" fallback, in which the agent drove a store's checkout over raw UCP itself, outside Portage's policy, approval and mismatch checks. That section now tells the agent to installportageand stop. - Security: the plugin starts only
portage, through OpenClaw's own command helper. The runner refuses anyportageBinthat doesn't name theportageexecutable. It hands the argument array toapi.runtime.system.runCommandWithTimeout, so the plugin has nochild_processcode of its own (this clearedsuspicious.dangerous_exec). The per-call timeout and the 16 MB output cap are unchanged. Output past the cap is now a plain error, andportagegets an empty stdin. - Security: the
buyandshop-researchskills are reworded. ClawHub's SkillSpector audit had flagged their wording, not anything they do. The rewording keeps every instruction the same:- The skills now say the env file must be readable only by the user (file mode
600) instead ofchmod 600. - Paths in env var descriptions are in backticks.
- The Etsy and eBay tokens are called OAuth tokens, and Amazon's an API token.
- The injection example in the hard rules is described instead of quoted.
- The skills now say the env file must be readable only by the user (file mode
- Narrower
buytrigger. The skill now triggers only on an explicit buy, order or reorder request, Portage setup or order tracking. Its description gives examples and lists what it isn't for: price or stock questions, product advice, and purchases the user makes themselves. - ClawHub listing. The OpenClaw plugin is listed under Integrations.
buyplugin 0.10.4. Its skills'versionfollowsplugin.json. Theportage-buyskill on ClawHub is at 0.10.4 too.
No gem changed in this release; portage-cli stays at 0.12.0.
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.
v0.14.0
Portage keeps a local product catalogue: a SQLite index you can fill by crawling a store's public catalogue and search offline, with results agents can show as product cards.
- portage-cli 0.11.0.
- SQLite index. The local index is now
~/.portage/index/index.sqlite3(mode 0600, WAL, FTS5), replacingstores.jsonandproducts.json. Those are imported once on first open and kept as*.json.migrated.portage doctorreports the database path, row counts and FTS5. Adds asqlite3~> 2.9dependency, which ships precompiled for macOS and Linux. - Storefront crawl.
portage index add URL --crawlandportage index build --sources storefront_productsread a Shopify store's public/products.jsoninto the index. The crawl honours robots.txt, pauses between pages, backs off on 429, stops at a page cap, and never requests hand-off-only hosts. It never stores price or stock.portage checksuggests the command but never crawls itself. portage index search QUERY [--category ID] [--store HOST] [--limit N] [--json]. Ranked FTS5 search over the index. Hits are markedlive: false, so re-fetch before quoting a price.index show --productsnow pages its output.- Product cards.
findandshopify_catalogoffers carry the store's UCPproductwire hash next to the flat fields, which are unchanged.index searchhits carry the price-free subset. - Category classifier.
known-stores/categories.ymlis generated byscript/categoriesfrom Google's full product taxonomy (edition 2021-09-21), with a shipped stoplist and a few synonyms. Matches are ranked by repetition and rarity, and at most 3 ids come back. A 100-case golden set goes from 12% to 70% top-1 accuracy. Crawl a store again to re-classify what is already indexed. - Keeps
portage-ucp~> 0.11.
- SQLite index. The local index is now
buyplugin 0.9.0.- Adds a section on showing offers as product cards and on treating index hits as seeds, never as a current price.
- The skill frontmatter carries OpenClaw metadata (
requires.bins: [portage], optional env vars, a brew install spec) and aversionthat a spec keeps equal toplugin.json. - The minimum
portage-clistays 0.9.0.
- OpenClaw and Omarchy.
- README gets an OpenClaw badge, plus install steps from ClawHub (
openclaw skills install @tomtom87/portage-buy, the listing goes live with this release) or by copying the skill. - The Omarchy steps now use
omarchy-mise-install gem:portage-cli portage, note themakea stock install needs, and list the skill directories.
- README gets an OpenClaw badge, plus install steps from ClawHub (
No other gem changed. The docs-only notes in portage-ucp-client and portage-ucp-webmcp stay unreleased.
v0.13.0
portage check answers "can Portage buy from this store, and how?" from the CLI, with the same answer portage buy would act on.
- portage-cli 0.10.0 adds
portage check URL [--json].- It reports a
verdict(automated,webmcp,handofforunsupported) and a plain-Englishnext_step. Behind them it reports native UCP, the detected platform and recommended adapter gem, whether that gem is installed and which env vars are missing, hand-off-only status, and WebMCP status. - It wraps
Portage::Ucp::Checkand uses the same precedence asbuy. The hand-off-only test moved into a sharedHandoffHost, so the two commands can't disagree. - It only makes plain GETs, never builds a cart, and doesn't contact hand-off-only hosts at all. WebMCP is read only from a tab the Portage browser profile already has open on the store. It never launches a browser, so otherwise
webmcp.statusisskippedwith a reason. - It exits
0forautomatedandwebmcp,1otherwise, and honours the--proxy*flags. - It now requires
portage-ucp~> 0.11.
- It reports a
- portage-ucp 0.11.0.
Ucp::Checkandportage-ucp-checknow follow a homepage<link rel="ucp" href="...">manifest pointer when/.well-known/ucpis missing, the same fallbackbuyuses. The report addsmanifest_urlwhen the manifest came from that link. buyplugin 0.8.0 adds a "Can Portage buy from this store?" step usingportage check URL --json, used only whenportage --helplistscheck.- Docs.
docs/checking-any-store.mdnow leads withportage check, anddocs/api/cli-json.md, the CLI tutorial and both READMEs cover it.
The docs-only notes in portage-ucp-client and portage-ucp-webmcp stay unreleased.
v0.12.0
Human pick and approve: the person at the keyboard picks the store and approves the total, through portage itself, whether they're at a terminal or an agent is relaying their answer. Under the default policy, buy --yes no longer buys without an approved quote.
- portage-cli 0.9.0 delivers Phases 1-3 of
docs/plans/human-pick-and-approve.md.- Offer refs. Each
findoffer carries anoffer_ref, and each search asearch_id, both saved in history.comparesaves its offers the same way.portage buy --offer REFbuys from a saved offer. - Quotes. A
buy --dry-runthat priced a checkout saves a quote and reportsquote_id.buy --quote QUOTE_ID --yesbuys exactly that quote, capped at the quoted total. If the real checkout costs more, it refuses withquote_changedand charges nothing. Each quote is used once. portage pickreturnsneeds_pickwithchoices[], plus a "Compare an offer across stores" choice.--choose REFrelays an answer,--compare REFcompares first, and at a terminal it asks on/dev/tty.portage approve QUOTE_IDreturnsneeds_approvalwith a summary of the order.--relayed-yesrecords an agent-relayed yes, and a yes typed at a terminal recordsperson.--via auto|tty|agentpicks who is asked.--view REFandv Nat a prompt open the product page, but only on the offer's own store host.policy set --require-approval person|any|off, defaultany. Lowering it needs a yes typed at a terminal. It raises the bar against an agent but isn't a hard guarantee: a process with a shell can edit the policy or quote files.- Upgrade note. Under the default
any, abuy --yeswithout an approved--quotedry-runs and returnsneeds_approvalinstead of buying.portage policy set --require-approval off, run from a terminal, restores the old behaviour.
- Offer refs. Each
buyplugin 0.7.1. The skill's steps 3 and 5 useportage pickandportage approve, and it namesportage-cli0.9.0 as the release that ships them.references/outcomes.mdcovers the new outcomes and exit codes.- Docs.
docs/api/cli-json.md,docs/agentic-flow.md,docs/skills/buy.md,docs/cli-usage-tutorial.mdand both READMEs cover pick, approve, quotes and the approval policy.
The docs-only notes in portage-ucp, portage-ucp-client and portage-ucp-webmcp stay unreleased: no code changed there.
v0.11.0
Delivers the buy skill and the local-browser plan: offer sources and the Shopify Catalog, a local store index, browser import, the portage setup wizard, hand-off targets and a Portage browser profile. WebMCP learns to drive stores that don't run Portage. Five adapter exes that crashed at launch are fixed, and the buy Claude Code plugin ships through this repo's own marketplace.
- portage-cli 0.8.0 delivers Phases 1-8 of
docs/plans/buy-skill-and-local-browser.md.findgains a second backend kind,OfferSource. The first one is the Shopify Catalog.--max-pricenow filters its offers too.- Categories and a shared
Classifierroutefindto stores that sell what the query asks for. portage index build/refresh/show/add/remove/sourcesbuilds a local store and product index. The repo's known-stores list (221 stores, 396 products) is fetched over jsdelivr, and the user's own entries always win.portage browser importturns the user's own bookmarks and history into index entries. It reads only history and bookmark files, never password, cookie or autofill stores. Nothing is saved without a TTY "y" or--yes.portage setupruns an interactive wizard on a TTY. Under--jsonor with no TTY it prints the same read-only report asportage doctor.buy --handoff-target default|print|profile|agent:<name>picks where a dead-end checkout URL goes. Amazon, walmart.com, ebay.com, bestbuy.com and any host inhandoff_only_hostsare hand-off only. Portage never sends them a request.portage browser profile init|open|statusmanages a dedicated Portage browser profile for hand-offs.- Five opt-in retailer offer sources: Walmart Affiliate, eBay Browse, Best Buy Products, Etsy Open API v3 and Amazon Creators. Each needs its own key, and every offer they return ends in hand-off.
- The WebMCP hand-off path now uses presets, schema matching and approved checkout autofill. A mutating tool mapping needs the shopper's confirmation first.
dry_run: truewas ignored on this path and is now honoured. - Requires
portage-ucp-webmcp0.2.0 or newer for WebMCP paths. An older install is treated as absent instead of raisingNameError. - Rolls up 0.7.4 and 0.7.5, published on 2026-09-25.
portage doctorreports how Portage was installed (Homebrew or gem) and warns when anotherportageonPATHshadows it.portageloads~/.portage/.env. Doctor runs the seller checks only for a seller. portage buy "coffee"runs as a search when the argument doesn't look like a URL. Doctor flags a DuckDuckGo-only search setup, which only resolves entity queries.PORTAGE_AGENT_PROFILEdefaults to the repo's published profile instead of failing on a fresh install.
- portage-ucp-webmcp 0.2.0 drives stores that don't run Portage.
- Platform presets are detected from the exact set of tool names a page registers, never from page text. Shopify is the first preset.
Matcher.proposemaps an unknown page's tools to UCP actions by name and input-schema shape, never by a tool's untrusteddescription.Autofillfills a checkout's contact and shipping fields and picks the cheapest shipping rate in any currency. It never touches payment fields, never clicks pay, and stops at the first sign of a CAPTCHA.- Fixes
assets/autofill.js, which didn't parse, so every realAutofill.callraised.
- portage-ucp-bigcommerce, -magento, -wix 0.1.5 and portage-ucp-woocommerce 0.2.2 fix a
NoMethodErrorat launch. Each exe called.starton a plainMCP::Server, which has no#startin mcp 0.25.0. Each gem gains anexe_spec.rbthat runs the exe as a real subprocess and does a JSON-RPC handshake with it. - portage-ucp-etsy 0.1.5 adds
exe/portage-ucp-etsyandexamples/portage_ucp.rb. It was the only adapter without them. buyplugin (plugins/buy, listed in.claude-plugin/marketplace.json) is the agent-facing interface toportage. It covers the find → dry-run → confirm → buy flow, hand-off, hand-off-only retailers, and hard rules: no raw card data, no browser credential reads, no CAPTCHA bypass, confirm before buying. It needsportage-cli0.8.0.rake homebrew:updateregenerates the Homebrew formula and runs at the end ofpublish_all. The docs now lead withbrew install.
What shipped
portage-cli 0.7.3 → 0.8.0
c8a5274Homebrew Phase 4: brew-first docs and install checks in portage doctor3e5b64dLoad ~/.portage/.env, and run doctor's seller checks only for a seller0104ab8buy: accept bare query with no --query; doctor/find surface duckduckgo-only search limits5090654Derive WebMCP session capabilities from the page's tools7af985bWebMCP Phase 1: platform presets and the hand-off checkout path11d87bcWebMCP Phase 2: schema matching for unknown pages, confirmed by the userc8935bcWebMCP Phase 3: approved autofill of the store's checkout92cece2WebMCP Phase 4: document presets, matching and autofille4b2c72Fix autofill.js parsing, dry runs on the WebMCP hand-off, and rerun the live checks80c7a93portage-cli: OfferSource seam + Shopify Catalog (Phase 1)1169700portage-cli: categories + Classifier + find routing caps (Phase 2a)8231629portage-cli: local store index + portage index (Phase 2b)fa4b321portage-cli: known-stores list in the repo, fetched over jsdelivr (Phase 2c)1a58c0aportage-cli: browser import of bookmarks and history as index seeds (Phase 3)f091200portage-cli: portage setup wizard (Phase 4)cd719bbportage-cli: hand-off targets + hand-off-only hosts (Phase 5)8a3a6e9portage-cli: Portage browser profile (Phase 6)9385aadportage-cli: retailer offer sources (Phase 7)bae99faportage-cli: docs + buy skill release (Phase 8)80666cfportage-cli: apply find --max-price to offer-source offers
portage-ucp-webmcp 0.1.1 → 0.2.0
5090654Derive WebMCP session capabilities from the page's tools7af985bWebMCP Phase 1: platform presets and the hand-off checkout pathbf573deComplete the Shopify WebMCP preset fingerprint from a live sweep11d87bcWebMCP Phase 2: schema matching for unknown pages, confirmed by the userc8935bcWebMCP Phase 3: approved autofill of the store's checkout92cece2WebMCP Phase 4: document presets, matching and autofill5b6378eRecord the WebMCP live checks against a real Shopify checkoute4b2c72Fix autofill.js parsing, dry runs on the WebMCP hand-off, and rerun the live checks7b8d4e4Read shipping-rate prices one pattern at a time, with real ISO codes
portage-ucp-bigcommerce 0.1.4 → 0.1.5
8a0f268Fix portage-ucp-bigcommerce's exe: StdioTransport#open, not .start
portage-ucp-magento 0.1.4 → 0.1.5
78fbbf3Fix portage-ucp-magento's exe: StdioTransport#open, not .start
portage-ucp-wix 0.1.4 → 0.1.5
d292b8cFix portage-ucp-wix's exe: StdioTransport#open, not Server.build.start
portage-ucp-woocommerce 0.2.1 → 0.2.2
387827bFix portage-ucp-woocommerce's exe: StdioTransport#open, not .start
portage-ucp-etsy 0.1.4 → 0.1.5
3850fc2Add a standalone MCP server exe for portage-ucp-etsyca6ce83Add a spec that exe/portage-ucp-etsy and its example config load4f68f3bDocument the standalone MCP server exe in portage-ucp-etsy's READMEb72bfcdLink portage-ucp-etsy's example config by absolute URL
Also in this cycle
391c5e0buy skill + plugin marketplace (Phase 0)928ee7bRecord the clean-session /buy check in the buy skill plane153209/5b75385Add rake homebrew:update and run it at the end of publish_allceb8837/c2113a9Add a Read the Docs link to the top of the READMEad9a54dCut 0.11.0: portage-cli 0.8.0, portage-ucp-webmcp 0.2.0, adapter exe fixes
The 0.10.0 release set (proxy support, portage-ucp 0.10.0) was published to RubyGems on 2026-09-25. Its notes are on the v0.10.0 release.
See each gem's own CHANGELOG for full details, and the design log for the rationale.