pp-jimmy-johns
First terminal CLI for Jimmy John's ordering — local Unwich conversion, agent-native JSON, every endpoint typed. Trigger phrases: `jimmy john's`, `freaky fast`, `unwich`, `jj order`, `use jimmy-johns`, `run jimmy-johns`.
What this skill does
<!-- GENERATED FILE — DO NOT EDIT.
This file is a verbatim mirror of library/food-and-dining/jimmy-johns/SKILL.md,
regenerated post-merge by tools/generate-skills/. Hand-edits here are
silently overwritten on the next regen. Edit the library/ source instead.
See the repository agent guide, section "Generated artifacts: registry.json, cli-skills/". -->
# Jimmy John's — Printing Press CLI
## Prerequisites: Install the CLI
This skill drives the `jimmy-johns-pp-cli` binary. **You must verify the CLI is installed before invoking any command from this skill.** If it is missing, install it first:
1. Install via the Printing Press installer. It defaults binaries to `$HOME/.local/bin` on macOS/Linux and `%LOCALAPPDATA%\Programs\PrintingPress\bin` on Windows:
```bash
npx -y @mvanhorn/printing-press-library install jimmy-johns --cli-only
```
2. Verify: `jimmy-johns-pp-cli --version`
3. Ensure the reported install directory is on `$PATH` for the agent/runtime that will invoke this skill.
If the `npx` install fails (no Node, offline, etc.), fall back to a direct Go install (requires Go 1.26.3 or newer):
```bash
go install github.com/mvanhorn/printing-press-library/library/food-and-dining/jimmy-johns/cmd/jimmy-johns-pp-cli@latest
```
If `--version` reports "command not found" after install, the runtime cannot see the binary directory on `$PATH`. Do not proceed with skill commands until verification succeeds.
## When to Use This CLI
Use this CLI when scripting Jimmy John's order workflows from the terminal, when building a cart for an agent that needs typed access to JJ's menu and rewards data, or when caching menu state for offline composition. The Unwich converter is particularly useful for low-carb diet flows.
## Unique Capabilities
These capabilities aren't available in any other tool for this API.
### Local cart composition
- **`menu unwich-convert`** — Convert a sandwich's modifier set to an Unwich (lettuce wrap) variant — pure-local computation, no live API call.
_Reach for this when an agent is building a JJ cart for a user with a no-bread preference — it gives you the exact modifier delta with no API round-trip._
```bash
jimmy-johns-pp-cli menu product-modifiers 33328641 --json | jimmy-johns-pp-cli menu unwich-convert --product-id 33328641 --json
```
- **`order plan`** — Suggest a sized cart for a group order — sandwiches + sides + cookies + drinks scaled to N people with dietary filters.
_Reach for this when an agent gets a 'lunch for the team' request — it returns a ready-to-submit cart structure with rationale per line._
```bash
jimmy-johns-pp-cli order plan --people 8 --dietary vegetarian --json
```
- **`menu half-and-half`** — Compose a two-product share order with the agent-facing note that JJ doesn't natively support half-and-half slicing.
_Reach for this when a user says 'half Vito, half Pepe' — the command outputs the actual cart and the in-store ask the user has to make._
```bash
jimmy-johns-pp-cli menu half-and-half --left 33328641 --right 33328700 --json
```
## HTTP Transport
This CLI uses Chrome-compatible HTTP transport for browser-facing endpoints. It does not require a resident browser process for normal API calls.
## Command Reference
**account** — User account, profile, addresses, and saved payments
- `jimmy-johns-pp-cli account current` — Get the authenticated user's profile (name, email, preferences).
- `jimmy-johns-pp-cli account delivery_addresses` — List the authenticated user's saved delivery addresses.
- `jimmy-johns-pp-cli account login` — Authenticate with email + password. Sets JJ session cookies.
- `jimmy-johns-pp-cli account saved_payments` — List the authenticated user's saved payment methods.
- `jimmy-johns-pp-cli account web_token` — Refresh the web session token (called internally by the SPA).
**menu** — Menu products, filters, and modifier options
- `jimmy-johns-pp-cli menu product_filters` — List available menu filter dimensions (categories, dietary tags, allergens).
- `jimmy-johns-pp-cli menu product_modifiers` — List modifier groups (bread, toppings, add-ons) for a specific product.
- `jimmy-johns-pp-cli menu products` — List menu products for the current store (subs, sides, drinks, cookies, catering).
**order** — Cart and order management
- `jimmy-johns-pp-cli order add_items` — Add one or more items to the current cart in a single call.
- `jimmy-johns-pp-cli order current` — Get the current in-progress order/cart.
- `jimmy-johns-pp-cli order upsell` — Get upsell suggestions for the current cart (sides, drinks, cookies).
**rewards** — Freaky Fast Rewards points balance and catalog
- `jimmy-johns-pp-cli rewards catalog` — List available reward redemptions for the current points balance.
- `jimmy-johns-pp-cli rewards summary` — Get the authenticated user's rewards points balance and recent activity.
**stores** — Jimmy John's store locations and operating info
- `jimmy-johns-pp-cli stores get_disclaimers` — Get store-specific disclaimers (delivery zone caveats, hours warnings).
- `jimmy-johns-pp-cli stores list` — List stores. Accepts an address search or filter; returns stores with hours, distance, pickup/delivery flags.
**system** — System utilities (Google Maps signing for store finder)
- `jimmy-johns-pp-cli system` — Sign a Google Maps URL for client-side use (used internally by store finder)
## Freshness Contract
This printed CLI owns bounded freshness only for registered store-backed read command paths. In `--data-source auto` mode, those paths check `sync_state` and may run a bounded refresh before reading local data. `--data-source local` never refreshes. `--data-source live` reads the API and does not mutate the local store. Set `JIMMY_JOHNS_NO_AUTO_REFRESH=1` to skip the freshness hook without changing source selection.
Covered paths:
- `jimmy-johns-pp-cli menu`
- `jimmy-johns-pp-cli menu product_filters`
- `jimmy-johns-pp-cli menu product_modifiers`
- `jimmy-johns-pp-cli menu products`
- `jimmy-johns-pp-cli stores`
- `jimmy-johns-pp-cli stores get_disclaimers`
- `jimmy-johns-pp-cli stores list`
When JSON output uses the generated provenance envelope, freshness metadata appears at `meta.freshness`. Treat it as current-cache freshness for the covered command path, not a guarantee of complete historical backfill or API-specific enrichment.
### Finding the right command
When you know what you want to do but not which command does it, ask the CLI directly:
```bash
jimmy-johns-pp-cli which "<capability in your own words>"
```
`which` resolves a natural-language capability query to the best matching command from this CLI's curated feature index. Exit code `0` means at least one match; exit code `2` means no confident match — fall back to `--help` or use a narrower query.
## Recipes
### Show every menu item that has Unwich support
```bash
jimmy-johns-pp-cli menu products --json | jq '.[] | select(.category=="sandwich")'
```
Filter the local menu cache to sandwiches before piping into the unwich converter.
## Auth Setup
Jimmy John's runs PerimeterX bot protection. Authenticate by capturing cookies from a fresh, hand-driven Chrome session via 'browser-use cookies export', then 'jimmy-johns-pp-cli auth import-cookies --from-file <path>'. Sessions that get fingerprinted by automation stay flagged for ~1 hour.
Run `jimmy-johns-pp-cli doctor` to verify setup.
## Agent Mode
Add `--agent` to any command. Expands to: `--json --compact --no-input --no-color --yes`.
- **Pipeable** — JSON on stdout, errors on stderr
- **Filterable** — `--select` keeps a subset of fields. Dotted paths descend into nested structures; arrays traverse element-wise. Critical for keeping context small on verbose APIs:
```bash
jimmy-johns-pp-cli stores list --agent --select id,name,status
```
- **Previewable** — `--dry-run` shows the request without sending
- **Offline-friendly** — sync/search commands can use the local SQLite store when aRelated in Ads & Marketing
ads
IncludedMulti-platform paid advertising audit and optimization skill. Analyzes Google, Meta, YouTube, LinkedIn, TikTok, Microsoft, and Apple Ads. 250+ checks with scoring, parallel agents, industry templates, and AI creative generation.
banana
IncludedAI image generation Creative Director powered by Google Gemini Nano Banana models. Use this skill for ANY request involving image creation, editing, visual asset production, or creative direction. Triggers on: generate an image, create a photo, edit this picture, design a logo, make a banner, visual for my anything, and all /banana commands. Handles text-to-image, image editing, multi-turn creative sessions, batch workflows, and brand presets.
rpg-migration-analyzer
IncludedAnalyzes legacy RPG (Report Program Generator) programs from AS/400 and IBM i systems for migration to modern Java applications. Extracts business logic from RPG III/IV/ILE source code, identifies data structures (D-specs), file operations (F-specs), program dependencies (CALLB/CALLP), and converts RPG constructs to Java equivalents. Generates migration reports, complexity estimates, and Java implementation strategies with POJO classes, JPA entities, and service methods. Use when modernizing AS/400 or IBM i legacy systems, analyzing RPG source files (.rpg, .rpgle, .RPGLE), converting RPG to Java, mapping data specifications to Java classes, planning legacy system migration, or when user mentions RPG analysis, Report Program Generator, RPG III/IV/ILE, AS/400 modernization, IBM i migration, packed decimal conversion, or mainframe application rewrite.
brand-library-architect
IncludedBuild a complete brand library for a product — visual asset render pipeline, brand documentation set (BRAND, COPY, MANIFESTO, BIOS, FAQ, GLOSSARY, TONE, PRICING), open-source convention files (README, CONTRIBUTING, SECURITY, CODE_OF_CONDUCT), and a self-contained press kit. This skill should be used when the user asks to "build a brand library / brand kit / press kit / brand assets" for a product, "set up a brand library workflow," "create a positioning manifesto plus visual identity," or any combination of brand documentation + visual asset pipeline. Apply phase-by-phase or run end-to-end. Templates are product-agnostic and use {{TOKEN}} placeholders the skill prompts the user to fill.
writing-tech-post
IncludedAuthors engineering blog posts end-to-end: launch deep-dives, incident postmortems, architecture migrations, performance case studies, tutorials, AI/agent system writeups, security disclosures, and research-to-product translations. Picks the correct archetype, plans the abstraction ladder, enforces an evidence cadence (diagrams, benchmarks, profiles, traces, code, ablations), tunes voice against publisher house styles (Datadog, Vercel, GitHub, AWS, Meta, Cloudflare, Jane Street), and runs a pre-publish gate for narrative momentum and disclosure ethics. Use when drafting a new engineering post, restructuring a draft that feels flat, deciding which evidence form belongs where, validating that depth and product context are balanced, or preparing a postmortem, migration, or performance narrative for external publication. Do not use for API reference documentation, README authoring, marketing copy, release notes, generic SEO content, ghost-written executive thought leadership, or non-engineering long-form essays.
blog-google
IncludedGoogle API integration for blog performance: PageSpeed Insights, CrUX Core Web Vitals with 25-week history, Search Console performance, URL Inspection, Indexing API, GA4 organic traffic, NLP entity analysis for E-E-A-T, YouTube video search for embedding, and Google Ads Keyword Planner. Progressive feature availability based on credential tier (API key, OAuth/service account, GA4, Ads). Shares config with claude-seo at ~/.config/claude-seo/google-api.json. Use when user says "google data", "page speed", "core web vitals", "search console", "indexation", "GA4", "keyword research", "nlp entities", "blog performance", "youtube search", "google api setup".