localskillsai

PAK'nSAVE Price Tracker

v1.0.0low risk

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

New ZealandRetail ยท Lifestyleby @paulgnzLicense: MITFree

Install

Claude Code (CLI)(min >=1.0.0)

download โ†’
# Per-user (recommended) โ€” overwrites any existing skill of this name:
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

Installs to ~/.claude/skills/<slug>/

Cursor(min >=0.40.0)

download โ†’
# From your project root:
mkdir -p .cursor/rules \
  && curl -fsSL https://localskills.ai/api/install/cursor/nz/paknsave-price-tracker -o .cursor/rules/paknsave-price-tracker.mdc

Installs to .cursor/rules/<slug>.mdc

Codex CLI(min >=1.0.0)

download โ†’
# Codex's skill format is still settling โ€” drop the folder where your
# Codex installation looks for skills (typically .codex/skills/):
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

Installs to .codex/skills/<slug>/

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 at Second Brain NZ. NZ-style cost-of-living useful, not a money-saving evangelist.

Version

1.0.0 โ€” initial release.

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 noise words (PAMS, Brand), keep the differentiating qualifier.

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.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.