Conversation
These two flows lived only in agent-z (the Zuplo Portal assistant) as TypeScript prompt fragments, so coding agents working in a Zuplo repo had no access to them and any fix had to be made twice. Move the product truth here — the setup order and the two halves of a GraphQL endpoint — so there is one copy for every host to read. Both are written host-neutral: they say what to configure and in what order, and leave how a choice is presented or a build is run to the host. agent-z now vendors these files instead of carrying its own wording. Registered in the zuplo-skills bundle by sync-skill-metadata.sh. The plugin-validation smoke test asserts the bundle's skill roster verbatim, so its grep moves from 3 skills to 5. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01GTQhJZC5BzmfPVBYYSwRSg
The AI Gateway guidance lived in agent-z's base system prompt, so it reached the Portal assistant and nothing else — an agent wiring an app against a gateway in a repo had none of it. The facts that actually cost people time are here now: that models are addressed `providerLabel/model` and the prefix is the provider configuration's name rather than the vendor, that an app's request URL comes from the app and must not be constructed, that the policy chain order is load-bearing, and that gateway and team budgets apply to an app with no budget policy of its own. Grounded in the AI Gateway docs rather than the Portal's own wording, and deliberately silent on the two gateway generations: the public docs describe only the per-app URL shape, so the skill says to read the URL from the app — which is the advice that holds either way — instead of publishing a generational claim the docs do not support. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_01GTQhJZC5BzmfPVBYYSwRSg
Contributor
There was a problem hiding this comment.
Pull request overview
Adds three new Zuplo-focused agent skills (project setup, GraphQL endpoints, and AI Gateway) and wires them into the repository’s documentation and Claude marketplace/plugin validation so they ship and validate alongside existing skills.
Changes:
- Add new skills:
zuplo-project-setup,zuplo-graphql, andzuplo-ai-gateway. - Update skill catalogs/docs (
README.md,AGENTS.md) and Claude marketplace metadata to include the new skills. - Update CI plugin validation to assert the expanded Zuplo skill set is installed.
Reviewed changes
Copilot reviewed 7 out of 7 changed files in this pull request and generated 4 comments.
Show a summary per file
| File | Description |
|---|---|
| skills/zuplo-project-setup/SKILL.md | New step-by-step setup skill for bootstrapping a gateway and adding core policies. |
| skills/zuplo-graphql/SKILL.md | New skill for configuring GraphQL routes plus Zudoku GraphQL portal plugin. |
| skills/zuplo-ai-gateway/SKILL.md | New skill describing AI Gateway concepts, policy chains, usage limits, and client calling patterns. |
| README.md | Adds the new skills to the repository’s listed inventory. |
| AGENTS.md | Updates repository structure table to include the new skill directories. |
| .github/workflows/plugin-validation.yaml | Updates validation expectations from 3 to 6 Zuplo skills. |
| .claude-plugin/marketplace.json | Adds the new skill directories to the Claude marketplace plugin’s skills list. |
Suppressed comments (2)
skills/zuplo-graphql/SKILL.md:22
- This section refers to
routes.oas.json, but the actual file path used throughout the repo isconfig/routes.oas.json. Keeping the path consistent reduces the chance users try editing a non-existent file.
**The developer portal does not document GraphQL automatically the way it
documents OpenAPI routes.** OpenAPI operations come from `routes.oas.json`,
which the portal already reads; a GraphQL schema lives behind the endpoint and
skills/zuplo-ai-gateway/SKILL.md:80
- The curl example also hard-codes
openai/gpt-5-mini, which may not be routable in a given gateway. Using a placeholder here aligns with the earlier guidance to read supported model IDs from the catalog.
-d '{
"model": "openai/gpt-5-mini",
"messages": [{ "role": "user", "content": "Hello, world!" }]
}'
💡 Add a code-review agent skill or configure MCP servers for context-aware, tailored reviews. Learn more in the docs.
Comment on lines
+46
to
+49
| **The prefix is the name given to the provider configuration, not the vendor.** | ||
| A provider labelled `openai` yields `openai/gpt-5-mini`; label the same vendor | ||
| `openai-eu` and its models are `openai-eu/gpt-5-mini`. Two configurations of one | ||
| vendor — different keys, regions or accounts — are told apart by exactly this. |
Comment on lines
+102
to
+105
| **The recommended order is Model Filtering → Fallback Model → Budgets and Costs | ||
| → Semantic Cache, and the order is load-bearing:** budgets after the fallback so | ||
| an exceeded budget can route to the fallback model instead of failing, and the | ||
| cache after budgets so cache hits still count toward request limits. |
Comment on lines
+2
to
+4
| name: zuplo-graphql | ||
| description: "Use when adding or fixing a GraphQL endpoint on a Zuplo API gateway, which always means two things together — a proxy route in routes.oas.json marked x-graphql so GraphQL-aware policies apply, and the Zudoku GraphQL plugin registered in the developer portal config so the schema and playground are documented. Covers the route handlers, the plugin options, and the GraphQL-specific policies." | ||
| license: MIT |
Comment on lines
+104
to
+109
| 3. Add the policy definition under `policies.policies` in | ||
| `config/routes.oas.json`. | ||
| 4. **Reference it from the routes.** A policy that is defined but not listed in | ||
| a route's `policies.inbound` array does nothing — this is the single most | ||
| common setup mistake. Add the reference to every route that should enforce | ||
| it. |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
No description provided.