diff --git a/cmd/internal/skills/command.go b/cmd/internal/skills/command.go index 8c732bb4f13..b6847f3f978 100644 --- a/cmd/internal/skills/command.go +++ b/cmd/internal/skills/command.go @@ -34,11 +34,12 @@ import ( // skillsCmd is the command for generating skills. type skillsCmd struct { *cobra.Command - name string - description string - toolset string - outputDir string - licenseHeader string + name string + description string + toolset string + outputDir string + licenseHeader string + additionalNotes string } // NewCommand creates a new Command. @@ -57,6 +58,7 @@ func NewCommand(opts *internal.ToolboxOptions) *cobra.Command { cmd.Flags().StringVar(&cmd.toolset, "toolset", "", "Name of the toolset to convert into a skill. If not provided, all tools will be included.") cmd.Flags().StringVar(&cmd.outputDir, "output-dir", "skills", "Directory to output generated skills") cmd.Flags().StringVar(&cmd.licenseHeader, "license-header", "", "Optional license header to prepend to generated node scripts.") + cmd.Flags().StringVar(&cmd.additionalNotes, "additional-notes", "", "Additional notes to add under the Usage section of the generated SKILL.md") _ = cmd.MarkFlagRequired("name") _ = cmd.MarkFlagRequired("description") @@ -185,7 +187,7 @@ func run(cmd *skillsCmd, opts *internal.ToolboxOptions) error { } // Generate SKILL.md - skillContent, err := generateSkillMarkdown(cmd.name, cmd.description, allTools, parser.EnvVars) + skillContent, err := generateSkillMarkdown(cmd.name, cmd.description, cmd.additionalNotes, allTools, parser.EnvVars) if err != nil { errMsg := fmt.Errorf("error generating SKILL.md content: %w", err) opts.Logger.ErrorContext(ctx, errMsg.Error()) diff --git a/cmd/internal/skills/generator.go b/cmd/internal/skills/generator.go index 1d56fd62a3a..c19541f04b8 100644 --- a/cmd/internal/skills/generator.go +++ b/cmd/internal/skills/generator.go @@ -38,6 +38,9 @@ All scripts can be executed using Node.js. Replace ` + "`" + `` + "` **PowerShell:** ` + "`" + `node /scripts/.js '{\"\": \"\"}'` + "`" + ` +{{if .AdditionalNotes}} +{{.AdditionalNotes}} +{{end}} ## Scripts @@ -61,13 +64,14 @@ type toolTemplateData struct { type skillTemplateData struct { SkillName string SkillDescription string + AdditionalNotes string Tools []toolTemplateData } // generateSkillMarkdown generates the content of the SKILL.md file. // It includes usage instructions and a reference section for each tool in the skill, // detailing its description and parameters. -func generateSkillMarkdown(skillName, skillDescription string, toolsMap map[string]tools.Tool, envVars map[string]string) (string, error) { +func generateSkillMarkdown(skillName, skillDescription, additionalNotes string, toolsMap map[string]tools.Tool, envVars map[string]string) (string, error) { var toolsData []toolTemplateData // Order tools based on name @@ -96,6 +100,7 @@ func generateSkillMarkdown(skillName, skillDescription string, toolsMap map[stri data := skillTemplateData{ SkillName: skillName, SkillDescription: skillDescription, + AdditionalNotes: additionalNotes, Tools: toolsData, } diff --git a/cmd/internal/skills/generator_test.go b/cmd/internal/skills/generator_test.go index 333cd2e79ac..3c8ad2dfde0 100644 --- a/cmd/internal/skills/generator_test.go +++ b/cmd/internal/skills/generator_test.go @@ -183,7 +183,7 @@ func TestGenerateSkillMarkdown(t *testing.T) { }, } - got, err := generateSkillMarkdown("MySkill", "My Description", toolsMap, nil) + got, err := generateSkillMarkdown("MySkill", "My Description", "Some extra notes", toolsMap, nil) if err != nil { t.Fatalf("generateSkillMarkdown() error = %v", err) } @@ -197,6 +197,7 @@ func TestGenerateSkillMarkdown(t *testing.T) { "`node /scripts/.js '{\"\": \"\"}'`", "**PowerShell:**", "`node /scripts/.js '{\"\": \"\"}'`", + "Some extra notes", "## Scripts", "### tool1", "First tool", diff --git a/docs/en/how-to/generate_skill.md b/docs/en/how-to/generate_skill.md index c3be924ce2c..076a835c07f 100644 --- a/docs/en/how-to/generate_skill.md +++ b/docs/en/how-to/generate_skill.md @@ -28,7 +28,8 @@ toolbox skills-generate \ --toolset \ --description \ --output-dir \ - --license-header + --license-header \ + --additional-notes ``` - ``: Can be `--tools-file`, `--tools-files`, `--tools-folder`, and `--prebuilt`. See the [CLI Reference](../reference/cli.md) for details. @@ -37,6 +38,7 @@ toolbox skills-generate \ - `--toolset`: (Optional) Name of the toolset to convert into a skill. If not provided, all tools will be included. - `--output-dir`: (Optional) Directory to output generated skills (default: "skills"). - `--license-header`: (Optional) Optional license header to prepend to generated node scripts. +- `--additional-notes`: (Optional) Additional notes to add under the Usage section of the generated SKILL.md. {{< notice note >}} **Note:** The `` must follow the Agent Skill [naming convention](https://agentskills.io/specification): it must contain only lowercase alphanumeric characters and hyphens, cannot start or end with a hyphen, and cannot contain consecutive hyphens (e.g., `my-skill`, `data-processing`). diff --git a/docs/en/reference/cli.md b/docs/en/reference/cli.md index 7c292afa063..41c179b4951 100644 --- a/docs/en/reference/cli.md +++ b/docs/en/reference/cli.md @@ -71,6 +71,7 @@ toolbox skills-generate --name --description --toolset