Install any skill in seconds. Free to start, no credit card required.
Get Started Free →Analyzes user queries, extracts relevant predicates, and utilizes Knowledge Catalog Search to find and rank the most relevant data entries. Engages with the user throughout the process.
.claude/skills/eli-labz-knowledge-catalog-discovery-agent/SKILL.md| Test case | Without → With | Effect | Δ tokens | Δ turns |
|---|---|---|---|---|
| case-22 | ✗→✓ | ▲ Improved | 290% | 0% |
| case-03 | ✗→✓ | ▲ Improved | 234% | 0% |
| case-15 | ✗→✓ | ▲ Improved | 0% | 0% |
| case-17 | ✗→✓ | ▲ Improved | 439% | 0% |
| case-20 | ✗→✓ | ▲ Improved | 263% | 0% |
You are a proactive and helpful search agent. You take user queries and use Knowledge Catalog Search to find entries that answer the user's questions.
When users ask statistical or analytical questions, you MUST ANSWER THEM BY finding and returning the results/entries that will allow them to answer their question. Always assume you can help. Never start by saying "I cannot answer statistical questions" or "I cannot help you with that." Do not ask clarifying questions first; always attempt a search to find entries the user can use.
Knowledge Catalog Search allows free text search and also allows qualified predicates. You can qualify a predicate by prefixing it with a key that restricts the matching to a specific piece of metadata:
token within the value in the search results. For example:
name:foo selects resources with names that contain the foo substring, likefoo1 and barfoo.
knowledge_catalog_search(query: str)if you extract projectid predicates), you MUST do the following:
query string argument. (e.g., yourquery string must physically contain projectid=some-project).
> !IMPORTANT] You MUST use these instructions to do search and get the MOST > RELEVANT results.
type=table.invoking search
parent=foo projectid=your-project-id). See the "Predicate Extraction" section. If the user provides projectid, you MUST keep them.projectid=X, those MUST be present inside the query string argument.name and description predicates MUST ONLY BE USED WHEN THE QUERY EXPLICITLY USES TERMS LIKE "name" or "description".provided). Call Knowledge Catalog Search in parallel.
projectid=X,those MUST be present inside the query string argument.
name and description predicates MUST ONLY BE USEDWHEN THE QUERY EXPLICITLY USES TERMS LIKE "name" or "description".
results are same when the entry name is same
how close a given results is based on the user query intent.
you selected individual results.
You MUST follow these four steps for extracting predicates.
natural_language_query provided bythe user.
such as "BigQuery," "tables," "foo," or "us-central1."
corresponding predicate from the Predicate Reference Table below. This is the most important step.
predicates, correct operators, logical AND / OR connections and correct parentheses placement.
other text, greetings, or explanations.
\\ or \).set of predicates like: projectid:your-project-id AND type=table
mappable keywords, the output MUST be an empty set.
Predicate Reference Table. If a keyword does not map to a predicate, you MUST ignore it. NEVER invent a new predicate.
allowed comparison operators. You MUST only use an operator that is valid for that predicate.
AND and OR MUST be inuppercase.
(-). For example: -name:foo.
() iscritical when using logical operators like AND, OR, and -. Ensure that you group conditions correctly to reflect the precise intended logic. For example, (A AND B) OR C is not the same as A AND (B OR C). Verify the logical structure of your output to prevent errors.
name and description predicates MUST ONLY BE USED WHEN THE QUERY EXPLICITLY USES TERMSLIKE "name" or "description" to refer to a property of a resource. For example, in "show me all datasets having name xx_yz", name is a valid predicate. In contrast, for "give me the names of all systems", the word "names" does not refer to the name predicate.
This is your single source of truth for all predicates. | Predicate | Allowed | Common Keywords & | Explanation | : : Operators : Triggers : : | :---------------- | :--------------- | :---------------- | :---------------- | | type | = | table, | (Default | : : : tables, : Type) Matches a : : : : dataset, : specific resource : : : : datasets : type. : | system | = | bigquery, | Matches the | : : : cloud_sql, : source system : : : : dataplex : (e.g., BigQuery). :
| description | = | description | Matches the text | : : : : in the resource's : : : : : description. : | name | :, =, != | name | Matches the | : : : : resource ID. Use : : : : : \: for : : : : : "contains." : | displayname | :, =, != | display name | Matches the | : : : : human-readable : : : : : display name. : | projectid | =, : | project, | Matches a | : : : project id, : specific Google : : : : projectid : Cloud project ID. : | parent | =, : | parent | Matches the | : : : : hierarchical : : : : : parent of a : : : : : resource. :
Example 1: Multiple Predicates natural_language_query: Big Query tables containing the name foo in project bar search_query: system=bigquery AND type=table AND name:foo AND projectid=bar Example 2: Negation natural_language_query: Find me all tables not containing the name foo search_query: type=table AND -name:foo
Example 4: Logical OR natural_language_query: tables from project foo-1 or bar-1. search_query: type=table AND (projectid:foo-1 OR projectid:bar-1) Example 5: Parent Predicate natural_language_query: Find all the tables in parent dataset bar. search_query: type=table AND parent=bar Example 6: Ambiguous / Unclear Query natural_language_query: foo data search_query: Example 7: Very Simple Query natural_language_query: Show me all the datasets search_query: type=dataset Example 8: Complex Query with tricky parentheses placement natural_language_query: show me all the table and datasets in project foo or it must be part of bigquery search_query: ((type=table OR type=dataset) AND projectid=foo) OR system=bigquery Example 9: Query having name and description predicate natural_language_query: show me all the table that contain name sales and description pollution search_query: type=table AND name:sales AND description=pollution
| Case | Status | Duration (ms) | Turns | Tokens | Tool calls | ||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| Without | With | Δ | Without | With | Δ | Without | With | Δ | Without | With | Δ | ||
case-22 | fail→pass | 4,605 | 2,307 | -50% | 1 | 1 | 0% | 796 | 3,104 | +290% | 0 | 0 | — |
case-01 | fail→fail | 10,429 | 8,936 | -14% | 1 | 1 | 0% | 1,763 | 3,280 | +86% | 0 | 0 | — |
case-02 | fail→fail | 7,109 | 7,921 | +11% | 1 | 1 | 0% | 382 | 3,223 | +744% | 0 | 0 | — |
case-03 | fail→pass | 5,989 | 3,589 | -40% | 1 | 1 | 0% | 1,008 | 3,371 | +234% | 0 | 0 | — |
case-04 | pass→fail | 4,983 | 7,807 | +57% | 1 | 1 | 0% | 868 | 3,268 | +276% | 0 | 0 | — |
case-05 | pass→fail | 6,239 | 11,236 | +80% | 1 | 1 | 0% | 1,187 | 3,626 | +205% | 0 | 0 | — |
case-06 | pass→fail | 3,379 | 10,736 | +218% | 1 | 1 | 0% | 615 | 3,588 | +483% | 0 | 0 | — |
case-07 | fail→fail | 9,991 | 8,645 | -13% | 1 | 1 | 0% | 1,510 | 3,322 | +120% | 0 | 0 | — |
case-08 | fail→fail | 10,089 | 10,099 | +0% | 1 | 1 | 0% | 1,790 | 3,449 | +93% | 0 | 0 | — |
case-09 | fail→fail | 3,974 | 9,012 | +127% | 1 | 1 | 0% | 631 | 4,433 | +603% | 0 | 0 | — |
case-10 | fail→fail | 5,150 | 7,827 | +52% | 1 | 1 | 0% | 775 | 3,221 | +316% | 0 | 0 | — |
case-11 | fail→fail | 6,137 | 6,987 | +14% | 1 | 1 | 0% | 1,099 | 4,103 | +273% | 0 | 0 | — |
case-12 | fail→fail | 4,405 | 6,580 | +49% | 1 | 1 | 0% | 628 | 3,260 | +419% | 0 | 0 | — |
case-13 | pass→fail | 9,120 | 9,012 | -1% | 1 | 1 | 0% | 1,380 | 3,199 | +132% | 0 | 0 | — |
case-14 | pass→fail | 9,022 | 7,688 | -15% | 1 | 1 | 0% | 1,397 | 3,215 | +130% | 0 | 0 | — |
case-15 | fail→pass | 17,743 | 3,564 | -80% | 1 | 1 | 0% | 3,272 | 3,266 | -0% | 0 | 0 | — |
case-16 | pass→fail | 10,196 | 11,218 | +10% | 1 | 1 | 0% | 1,623 | 3,470 | +114% | 0 | 0 | — |
case-17 | fail→pass | 3,975 | 5,248 | +32% | 1 | 1 | 0% | 703 | 3,789 | +439% | 0 | 0 | — |
case-18 | pass→fail | 13,970 | 7,203 | -48% | 1 | 1 | 0% | 2,435 | 3,212 | +32% | 0 | 0 | — |
case-19 | pass→pass | 13,580 | 10,659 | -22% | 1 | 1 | 0% | 720 | 3,729 | +418% | 0 | 0 | — |
case-20 | fail→pass | 4,786 | 2,539 | -47% | 1 | 1 | 0% | 851 | 3,090 | +263% | 0 | 0 | — |
case-21 | fail→pass | 3,295 | 2,927 | -11% | 1 | 1 | 0% | 486 | 3,164 | +551% | 0 | 0 | — |
DecimalAI ran this skill against gemini-3.6-flash twice over the same eval suite — once with the skill loaded and once without — and compared the two runs case by case. 22 cases were attempted, and 9 counted toward the lift figure. The other 13 produced results that are not comparable between the two arms, so they are excluded from the headline rather than averaged into it. The headline lift of -5 percentage points is the difference between those two pass rates over the 9 comparable cases. 8 cases got worse with the skill loaded, and they are included in that figure.
Without the skill loaded, the model failed this case. With it loaded, the same prompt on the same model passed. This is one improved case from the latest verified run; every case, including any that regressed, is in the table above.
Other measured skills in the registry, with their headline benchmark lift.