One skill that answers the question everyone kept asking — “does a tool for this already exist, and if not, how do I get one built?” — grounded in a single live source of truth, never guesswork.
The problem
Cloudflare's internal AI skills and tools were multiplying faster than anyone could keep track of them — and there was no consolidated place to find them.
A skill might live in the shared library. Another might sit in a single team's namespace. A third might be half-built in someone's backlog, or "planned" but not usable yet. When a marketer wanted to know whether a capability already existed, the honest answer was: ask around and hope. That gap created real, repeatable friction:
People rebuilt tools that already existed — or gave up and did the task by hand — because they had no way to know a solution was already live.
Even when a tool existed, "who owns this?" and "which team runs it?" had no reliable answer, so questions and improvement ideas went nowhere.
There was no clear signal for whether something was Live, still In Build, or merely Planned — so people counted on tools that weren't ready.
One question, one front door: “Does a tool for this exist? Is it usable? Who owns it? And if it doesn't exist — how do I get it built?”
Skill Directory closes that gap. Instead of tribal knowledge and Slack archaeology, there is now a single, authoritative lookup that reads the team's live Directory and hands back exactly what exists — and, when nothing does, a frictionless on-ramp to request that it be built. No more dead ends.
In one line
A single, authoritative lookup for Cloudflare's internal tools and skills — “does a tool for X exist, is it usable, and who owns it?” — grounded in the team's live Directory, with a built-in on-ramp to request anything that doesn't exist yet.
“Does a tool for X exist — and who owns it?”
A directory lookup grounded in the team's live Directory spreadsheet. It searches that sheet and hands back the matching tool or skill's full record. When nothing matches, it offers to submit a build request through the Marketing AI Intake.
It replaces “ask around and hope” with one reliable answer. Ask in plain language — by capability, by name, or by owner — and it tells you exactly what exists and whether you can use it today.
It isn't a launcher, and it isn't a search over the whole company. It reads one curated source, reports only what's there, and never runs the tool or invents an answer.
Skill Directory searches the curated Directory sheet — which tracks each tool's status, ownership, and description — and returns exactly what exists. When there's no match, it turns your request into a build submission through the Marketing AI Intake, instead of leaving you at a dead end.
The payload
For every matching tool or skill, it returns a complete record — seven fields, pulled live from the sheet, never invented.
| Field | What it tells you | Source column in the sheet |
|---|---|---|
| Name | The tool or skill's name — the thing you'd actually invoke or ask for. | Agent Name |
| Category | Which functional area it belongs to (e.g. Demand Planning & Budget), so you can browse a domain. | Type/Category |
| Status | Whether it's usable today. Always called out explicitly — a match that isn't Live is flagged as not yet usable. | Status → Live In Build Planned |
| Description | A one-line summary of what the tool actually does, taken verbatim from the sheet. | Description |
| Owner / POC | The person driving or owning it — your point of contact for questions, access, or change requests. | Business Driver |
| Team | The owning team, so you know which group runs and maintains it. | Team |
| Link | The primary link to open or learn more. If the cell is blank, it reports “not listed” rather than guessing a URL. | Link |
Because a tool that's still In Build or only Planned can't be used yet, the skill always surfaces status prominently — a match isn't the same as a green light. If it isn't Live, you're told so directly.
If several entries plausibly match, the skill returns a short ranked shortlist (up to ~5) — each with its name, status, and one-line description — and offers to expand any of them into the full seven-field record above. Most-relevant first.
Grounding
Everything Skill Directory says about a tool comes from one place — the team's Directory spreadsheet — read fresh on every single request. It never answers from memory, from general knowledge, or from whatever skills happen to be loaded in the session.
A Google Sheet named “Master List” is the team's canonical registry of internal tools and skills. Each row is one tool; the columns carry its metadata (name, category, status, description, owner, team, link, notes, visibility).
The skill reads the sheet live through the Google Workspace (Sheets) tool on the CF Portal MCP. It maps columns by their header names — not by position — so the lookup keeps working even if the sheet's columns get reordered.
If a value it needs is genuinely missing, it says which field is missing instead of guessing.
The CF Portal connection can occasionally look “connected” while its calls quietly fail. The skill handles this automatically: on a failed read it reconnects once, then retries — so it keeps working even when a session's access has gone stale, with no manual steps for you. If it still can't reach the sheet, it says so plainly and shares the sheet link rather than fabricating an answer.
If a tool isn't in the sheet, then as far as Skill Directory is concerned it doesn't exist. It will never make up a name, owner, team, or link. Blank cells are reported as “not listed,” never filled in with a guess.
Under the hood
Before trusting any read, the skill makes sure the CF Portal (Google Workspace) connection actually works — reconnecting once and retrying if a call fails.
It pulls the current rows from the Master List tab and identifies the header row so it can map every column by name.
It figures out whether you want a capability (“email QA”), a specific named tool, or a particular field (“who owns the AI intake skill?”).
It fuzzy-matches your request across the Name and Description columns — case-insensitive, keyword and synonym aware — and ranks hits by relevance, exact name matches first.
One strong match → the full seven-field record. Several → a ranked shortlist to pick from. None → it says so plainly and offers the build-request path.
Skill Directory produces exactly two kinds of output: (1) directory match info read from the sheet, or (2) a build-request form link. It never performs the task you asked about, never builds the tool itself, and never produces any other artifact — no docs, decks, tickets, emails, or code.
The fallback
A “no” is never a dead end. When a lookup finds nothing, Skill Directory offers to turn your request into a Marketing AI Intake — a build request that reaches the Marketing AI Programs team for review and prioritization.
The fallback only fires after a genuine no-match and only if you say yes. The skill asks exactly one question — “want me to submit a build request so the team can consider building it?” If you decline, it stops. It never pushes the intake after a successful match.
It doesn't run a long interview. It silently pre-fills as many intake fields as it can from the conversation you already had — the capability you searched for, how you handle it today, the systems you named — and asks only for the handful of things it genuinely can't infer.
The intake reuses Cloudflare's existing Marketing AI Intake Google Form — it never builds a new form. The skill assembles a single pre-filled link with your answers already dropped in, so all you do is open it and review. Submitting that form records your request to the same responses spreadsheet as the standard Marketing AI Intake, so it lands in the same queue the team already reviews.
The pre-filled link is a draft, not a submission. Your request only reaches the team when you open the link and click Submit on the form yourself. The skill makes this explicit every time.
Need something built right now rather than queued for review? The intake points you to marketing-build-request@cloudflare.com for direct help.
Inside the intake
The intake gathers 24 structured fields so reviewers have everything they need to evaluate and prioritize the request. Most are inferred for you; you're only asked for what can't be guessed (typically who you are, scale/impact, stakes, and self-serve readiness).
To route it to the right owners, every request is tagged with a single agent_category:
Skill Directory's build-request fallback and the standalone /ai-intake skill write to the same Google Form and the same responses sheet. Whether a request originates from a failed directory lookup or someone starting an intake directly, it lands in one consistent, reviewable queue.
Trust model
The sheet is the source of truth and is read fresh on each lookup — never from a cached copy or from memory.
Only names, statuses, owners, teams, and links that actually appear in the sheet. Blank cells are reported as “not listed.”
Directory match info, or a build-request link. It never does the task, builds the tool, or produces any other artifact.
“Is there a skill for X?”, “who owns Y?”, “what do we have for Z?” — and it reads the sheet before answering, not the loaded-skills list.
Adapts to reasonable header changes and reordering, so the lookup keeps working as the sheet evolves.
The AI Intake path only runs after a no-match and your explicit yes. It's never pushed after a successful match.
Getting started
You don't have to remember the command — just ask naturally. The skill activates on any request to locate an internal tool or skill.
“Is there a skill for competitor research?” · “What tool do we have for email QA?” · “Do we have something that builds account plans?”
“Where's the email consultant skill?” · “Who owns the AI intake skill?” · “What team runs the campaign analyzer?”
“What do we have under Demand Planning & Budget?” — it lists what exists so you can scan a whole domain.
Type /skill-directory to start a lookup directly — or just describe the tool or skill you're looking for, and it activates automatically.
See it in motion
Quick answers
No. It's a lookup, not a launcher. It tells you what exists — name, status, owner, team, link — and, when nothing exists, offers the build request. It never performs the task or builds the tool itself.
Always current. It reads the live Directory sheet fresh on every request, so results reflect the sheet as it is right now — not a snapshot from earlier in the conversation.
Status is always surfaced. A match that's In Build or Planned is flagged as not yet usable, so you never count on something that isn't ready.
No — the link is a draft with your answers pre-filled. Your request only reaches the team when you open it and click Submit on the Google Form.
/ai-intake directly?None in where it lands — both write to the same form and the same responses sheet. The difference is the on-ramp: Skill Directory's fallback fires automatically after a failed lookup and pre-fills answers from context, while /ai-intake is the standalone interview you can start any time.
No. It only ever returns values present in the sheet. If something isn't in the Directory, it doesn't exist as far as the skill is concerned, and blank fields are reported as “not listed.”