mirror of
https://github.com/google-gemini/gemini-cli.git
synced 2026-04-18 01:00:39 -07:00
feat(core): integrate skill-creator into skill extraction agent (#25421)
This commit is contained in:
@@ -7,11 +7,13 @@
|
||||
import { z } from 'zod';
|
||||
import type { LocalAgentDefinition } from './types.js';
|
||||
import {
|
||||
ACTIVATE_SKILL_TOOL_NAME,
|
||||
EDIT_TOOL_NAME,
|
||||
GLOB_TOOL_NAME,
|
||||
GREP_TOOL_NAME,
|
||||
LS_TOOL_NAME,
|
||||
READ_FILE_TOOL_NAME,
|
||||
SHELL_TOOL_NAME,
|
||||
WRITE_FILE_TOOL_NAME,
|
||||
} from '../tools/tool-names.js';
|
||||
import { PREVIEW_GEMINI_FLASH_MODEL } from '../config/models.js';
|
||||
@@ -152,45 +154,6 @@ function buildSystemPrompt(skillsDir: string): string {
|
||||
'- One-off artifact names: bug IDs, branch names, timestamps, exact incident strings',
|
||||
'',
|
||||
'============================================================',
|
||||
'SKILL FORMAT',
|
||||
'============================================================',
|
||||
'',
|
||||
'Each skill is a directory containing a SKILL.md file with YAML frontmatter',
|
||||
'and optional supporting scripts.',
|
||||
'',
|
||||
'Directory structure:',
|
||||
` ${skillsDir}/<skill-name>/`,
|
||||
' SKILL.md # Required entrypoint',
|
||||
' scripts/<tool>.* # Optional helper scripts (Python stdlib-only or shell)',
|
||||
'',
|
||||
'SKILL.md structure:',
|
||||
'',
|
||||
' ---',
|
||||
' name: <skill-name>',
|
||||
' description: <1-2 lines; include concrete triggers in user-like language>',
|
||||
' ---',
|
||||
'',
|
||||
' ## When to Use',
|
||||
' <Clear trigger conditions and non-goals>',
|
||||
'',
|
||||
' ## Procedure',
|
||||
' <Numbered steps with specific commands, paths, code patterns>',
|
||||
'',
|
||||
' ## Pitfalls and Fixes',
|
||||
' <symptom -> likely cause -> fix; only include observed failures>',
|
||||
'',
|
||||
' ## Verification',
|
||||
' <Concrete success checks>',
|
||||
'',
|
||||
'Supporting scripts (optional but recommended when applicable):',
|
||||
'- Put helper scripts in scripts/ and reference them from SKILL.md',
|
||||
'- Prefer Python (stdlib only) or small shell scripts',
|
||||
'- Make scripts safe: no destructive actions, no secrets, deterministic output',
|
||||
'- Include a usage example in SKILL.md',
|
||||
'',
|
||||
'Naming: kebab-case (e.g., fix-lint-errors, run-migrations).',
|
||||
'',
|
||||
'============================================================',
|
||||
'UPDATING EXISTING SKILLS (PATCHES)',
|
||||
'============================================================',
|
||||
'',
|
||||
@@ -247,20 +210,28 @@ function buildSystemPrompt(skillsDir: string): string {
|
||||
'',
|
||||
`1. Use list_directory on ${skillsDir} to see existing skills.`,
|
||||
'2. If skills exist, read their SKILL.md files to understand what is already captured.',
|
||||
'3. Scan the session index provided in the query. Look for [NEW] sessions whose summaries',
|
||||
'3. Use activate_skill to load the "skill-creator" skill. Follow its design guidance',
|
||||
' (conciseness, progressive disclosure, frontmatter format, bundled resources) when',
|
||||
' writing SKILL.md files. You may also use its init_skill.cjs script to scaffold new',
|
||||
' skill directories and package_skill.cjs to validate finished skills.',
|
||||
' IMPORTANT: You are a background agent with no user interaction. Skip any interactive',
|
||||
' steps in the skill-creator guide (asking clarifying questions, requesting user feedback,',
|
||||
' installation prompts, iteration loops). Use only its format and quality guidance.',
|
||||
'4. Scan the session index provided in the query. Look for [NEW] sessions whose summaries',
|
||||
' hint at workflows that ALSO appear in other sessions (either [NEW] or [old]) or at a',
|
||||
' stable recurring repo workflow. Remember: summary similarity alone is NOT enough.',
|
||||
'4. Apply the minimum signal gate. If recurrence or durability is not visible, report that',
|
||||
'5. Apply the minimum signal gate. If recurrence or durability is not visible, report that',
|
||||
' no skill should be created and finish.',
|
||||
'5. For promising patterns, use read_file on the session file paths to inspect the full',
|
||||
'6. For promising patterns, use read_file on the session file paths to inspect the full',
|
||||
' conversation. Confirm the workflow was actually repeated and validated. Read at least',
|
||||
' two sessions unless the candidate is clearly a stable recurring repo lifecycle workflow.',
|
||||
'6. For each candidate, verify it meets ALL criteria. Before writing, make sure you can',
|
||||
'7. For each candidate, verify it meets ALL criteria. Before writing, make sure you can',
|
||||
' state: future trigger, evidence sessions, recurrence signal, validation signal, and',
|
||||
' why it is not generic.',
|
||||
'7. Write new SKILL.md files or update existing ones in your directory using write_file.',
|
||||
'8. Write new SKILL.md files or update existing ones in your directory.',
|
||||
' Use run_shell_command to run init_skill.cjs for scaffolding and package_skill.cjs for validation.',
|
||||
' For skills that live OUTSIDE your directory, write a .patch file instead (see UPDATING EXISTING SKILLS).',
|
||||
'8. Write COMPLETE files — never partially update a SKILL.md.',
|
||||
'9. Write COMPLETE files — never partially update a SKILL.md.',
|
||||
'',
|
||||
'IMPORTANT: Do NOT read every session. Only read sessions whose summaries suggest a',
|
||||
'repeated pattern or a stable recurring repo workflow worth investigating. Most runs',
|
||||
@@ -274,8 +245,9 @@ function buildSystemPrompt(skillsDir: string): string {
|
||||
* writes reusable SKILL.md files to the project memory directory.
|
||||
*
|
||||
* This agent is designed to run in the background on session startup.
|
||||
* It has restricted tool access (file tools only, no shell or user interaction)
|
||||
* and is prompted to only operate within the skills memory directory.
|
||||
* It has restricted tool access (file tools, shell, and skill activation — no
|
||||
* user interaction) and is prompted to only operate within the skills memory
|
||||
* directory.
|
||||
*/
|
||||
export const SkillExtractionAgent = (
|
||||
skillsDir: string,
|
||||
@@ -309,12 +281,14 @@ export const SkillExtractionAgent = (
|
||||
},
|
||||
toolConfig: {
|
||||
tools: [
|
||||
ACTIVATE_SKILL_TOOL_NAME,
|
||||
READ_FILE_TOOL_NAME,
|
||||
WRITE_FILE_TOOL_NAME,
|
||||
EDIT_TOOL_NAME,
|
||||
LS_TOOL_NAME,
|
||||
GLOB_TOOL_NAME,
|
||||
GREP_TOOL_NAME,
|
||||
SHELL_TOOL_NAME,
|
||||
],
|
||||
},
|
||||
get promptConfig() {
|
||||
|
||||
Reference in New Issue
Block a user