Files
treg/plugin
Jason ZhouandClaude Fable 5 cebf8dd502 feat: agent-first onboarding, Getting started revamp, catalog Try-it, skill rename (#64)
* feat(web): first-run agent onboarding + Getting started revamp

New signups land on #connections (the default view for any signed-in
arrival with no deep link). The welcome modal grows two steps after
team creation: an agent picker (OpenClaw / Hermes / Claude.ai / Claude
Code / Codex + more) and the per-agent setup line. The old docked
"Getting started" stepper (onb.*) is removed entirely.

Getting started is rebuilt as numbered cards — ① Set up your <agent>
(setup line + the already-created API key, masked) and ② Try it out
(four copyable live-data prompts, each verified through the catalog,
plus OAuth connect chips for social/ads/site-SEO) — moved to the top
of the nav, above Catalog. Main content column is now centered;
"Your tools" renamed to "Your vault"; page titles reworded.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01U72hGQwYvVSyzh7XGqNra9

* feat(skill): rename the installed skill tools-registry -> treg

The skill installed into agents was named/foldered "tools-registry",
which matched neither the `treg` command nor the brand agents see —
confusing both agents and humans. Now: skill.md frontmatter name is
treg, `treg skill bootstrap` writes <agent>/skills/treg/ (and retires
a leftover tools-registry/ folder when it holds only our SKILL.md),
install.sh's fallback path and the Claude plugin folder follow suit.

The PyPI package name (tools-registry) is unchanged.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01U72hGQwYvVSyzh7XGqNra9

* feat(skill): sell the skill in its description, not describe it

The old description led with mechanics (catalog vs own-tools split).
Now it leads with when to reach for it — data access (SEO/SERP,
keyword volume, backlinks, social & trends, enrichment, ads,
scraping) and acting on connected accounts (posting, ad campaigns,
site SEO via OAuth) — and pitches treg as OpenRouter for agent
tools. Kept YAML-safe (no ": " inside the plain scalar).

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01U72hGQwYvVSyzh7XGqNra9

* feat(agents): one setup line everywhere — llms.txt carries the flow

The ~30-line "Agent instruction" duplicated what llms.txt and the
skill already teach (catalog search, prices, scan/upload); the only
things a prompt can carry that a file cannot are the token, the team,
and the authorization to run. So the instruction everywhere is now
exactly:  set up treg — {BASE}/llms.txt with token <T>, team <slug>
(welcome modal, Getting started, sidebar copy row, preview modal —
all one buildAgentPrompt).

llms.txt absorbs the rest: a "set up treg" agent flow (permission
once, work straight through, prove it with one relevant call), the
star-the-repo ask after first real data, and its money rules drop
the confirm-price-with-the-human ritual — prices are visible, calls
are fractions of a cent, just call.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01U72hGQwYvVSyzh7XGqNra9

* feat(catalog): Try-it is the primary CTA, with agent/CLI/API/manual tabs

On an endpoint row, "▶ Try it" is now the ink-fill primary action and
the old "Connect {provider}" is demoted to a secondary "Bring your own
key" (its real meaning — your key wins over treg's and isn't metered).

The Try-it drawer gains four tabs (AI Agent default): AI Agent shows a
one-line setup (team + token embedded here only, a run-now context) and
a ready "Use treg to call <id>" prompt; CLI shows install/login →
catalog get → the filled treg call; API shows the curl /call/ form with
the token header (+ X-Treg-Org in session mode); Manual is the existing
live test form.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01U72hGQwYvVSyzh7XGqNra9

* fix(catalog): OAuth endpoints keep Connect as primary; fix dead Manual Run

Which run action is primary now depends on the provider's auth_kind
(mkOauth): OAuth providers (act as your account, can't use treg's key)
keep Connect as the ink-fill primary with Try-it secondary; key/token
providers keep Try-it primary with "Bring your own key" secondary.

The Manual tab no longer strands a disabled Run hugging the tab bar
when the endpoint isn't callable from this org — it shows a banner
pointing at Connect / the AI Agent / CLI / API tabs instead, and a
"no parameters — just run it" hint for the param-less callable case.

Retitles the markup test to the new run-actions intent.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01U72hGQwYvVSyzh7XGqNra9

* feat(landing): 0% additional fee band after pay-for-results

Centered pixel-type headline plus a dark mono equation card that types
out "provider rate + $0.000 markup = your price" on scroll, with a
one-line note that treg earns on vendor volume pricing, not markup.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_018UnVdcbzN8H4mXQaTkHdvD

* feat(web): billing — one-click fund cards + auto top-up toggle

Add funds is now four preset cards ($5/$10/$25/$50); clicking one goes
straight to Stripe checkout — no dropdown-then-button. Auto top-up is a
toggle: switching it on reveals the settings panel (amount, threshold,
the PSD2 consent mandate, confirm); the toggle alone can only disarm or
open the panel — arming still requires the recorded consent.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01D8t2aMqbfstGqStPLsoxDq

* feat(web): default landing is Getting started, not the catalog

New signups (after the welcome modal) and every signed-in arrival at
/app with no deep link or hash now land on #start (Getting started)
instead of #connections. welcomeFinish and both boot paths updated.

Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01U72hGQwYvVSyzh7XGqNra9

---------

Co-authored-by: Claude Fable 5 <noreply@anthropic.com>
2026-08-10 16:18:31 +10:00
..

treg — Codex / ChatGPT plugin

A distribution wrapper, not a second product. It ships the same skill that treg skill bootstrap already installs into ~/.codex/skills/, packaged so people find treg by searching the plugin directory that ChatGPT and Codex share.

plugin/
├── .codex-plugin/plugin.json     the manifest + the listing copy
├── skills/treg/        GENERATED — do not edit by hand
└── assets/                       icon + logo (▚ in clay #e0703f)

The skill is generated

src/treg/web/skill.md is the one source. It is served at /skill.md, written into every agent by treg skill bootstrap, and rendered into this plugin by:

python3 scripts/build_plugin.py            # regenerate
python3 scripts/build_plugin.py --check    # fail if stale (also a test)

Two things differ from the served copy, both because a plugin arrives where the server does not:

  • {BASE} is baked to the public deployment. The server substitutes that placeholder per request; nothing substitutes it inside an installed plugin, so a raw copy would ship the literal.
  • A bootstrap section is prepended. Every other install path implies the CLI already exists — treg skill bootstrap only runs because treg is installed. This is the one path where the skill can land on a machine with no treg at all, and without it a first run ends in command not found.

Never edit skills/treg/SKILL.md. Change src/treg/web/skill.md and regenerate; tests/test_plugin.py fails if the two disagree.

Testing it locally (verified with codex-cli 0.145.0)

No desktop app required — the Codex CLI installs and loads plugins itself.

The marketplace manifest is a user-side file and is deliberately not part of this plugin. It lives at ~/.agents/plugins/marketplace.json, and its path is resolved relative to $HOME, not to the manifest and not as an absolute path:

{
  "name": "superdesign-local",
  "interface": { "displayName": "superdesign (local dev)" },
  "plugins": [
    {
      "name": "treg",
      "source": { "source": "local", "path": "./devs/superdesign/tools-registry-oss/plugin" },
      "policy": { "installation": "AVAILABLE", "authentication": "ON_INSTALL" },
      "category": "Developer Tools"
    }
  ]
}

Then:

codex plugin list                   # treg@superdesign-local — not installed
codex plugin add treg@superdesign-local     # the @marketplace suffix is REQUIRED
codex plugin list                   # installed, enabled, 0.7.0

Installed copies land in ~/.codex/plugins/cache/$MARKETPLACE/$PLUGIN/$VERSION/. Confirm the skill actually loaded — it should appear as treg:tools-registry:

codex exec --skip-git-repo-check "List the names of every skill you have available."

codex plugin marketplace add ./plugin does not work: that command expects a marketplace root, and this directory is a plugin.

The listing copy is the product

category and capabilities are not guesses — they are what OpenAI's own shipped plugins use (github is Developer Tools + ["Interactive", "Write"]; gmail is Communication; openai-templates is Productivity). The published docs show neither list, so read a real installed manifest under ~/.codex/plugins/cache/ before inventing a value.

Before submitting through OpenAI's plugin portal, check the manifest version matches pyproject.toml (a test enforces this), and that the copy still describes what treg does: it compares providers and the agent chooses. treg does not route automatically and does not fail over — the landing page had to be corrected for that claim once already, and a directory listing is harder to correct than a web page. A test guards this too.