localskillsai

PAK'nSAVE Price Tracker

v1.0.1low riskdraft only

Tracks PAK'nSAVE NZ shelf prices across your saved staples list and tells you when something jumps.

New ZealandRetail · Lifestyleby @paulgnzLicense: MITFree

Install

Install in Claude — recommended

Claude Desktop · Claude.ai · Claude Code

Localskills is an Anthropic-spec plugin marketplace (github.com/localskills-ai/skills). Add it once, install any skill with one command — no zip wrangling, no self-attested permissions, no fetch-and-grant.

/plugin marketplace add localskills-ai/skills
/plugin install paknsave-price-tracker@localskills

Then describe your task — Claude picks the skill from context.

Or — use without installing (MCP)

full setup →

Prefer not to install? Connect the Localskills MCP server once and any agent can call this skill on the fly through a sandboxed, schema-bound channel.

1. Add the server (one time):

{
  "mcpServers": {
    "localskills": {
      "type": "http",
      "url": "https://localskills.ai/api/mcp"
    }
  }
}

2. Then ask your agent:

Using the Localskills MCP (get_skill), fetch the "paknsave-price-tracker" skill (nz/paknsave-price-tracker) and apply it to my task.

No MCP? Paste this to a permissive agent (Claude Code, dev CLI). It fetches the skill and sets it up directly. Hosted agents like Claude.ai will often (correctly) refuse this shape — use MCP above instead.

Install and set up the Localskills skill "paknsave-price-tracker"
(nz/paknsave-price-tracker).

Before installing anything, fetch and review it:
- https://localskills.ai/nz/paknsave-price-tracker
- https://localskills.ai/api/install/claude-code/nz/paknsave-price-tracker

Read its SKILL.md and the permissions declared in skill.json
(filesystem, network, shell). Don't grant more than it declares;
if anything looks off, stop and tell me.

Then install it for the agent you're running and confirm it's
available. Keep the work scoped to this skill — ask before any
broader environment changes.

Or grab the files yourself — pick your agent. The download writes one file (or a folder) to where your agent looks for skills. Nothing runs on your machine until you invoke the skill from inside the agent.

Claude Code
downloador terminal ▾
curl -fsSL https://localskills.ai/api/install/claude-code/nz/paknsave-price-tracker -o /tmp/paknsave-price-tracker.zip && unzip -o /tmp/paknsave-price-tracker.zip -d ~/.claude/skills/ && rm /tmp/paknsave-price-tracker.zip

Min Claude Code: >=1.0.0 · Writes to ~/.claude/skills/<slug>/

Cursor
downloador terminal ▾
mkdir -p .cursor/rules && curl -fsSL https://localskills.ai/api/install/cursor/nz/paknsave-price-tracker -o .cursor/rules/paknsave-price-tracker.mdc

Min Cursor: >=0.40.0 · Writes to .cursor/rules/<slug>.mdc

Codex CLI
downloador terminal ▾
curl -fsSL https://localskills.ai/api/install/codex/nz/paknsave-price-tracker -o /tmp/paknsave-price-tracker.zip && unzip -o /tmp/paknsave-price-tracker.zip -d ./ && rm /tmp/paknsave-price-tracker.zip

Min Codex CLI: >=1.0.0 · Writes to .codex/skills/<slug>/

Want to read it before saving? Pipe the download to lessinstead of -o:
curl -fsSL https://localskills.ai/api/install/cursor/nz/paknsave-price-tracker | less

README

PAK'nSAVE Price Tracker

Keeps a running record of what you pay for the groceries you actually buy at PAK'nSAVE NZ, and tells you when something has jumped.

What it does

PAK'nSAVE (part of Foodstuffs) markets itself on lowest grocery prices in NZ. That positioning makes per-item price drift easy to miss — the overall basket "feels" fine, but the staples have crept up 8% over six months.

This skill keeps a per-item history of what you've paid:

  1. You maintain a list of staples — milk, bread, eggs, mince, oats, the specific cat food, whatever.
  2. After each shop, you give the skill a price screenshot, the in-app order summary, or just typed prices.
  3. It updates the history, tracks the per-unit price (so it normalises across pack sizes when possible), and flags items that have moved more than your threshold.
  4. At the start of each shop it tells you which items are at a higher price than you've usually paid, and which are on special this week.

It does NOT scrape PAK'nSAVE. You feed it the prices.

Why this is useful

Two reasons:

  • Catch shrinkflation and creeping price rises the chain doesn't loudly advertise.
  • Decide when to bulk-buy. If the 1kg block of butter is normally $9.50 and it's $7.50 this week, the skill knows that's a real deal and tells you. If "20% off" is on a price already 15% above the 6-month median, the skill calls it out.

When NOT to use it

  • For comparing PAK'nSAVE vs Woolworths NZ vs New World prices in real time — that's what Grocer does (and they do it well).
  • For chasing in-store promotions you don't actually want — this is a "you already buy these" tracker, not a deal-discovery tool.

Inputs

Any combination of:

  • In-app order summary — easiest. PAK'nSAVE's app exports a clean per-item list. PDF or pasted text.
  • Email order confirmation for click-and-collect.
  • Receipt photo — the skill OCRs it.
  • Shelf-tag photo — for an item you didn't buy but want to track.
  • Typed prices"2L blue milk $4.20". Works.

Outputs

A summary on each update:

Update: 2026-05-18, PAK'nSAVE Lincoln Rd
3 items tracked, 2 changes:

  Anchor blue milk 2L   $4.20  (last shop $3.90, +7.7%)  ↑ flagged
  Vogel's 750g          $6.40  (last shop $6.40, no change)
  Free-range eggs 12pk  $8.99  (last shop $9.50, −5.4%, ON SPECIAL)

Median of last 6 shops:
  Anchor blue milk 2L   $3.94 (cheapest: $3.60, dearest: $4.20)
  Vogel's 750g          $6.30
  Free-range eggs 12pk  $9.40

And a "next shop" advisory:

Heads up for your next shop:
  - Free-range eggs are 6% below median — stock up if you can store them.
  - Anchor blue milk is at the top of its 6-month range — substitute Pams
    house brand if you don't strongly prefer Anchor.

Permissions

  • fileSystem.read:downloads — to read the app's PDF/CSV exports.
  • fileSystem.read:photos — to read receipt or shelf-tag photos.
  • fileSystem.write:outputs — to save the running history (JSON file in the user's chosen location).
  • No network. The skill doesn't contact PAK'nSAVE or anyone else.
  • No shell.

Storage

The skill keeps a single JSON file (default: ~/Documents/paknsave-prices.json). Schema:

{
  "items": {
    "anchor-blue-milk-2l": {
      "displayName": "Anchor blue milk 2L",
      "unit": "L",
      "history": [
        { "date": "2026-04-02", "price": 3.60, "store": "Lincoln Rd" },
        { "date": "2026-05-18", "price": 4.20, "store": "Lincoln Rd" }
      ]
    }
  },
  "threshold_pct": 5
}

You can edit it directly if you want.

Author

Paul Grey (@paulgrey). NZ-style cost-of-living useful, not a money-saving evangelist.

Skill instructions (SKILL.md)

View the prompt the agent receives

PAK'nSAVE Price Tracker — SKILL

You maintain a price history for groceries the user buys at PAK'nSAVE NZ. After each shop they give you new prices; you update the history, flag changes, and advise on the next shop.

Operating rules

  1. You never contact PAK'nSAVE, Foodstuffs, Grocer, or any external service. All prices come from the user.
  2. You never invent prices. If the user didn't include an item, it's missing. Don't fill in gaps.
  3. The user owns the price history file. Default path: ~/Documents/paknsave-prices.json. Read before writing; never overwrite without merging.
  4. Per-unit normalisation: when an item's pack size changes between shops, compute the per-unit price (per L, per kg, per 100g) and compare those — not the headline price. If the user buys a 2L milk one shop and a 3L the next, those are not "the same item" at the same price.
  5. Output two blocks per update: the price diff and the next-shop advisory. The user reads both; you don't editorialise beyond what's there.

Inputs you accept

  • App order summary (PDF, CSV, pasted text).
  • Receipt photo or PDF.
  • Shelf-tag photo (for tracking an item the user didn't buy).
  • Typed prices: "Anchor blue milk 2L $4.20".
  • Optional threshold_pct to flag changes (default 5%).
  • Optional store (e.g. "Lincoln Rd", "Hornby") — useful since PAK'nSAVE prices vary by store.

Slug normalisation

Build slugs from product description + size:

  • "Anchor Blue Milk 2L"anchor-blue-milk-2l
  • "Pams Free Range Eggs Size 6 1Dz"pams-free-range-eggs-size-6-dz

Lowercase, alphanumerics + hyphens, strip pack-noise words (e.g. 1Dz, Pack), keep the brand and the differentiating qualifier (Pams is PAK'nSAVE's house brand, so it stays in the slug).

Ask the user to confirm before creating a new slug — better to merge with an existing item than fragment the history.

Per-shop workflow

  1. Read existing history from the JSON file. If it doesn't exist, ask the user where to keep it.
  2. Parse the new prices from whatever input format the user supplied.
  3. For each item:

a. Find the matching slug (or ask user to confirm new one). b. Compute per-unit price. c. Compare to the running median of the last 6 shops. d. Flag if change exceeds threshold. e. Note if user marked it "ON SPECIAL" or the description includes "Special".

  1. Append the new entries (don't overwrite history).
  2. Output the diff block and the next-shop advisory.

Output format — diff block

Update: <YYYY-MM-DD>, PAK'nSAVE <STORE>
<N> items tracked, <M> changes:

  <Display name>  $<NEW>  (last $<OLD>, <±X%>)  <flag if changed>
  ...

Median of last 6 shops:
  <Display name>  $<MEDIAN>  (cheapest: $<MIN>, dearest: $<MAX>)
  ...

Output format — next-shop advisory

Look at items where:

  • Current price is in the bottom 25% of its observed range → "stock up if you can store"
  • Current price is in the top 25% → "consider a substitute"
  • An "ON SPECIAL" item has been on special multiple times — note that the "special" might just be the regular price with marketing on top.

Be brief. Two or three lines tops. The user knows their kitchen.

What you will not do

  • Compare across stores (PAK'nSAVE vs Woolworths vs New World). Out of scope; point at Grocer.
  • Auto-buy or auto-add to cart. The skill is read-only.
  • Suggest substitutions on dietary or health grounds. "Cheaper" is a price observation, not nutrition advice.
  • Track in-app exclusive offers, loyalty points, fuel discounts. Out of scope.
  • Tell the user PAK'nSAVE is cheaper than competitors. We don't know that — we only know what the user has paid.

Edge cases

  • Item is at a new store. PAK'nSAVE prices vary by store. Keep the per-store breakdown in the history.
  • Item is renamed or repackaged. PAK'nSAVE rotates pack sizes. If a 750g loaf becomes a 700g loaf, treat as a new item but cross-reference in the notes so the user knows.
  • Pack size changes but price doesn't. That's shrinkflation. Flag explicitly.
  • A shop's data only includes specials, not regulars. Note that and warn the user the comparison is biased.

Tone

Concise. Tabular. Specific. No "save money with this one weird trick" energy. The point is honesty about your grocery spend, not motivation.

Self-check

Before outputting the diff:

  1. Did I match the right slug for each new entry?
  2. Did I compute per-unit prices when pack sizes differ?
  3. Are all flagged items genuinely outside the threshold?
  4. Have I appended (not overwritten) the JSON history?

If anything is uncertain, ask the user before writing the file.

Changelog

Changelog

[1.0.1] — 2026-05-25

Fixed

  • Corrected the Foodstuffs house-brand spelling from "PAMS" to "Pams". The brand is officially styled "Pams" (no apostrophe, not all-caps). Updated the slug-normalisation example in SKILL.md and the "Pams free-range eggs" lines in both examples.
  • Stopped treating "Pams" as a strippable noise word in slug normalisation. Pams is PAK'nSAVE's house brand and a genuine differentiator — the slug example already keeps it — so it must stay in the slug. Reworded the rule to strip pack-noise tokens instead and to keep the brand.

[1.0.0] — 2026-05-20

Added

  • Initial release.
  • Reads app exports, receipt photos, shelf-tag photos, and typed prices.
  • Maintains a per-item JSON history with per-store breakdown.
  • Per-unit normalisation across changing pack sizes.
  • Flags price changes outside user-defined threshold (default 5%).
  • "Next shop" advisory highlighting stock-up and substitute opportunities.
  • Zero network permissions — never contacts PAK'nSAVE.