--- name: pp-learn-loop-example description: "Printing Press CLI for Learn Loop Example. Golden fixture exercising the spec-declared self-learning loop." author: "printing-press-golden" license: "Apache-2.0" argument-hint: " [args] | install cli|mcp" allowed-tools: "Read Bash" metadata: openclaw: requires: bins: - learn-loop-example-pp-cli --- # Learn Loop Example — Printing Press CLI ## Prerequisites: Install the CLI This skill drives the `learn-loop-example-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: ```bash npx -y @mvanhorn/printing-press-library install learn-loop-example --cli-only ``` 2. Verify: `learn-loop-example-pp-cli --version` 3. Ensure `$GOPATH/bin` (or `$HOME/go/bin`) is on `$PATH`. If the `npx` install fails before this CLI has a public-library category, install Node or use the category-specific Go fallback after publish. If `--version` reports "command not found" after install, the install step did not put the binary on `$PATH`. Do not proceed with skill commands until verification succeeds. Golden fixture exercising the spec-declared self-learning loop. Demonstrates the shape every printed CLI gets when its spec declares a `learn:` block: the generator emits internal/learn/* subpackages, the teach/recall/learnings commands, the v3 store schema additions, and the self-learning sections in README.md / SKILL.md / AGENTS.md. The underlying resource surface mirrors the sync-walker fixture (top-level games + walker-fanned-out leagues) so the emitted shape covers the typical multi-file CLI alongside the learn package. Identifiers in the learn block are intentionally neutral (EXAMPLE-* ticker, ALPHA/BRAVO entities) so the scripts/verify-learn-purity.sh gate cannot trip on this fixture. ## When Not to Use This CLI Do not activate this CLI for requests that require creating, updating, deleting, publishing, commenting, upvoting, inviting, ordering, sending messages, booking, purchasing, or changing remote state. This printed CLI exposes read-only commands for inspection, export, sync, and analysis. ## Command Reference **games** — Top-level games resource. The list endpoint populates the generic resources table; rows carry a `game_key` field that the walker's leagues endpoint extracts for child fan-out. - `learn-loop-example-pp-cli games` — List games **leagues** — Leagues, fetched per-game by walking games and extracting each game's game_key into the child path. - `learn-loop-example-pp-cli leagues ` — List leagues for a game ### Finding the right command When you know what you want to do but not which command does it, ask the CLI directly: ```bash learn-loop-example-pp-cli which "" ``` `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. ## Auth Setup Run `learn-loop-example-pp-cli auth setup` for the URL and steps to obtain a token (add `--launch` to open the URL). Then store it: ```bash learn-loop-example-pp-cli auth set-token YOUR_TOKEN_HERE ``` Or set `LEARN_LOOP_TOKEN` as an environment variable. Run `learn-loop-example-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 learn-loop-example-pp-cli games --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 available - **Non-interactive** — never prompts, every input is a flag - **Read-only** — do not use this CLI for create, update, delete, publish, comment, upvote, invite, order, send, or other mutating requests ### Response envelope Commands that read from the local store or the API wrap output in a provenance envelope: ```json { "meta": {"source": "live" | "local", "synced_at": "...", "reason": "..."}, "results": } ``` Parse `.results` for data and `.meta.source` to know whether it's live or local. A human-readable `N results (live)` summary is printed to stderr only when stdout is a terminal AND no machine-format flag (`--json`, `--csv`, `--compact`, `--quiet`, `--plain`, `--select`) is set — piped/agent consumers and explicit-format runs get pure JSON on stdout. ## Automatic learning This CLI ships a self-learning loop: agents `recall` before doing discovery walks, and fire `teach` in the background after answering. Repeat questions skip discovery; structurally similar questions get answered via entity substitution. ### Four-branch protocol For each user question: 1. **Known taught pattern.** If `recall ""` returns `found=true` with `results[0].entity_match == "exact"` and `results[0].confidence >= 2`, skip discovery and fetch the resources in `results[*].resource_id` directly. 2. **Pattern match via entity substitution.** If recall misses but the query contains an entity that matches a registered seed (taught lookup or pre-seeded list), the loop's pattern engine tries substituting the entity into a stored template. If `Apply` succeeds, use the resolved resource id. 3. **Cold start.** If both miss, run the normal discovery walk (search, list, drill). Once you've assembled the answer, fire `teach &` to record the mapping for next time. 4. **Verification failure after a pattern apply.** If the pattern engine produced a candidate that turns out wrong when you fetch it, demote back to branch 3: re-run discovery and `teach` the correct resource so the next call doesn't repeat the mistake. Always read `warnings` on the recall envelope before trusting `results`. A non-empty `warnings` array means the validator flagged something (low confidence, parent-vs-child mismatch, store gap) and the row is a hint, not a skip-discovery hit. ### Commands ```bash learn-loop-example-pp-cli recall "" --agent learn-loop-example-pp-cli teach --query "" --resource-type --resource & learn-loop-example-pp-cli learnings list --agent learn-loop-example-pp-cli learnings forget "" --resource learn-loop-example-pp-cli teach-pattern --query-template "