mirror of
https://github.com/superdesigndev/treg.git
synced 2026-10-31 07:22:57 +08:00
dev/hub
19
Commits
| Author | SHA1 | Message | Date | |
|---|---|---|---|---|
|
|
ce916f288d |
feat: /leads-signals launch page, lead-signals skill, one-command skill install (#710)
* feat(web): /intent-signals landing page for the buyer-signals launch "Claude monitor buyer signals": built from /people-search, keeping its skill grid (now eight signal tiles from the launch film's real run) and the People Search Bench. New: a morning-run demo, a three-step 'your agent is the monitor' section (Claude Code /schedule, Codex from cron, diff against the last list), the $0.98 four-source receipt, and pay-per-check pricing. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> * feat(web): /intent-signals scenes from the launch film Replace the monitor steps, the receipt table and the signal tile grid with the film's own scenes, rebuilt as HTML: a radar and signal feed that judges each post, a thread → scored companies → decision makers flow with vendor waterfall, 'treg monitors…' with evidence cards per signal, and the daily hot-leads list a scheduled run grows. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> * feat(web): /intent-signals hero plays the whole film in one take The hero now runs monitor the topic → read the thread → score companies → find decision makers as one continuous, clickable demo, replacing the old hero table and the two separate scene sections. The 'treg monitors…' section goes back to the skill tile grid, each tile now a small visual scene (post, new position, news, job postings, funding, headcount chart, tech adopters, Reddit thread) instead of text rows. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> * feat(web): /intent-signals headline 'Claude for Signal Monitor' and the real Reddit mark Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> * style(web): /intent-signals nav drops the Signals and Daily list links Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> * fix(web): /intent-signals works at every width Tablet keeps every column and a smaller radar beside the feed; phone puts the radar above the feed and the post above its thread, folds secondary columns, wraps the prompt bar and truncates names instead of overlapping. The prompt cursor now honours [hidden], and a new prompt clears the last reply before it types. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> * style(web): /intent-signals headline 'Claude for Monitor Leads Signal' in Geist Pixel Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> * fix(web): /intent-signals prices from the billed run, not the film's $0.98 The launch run's LinkedIn, Reddit and X sweep billed $0.52 for 2,945 signals (4,710 with the free GitHub stargazers): $0.0002 per signal checked. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> * feat(skills): lead-signals, the /intent-signals workflow as a skill Detect, qualify, contact, hand back a ranked list; optionally keep watching on the agent's own schedule with a diff against the last list. It names signal families and the words to search the catalog with, never endpoint ids, so it stays right as the catalog grows. Served at /skills/lead-signals/SKILL.md and as the third entry in the well-known skills index, like make-ugc. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> * docs(skills): lead-signals description says only when to use it; example vendors per signal Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> * feat(skills): install our skills with npx skills add superdesigndev/treg The skills CLI (skills.sh) reads skills/ and skips symlinks, so build_plugin.py now also writes real copies of the workflow skills (make-ugc, lead-signals) there, and --check keeps them in step with src/treg/web/skills. The six skills that are repo tooling carry metadata.internal so the CLI hides them. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> * chore(skills): vendor-listing is repo tooling, hidden from npx skills add Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> * feat(web): /intent-signals shows the one-line skill install npx skills add superdesigndev/treg --skill lead-signals, beside the treg set-up command; both copy buttons share one handler and wrap on a phone. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> * feat(cli): treg skill bootstrap installs every public skill the registry advertises install.sh already runs it; it now also installs each skill in /.well-known/skills/index.json (make-ugc, lead-signals) into the same global agent folders as the treg skill. Best-effort, and a name from the index must be a plain slug before it becomes a directory. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> * docs(skills): lead-signals sends an agent without treg to llms.txt to set up Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> * feat(web): the buyer-signals page lives at /leads-signals Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> * style(web): /leads-signals tools grid shows Aviato people search instead of Apollo Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> * style(web): /leads-signals nav reads Leads signals Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> * refactor(web): /leads-signals served by _static_page like the other launch pages The catalog's size comes from {ENDPOINTS}/{PROVIDERS} instead of typed numbers, and the page carries the shared share image. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> * docs(context): the installer also installs the advertised workflow skills Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> --------- Co-authored-by: Claude Opus 5.5 <noreply@anthropic.com> |
||
|
|
2ff15db042 |
fix(hub): with TREG_HUB_TEAMS set, a team outside the list sees no trace of the hub
Before, the team list gated only the hub routes and /call/ of a hub id. The open surfaces kept the plain flag, so with the hub on for one team every other user still read the hub sections of the agent files, found approved hub tools in catalog search, could open catalog get and the share page, and saw hub_create, hub_update and hub_mine in the MCP tool list (listed even with the flag off). - `hub_app.visible_to(slug)`: a reader with a team is judged by `enabled_for`; a reader with no team sees the hub only when the list is empty. - `routers/hub_gate.reader_team` resolves the key or session a request carries, only while a list is set. Catalog search, catalog get and its sibling rows, the share page, /skill.md and /llms.txt use it; MCP catalog_search resolves the bearer's team the same way. - `mcp._HubToolsGate` drops the three hub tools from `tools/list` for anyone who cannot see the hub. - `treg skill bootstrap` sends the key, so a listed team's agents get the hub sections. - The static plugin files no longer carry the hub sections (owner, 2026-09-26; replaces the 2026-09-16 decision to always ship them). Updates docs/context/architecture/hub.md. |
||
|
|
2dacc61470 |
docs(hub): the plugins always ship the hub section; CHANGELOG
Owner's decision, 2026-09-16: a plugin must carry the hub knowledge whatever a deployment does. A plugin is a static file installed against ANY registry, including a self-hosted one that may have the hub switched ON, so a plugin that omitted the section would hide a feature that works there. - src/treg/web/skill.md, src/treg/web/llms.txt: the hub section gains the instruction for the OFF case. Every `/hub/...` route answers 404 and every `treg hub` command refuses when a deployment has `hub_enabled` off; an agent reports "this registry does not offer the hub" and uses the rest of the catalog, instead of retrying a fault that cannot be fixed. The SERVER still strips the whole section while its own flag is off, because the server knows its own state. - scripts/build_plugin.py: the hub section is no longer behind `--with-hub`; it always ships. Leaving it behind a flag meant a plain `--check` rebuilt the plugins WITHOUT the hub, reported all five as stale, and invited a regeneration that silently stripped the hub text back out. `--with-hub` is still accepted and now does nothing. `--check` passes with and without it. - The five plugins regenerated: claude, codex, cursor, dsh, minimax. - CHANGELOG.md: new file, this repo had none. Covers the hub under Unreleased. Full suite 4069 passed, 8 skipped; agent pages + seo 228; hub + mcp + snapshot 186; import-linter 14/14; plugin check OK. One failure in the parallel run, test_backlinks_ceiling, which passes alone and whose whole file passes alone (14); no source file in this commit relates to it. |
||
|
|
c49d648f5d |
Merge branch 'main' into dev/hub (8.4)
Bring the team's work since 2026-09-09 into the hub branch: the review/feedback system, the arena insights, the R2 body storage and cache admission for the archive, the shared key-value store, and the SSRF CGNAT fix. 108 commits, 233 files. The one real conflict was the migration numbers: both branches used 0026-0030 for different changes. main's chain is 0026 (callreview) through 0032 (archive body storage); the five hub migrations are renumbered to 0033-0037 and rechained onto 0032, so there is a single head 0037. Everything else was additive and kept from both sides: the HubTool/HubRun models beside CallReview/FeedbackHandling, the `hub` domain and the key-value store both in the AGENTS.md tables, the hub CLI family beside `treg review`, the hub MCP verbs beside `review` in the tool sets, the quickjs and obstore/redis dependencies together. mcp_feedback.py was removed on main; the deletion is kept. The docs fragment's migration numbers were updated. Full suite 3508 passed; agent pages + SEO 216; boundaries 14/14; the migration chain a single head 0037 on Postgres 16; the plugin staleness guard green. |
||
|
|
ff0bf36d38 | feat(copy): quote the catalog's size from the loaded catalog, never by hand | ||
|
|
d610f3fca6 |
feat(hub): 7.1 - the front door for agents: skill.md, llms.txt, catalog_get on hub ids
- skill.md and llms.txt gain a hub section (the four files, ctx.call, the check, publish, price, the share page, and the owner's rule: never paste a credential into a script - register it first, then name the tool) inside <!--hub-->...<!--/hub--> blocks. routers/web.py strips them while hub_enabled is off, as it strips the routed-discovery blocks, so a deployment never documents what it has not switched on. scripts/build_plugin.py drops the block the same way; --with-hub keeps it for the final merge. The blocks are whitespace-neutral: the served and generated texts are byte-identical to before when the hub is off. - GET /catalog/endpoints/<id> (behind catalog_get and treg catalog get) answers for a hub id: endpoint.kind == "hub" with summary, inputs, output, the price line, health, version, call_template, the page URL and the readme; never the script, the maker's tools or a key. Search never lists a hub tool; an unknown hub-shaped id stays a 404 with the near-miss hints. The session comes through Depends(get_session) (the pool guard refused a maker import in a router). - treg catalog get prints a hub tool's contract in its own shape. Tests: the route's hub shape and what it hides, flag off => plain 404, the agent files carry the hub text only when the flag is on and never leak markers, the CLI printer. Suite 2923; the plugin staleness guard and the pool guard pass; boundaries 14/14. |
||
|
|
0333516fd5 | fix(feedback): complete agent docs and domain boundaries | ||
|
|
590fc61695 |
feat(cursor): ship MCP alongside skill in Cursor plugin
The Cursor plugin now declares an MCP server pointing at the remote https://treg.to/mcp/ endpoint, so installing the plugin gives agents the MCP tools (catalog_search, catalog_get, call, balance, my_tools) without a CLI-only dead end. Auth uses Cursor's env variable syntax (${env:TREG_TOKEN}) for the bearer token. Changes: - Add plugins/treg/mcp.json with Cursor's { mcpServers: {...} } format - Update plugins/treg/.cursor-plugin/plugin.json to declare skills and mcpServers - Add CURSOR_BOOTSTRAP in build_plugin.py that checks for tools first - Regenerate plugins/treg/skills/treg/SKILL.md with new bootstrap - Add tests for Cursor MCP config and bootstrap The skill now tells agents to check if tools are visible first (they will be after setting TREG_TOKEN), and maps the CLI commands onto the MCP tools. This matches the Codex plugin's approach. Auth verified: - Live https://treg.to/mcp/ returns 401 with OAuth metadata for unauth calls - All 162 MCP auth tests pass (test_mcp.py, test_mcp_oauth.py, test_mcp_install.py) - Token and OAuth flows both work end-to-end Co-authored-by: Jason Zhou <JayZeeDesign@users.noreply.github.com> |
||
|
|
e6dc697ddc |
fix(plugin): the generated SKILL.md copies strip the routed markers
`<!--routed-->` delimits the section /skill.md removes when a deployment sets TREG_ROUTED_DISCOVERY=off. A plugin copy is static and cannot know a deployment's setting, so it keeps the content — but shipping the markers would put visible HTML comments in the product's most-read page. test_plugin caught it. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01189rW3MxcaVTPqxqSZTQot |
||
|
|
128a791349 |
refactor(plugin): move the MiniMax root under plugins/ beside the Cursor root
Co-Authored-By: Claude Fable 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01WBkwAP4DPMJsxBRmG1UGSb |
||
|
|
96b0c05e13 |
feat(plugin): MiniMax Plugin Marketplace listing (skills-only) + validator/zip + submission runbook
Adds minimax/ as a fifth generated shop window: .minimax-plugin/plugin.json (schemaVersion 1, Productivity), icon, and a SKILL.md rendered by build_plugin.py with a CLI-only bootstrap (no treg mcp install — it cannot write a MiniMax config). scripts/minimax_plugin.py pre-runs MiniMax's intake rules and builds a wrapper-free ZIP; both are pinned by tests/test_plugin.py. docs/MINIMAX-PLUGIN.md carries the form values, pipeline, review risks and the App/Connector path for native MCP. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01WBkwAP4DPMJsxBRmG1UGSb |
||
|
|
931a535627 |
feat(plugin): add the DeepSeek Harness bundle
A fourth shop window off the same generated skill. dsh reads no plugin.json:
it installs an npm package whose package.json declares `dsh.bundle`, pointing
at a config layer that composes into the user's profile.
dsh plugin --profile <name> add github:superdesigndev/treg
It is the only surface that can ship the connector AND the CLI path in one
zero-config install. The Claude manifest declares no MCP server because
anything declared there is registered before anyone has signed in - five
always-on tools that 401 on every call. dsh evaluates a row's `disabled`
expression at boot, so the treg MCP row can exist and stay off until
TREG_TOKEN is in the environment: a token-holder gets mcp__treg__* at boot,
everyone else gets a clean install and a skill that walks them to `treg login`.
The dsh variant gets its own bootstrap for two reasons the other three do not
have: the tools are namespaced (`mcp__treg__call`, not `call`), and
`treg mcp install` is the wrong move here - it writes Claude Code / Cursor /
opencode configs, never a dsh profile. `treg mcp install` now says so when it
detects ~/.dsh, and points at the bundle instead.
dsh/index.js is hand-written ESM with no dependencies, both deliberate: a git
install fetches sources rather than build output (a `prepare` script would make
every user allowlist a build first), and an out-of-tree bundle depending on an
in-box @deepseek-ai package installs a second copy that drifts from the host's.
tests/test_plugin.py pins both, plus the no-token gate.
Verified against @deepseek-ai/dsh@0.1.0-rc.6: the bundle installs into a
profile, its layer composes, and the package resolves and returns a valid skill
candidate. The first version of the gate read `!!js !process.env.TREG_TOKEN`,
which took the whole profile down with "duplication of a tag property" - YAML
reads the second `!` as another tag. That is now a test.
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01LsD1EYGHk1an8DLL1yrzqK
|
||
|
|
9ddc5992e3 |
feat(cursor): add the Cursor plugin, in the layout Cursor actually prescribes
We had nothing for Cursor — only .claude-plugin/ and plugin/.codex-plugin/ — so
submitting the repo to their marketplace would have listed something with nothing
installable in it.
Cursor's layout is not Claude Code's, and the difference is the part that bites:
.cursor-plugin/marketplace.json repo root
plugins/treg/.cursor-plugin/plugin.json per-plugin manifest
plugins/treg/skills/treg/SKILL.md
plugins/treg/assets/logo.svg
The plugin root is NEVER the repo root here. Claude Code takes `source: "./"`;
Cursor wants `./plugins/<name>`, matching the folder name. Their marketplace
schema also differs — a metadata{} block instead of a top-level description, and
no $schema — so the two manifests are not copies of each other and should not be
"fixed" to match.
Verified with cursor/plugin-template's OWN validator (scripts/validate-template.mjs
run against this repo): passes, with only the two optional-component warnings the
template emits for itself. A test now pins the same rules so it cannot rot.
build_plugin.py grows a third variant rather than a third source. Claude and
Cursor share one CLI_BOOTSTRAP: both give the agent a terminal, neither ships a
connector, and `treg mcp install` writes a verified config for both. Two
near-identical strings would have drifted; the old Claude-only wording also named
~/.claude/skills explicitly, which is wrong for Cursor, so it is agent-neutral now
and shorter for it.
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_012x16Skh3DNWoqv7LgNxUYF
|
||
|
|
33598ed6c9 |
fix(plugin): three prompts max, and stop asserting tools the upload path strips
Two things the OpenAI upload form told us that nothing local could. BLOCKING: `interface.defaultPrompt` must contain at most three prompts; we had four. Dropped the balance/my_tools one — the three kept cover enrichment, backlinks-with-price, and provider comparison, which is the story that matters. Pinned with a test, since an upload round-trip is an expensive way to rediscover a constant. WORSE, and only an "info" notice on the form: "Uploaded plugins are currently limited to skills only — MCP configuration from mcpServers, mcp.json and .mcp.json will not be included." The Codex skill opened with "You already have treg — use the tools, not the terminal" and a table of five tools. Uploaded that way, every one of those sentences is false, and the first run is an agent hunting for tools that were stripped at submission — the exact failure the bootstrap exists to prevent, just inverted. So the bootstrap now DETECTS instead of asserting: look at your tools first, use them if they are there, install the CLI if they are not. That is correct for both arrival paths rather than betting on one, which matters because the connector route still exists and this manifest still declares it — the directory simply drops it on upload today. Also notes that registering MCP into Codex is manual (config.toml + env-var indirection), so the skill does not send anyone to `treg mcp install`, which does not write Codex. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_012x16Skh3DNWoqv7LgNxUYF |
||
|
|
46459b5b36 |
feat(plugin): the Claude skill wires up CLI + login + MCP on first run
Supersedes the previous take, which told the agent to SKIP `treg mcp install`. That was wrong twice over. Wrong on intent: the wanted end state is CLI + skill + tools, not skill alone. Skills-only is a property of the MANIFEST, not of what the user ends up with. The manifest still declares no connector — anything it declared would be registered at install time, before a human has signed in, i.e. five always-on tools that 401 on every call — and that is what keeps `/plugin install` zero-config. The SKILL then finishes the setup at first run, when a human IS present to sign in. Wrong on fact: it warned that `treg mcp install` would "register a second copy which would fail with 401". cmd_mcp_install does neither. It reads the token from config and sys.exits BEFORE writing anything when there is none, and again on a 401 with "nothing was written". So a premature run is a silent no-op, and after `treg login` the registration simply works. An overstated warning in the product's most-read page is its own kind of wrong. The bootstrap is now an ordered three-step block — install.sh, treg login, treg mcp install — and the order is load-bearing for the reason above: step 3 ahead of step 2 writes nothing, quietly enough that an agent moves on believing the tools exist. A test pins the sequence, and pins the restart note too, since `claude mcp add` does not take effect until the agent restarts. Also noted for the human rather than acted on: install.sh always runs `treg skill bootstrap` (no flag suppresses it), so step 1 drops a second copy of this same skill into ~/.claude/skills/treg/. Harmless but redundant with the plugin. Deleting files under $HOME is not a skill's call to make. Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_012x16Skh3DNWoqv7LgNxUYF |
||
|
|
503099787d |
feat(plugin): ship treg as a skills-only Claude Code plugin, and four doors to one skill
The Codex plugin is built around the MCP connector, and that listing sits in a
review queue. The skill never needed MCP: src/treg/web/skill.md already teaches
an agent to install the CLI, sign in, and call the catalog. So it also ships as
a Claude Code plugin, served from this repo as its own marketplace — live the
moment it merges, with no reviewer in the loop.
/plugin marketplace add superdesigndev/treg
/plugin install treg@treg
build_plugin.py grows a second variant rather than a second source. The two
differ ONLY in the prepended bootstrap, because they arrive in opposite worlds:
the Codex plugin ships tools, so its bootstrap says "use the tools, not the
terminal"; the Claude plugin ships none, so its bootstrap says the opposite —
install the CLI first, and do not ask the human for a provider key. The Claude
copy also gets a `version:` stamped into its frontmatter: ClawHub requires it,
Claude Code ignores it, and that is what lets one file satisfy both registries.
skills/treg/ sits at the REPO ROOT, not under plugin/, because that one path is
simultaneously what Claude Code's loader auto-discovers, what `npx skills add`
resolves, and what `clawhub skill publish` takes. `source: "./"` then makes the
plugin root the repo root — so anything auto-discovered there ships to users,
and a test asserts no stray commands/, agents/ or hooks/ appears.
A fourth door needs no registry at all: /.well-known/skills/index.json plus
/.well-known/skills/treg/SKILL.md make this host a first-class skill source
under the agentskills.io convention (Hermes reads it directly). It routes
through the same _serve_md as /skill.md, so {BASE} templates to the SERVING
host — a self-hosted registry advertises itself, not treg.to. The index
description is read from the skill's frontmatter at request time rather than
duplicated, and a test fails the moment the two disagree.
Two things corrected on the way past:
- the Codex manifest claimed MIT. LICENSE is Apache-2.0 plus a hosted-service
restriction, and a store listing is where a wrong licence does real damage.
- the two listings described the product differently. Both now carry the one
line llms.txt opens with, pinned by a test across all three places it lives.
Docs are in the same commit per CLAUDE.md. Note drift.sh has moved to
.agents/skills/ — the path in CLAUDE.md is stale.
Co-Authored-By: Claude Opus 5 (1M context) <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_012x16Skh3DNWoqv7LgNxUYF
|
||
|
|
8ca54c0c6f |
feat: treg.to is the canonical domain — treg.superdesign.dev becomes the legacy alias
public_url/email_from defaults, render.yaml, CLI fallbacks, packaging (npm/plugin/pyproject), web pages (+canonical tag), docs and context fragments all move to https://treg.to. The legacy host keeps serving the FULL API forever — installed CLIs, skill.md files and .mcp.json configs in the wild hold Bearer tokens pointed at it, and HTTP clients strip Authorization on cross-host redirects. Only browser-facing marketing pages 301 to treg.to (new middleware + tests). Co-Authored-By: Claude Fable 5 <noreply@anthropic.com> |
||
|
|
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> |
||
|
|
e4de297ebb |
feat(plugin): the Codex/ChatGPT plugin — connector plus skill, like OpenAI's own
The listing is the point: traffic from the directory ChatGPT and Codex share, instead of needing to already know to run install.sh. What it ships is BOTH halves, exactly as OpenAI's `github` plugin declares `"skills"` and `"apps"` together: * `.mcp.json` — the connector, pointing at https://treg.superdesign.dev/mcp/ with the token read from TREG_TOKEN. This is what makes the plugin work the moment it is installed. * `skills/tools-registry/SKILL.md` — the judgement. Tools alone would tell a model HOW to call treg and nothing about WHEN it is the right move or how to choose between providers. The skill is GENERATED from src/treg/web/skill.md by scripts/build_plugin.py, and a test fails if the copy drifts. It gains one section the served version does not have: the served skill is written around the `treg` command line, because that is how every other install path reaches treg — a plugin user has no terminal, they have the connector's tools, so the top of the page maps one onto the other and says what to do if the tools are absent (set TREG_TOKEN). Without it the first run is an agent dutifully trying to run a shell command that does not exist, which is the listing's whole funnel spent on an error. `category` and `capabilities` are not guesses: read from OpenAI's own installed manifests under ~/.codex/plugins/cache — github is Developer Tools + ["Interactive","Write"], gmail is Communication. The published docs list neither set of allowed values. Two tests guard what a public listing cannot easily walk back: the copy may never claim routing or automatic failover (treg compares, the agent chooses — the landing page needed that correction once), and the connector must point at production over https, never a dev box or localhost. docs/PLUGIN-SUBMISSION.md carries every field of the submission form, the five positive and three negative test cases it requires, and the blockers — business identity verification, and a SUPPORT URL that treg does not yet have (/support, /contact and /help are all 404). |