user-defined-command — YAML-based command definitions user-defined-command, obsidian-steward, community, YAML-based command definitions, ide skills, Steward user-defined commands, user-defined-command install, user-defined-command for AI agents, Claude Code, Cursor, Windsurf

v1.0.0
GitHub

About this Skill

Perfect for AI Agents needing customized command definitions, such as Cursor, Windsurf, or Claude Code, to enhance their interaction capabilities. User-defined-command is a skill that allows developers to create custom YAML-based command definitions stored as markdown files in the Steward/Commands folder.

Features

Supports YAML code blocks in markdown files
Allows plain text, headings, and other markdown content
Enables creation and editing of valid Steward user-defined commands
Stores command definitions in the Steward/Commands folder
Uses markdown files (.md) for command definitions
Includes command-level fields for customization

# Core Topics

googlicius googlicius
[0]
[0]
Updated: 3/8/2026

Agent Capability Analysis

The user-defined-command skill by googlicius is an open-source community AI agent skill for Claude Code and other IDE workflows, helping agents execute tasks with better context, repeatability, and domain-specific guidance. Optimized for YAML-based command definitions, Steward user-defined commands, user-defined-command install.

Ideal Agent Persona

Perfect for AI Agents needing customized command definitions, such as Cursor, Windsurf, or Claude Code, to enhance their interaction capabilities.

Core Value

Empowers agents to define and edit custom commands stored as markdown files, utilizing YAML-based command definitions, enabling flexible and tailored interactions with the Steward system through the `Steward/Commands` folder.

Capabilities Granted for user-defined-command

Defining custom commands for specific tasks
Editing existing commands to adapt to new requirements
Creating markdown files with YAML code blocks for command definitions

! Prerequisites & Limits

  • Requires access to the `Steward/Commands` folder
  • Commands must be defined in YAML-based markdown files
Labs Demo

Browser Sandbox Environment

⚡️ Ready to unleash?

Experience this Agent in a zero-setup browser environment powered by WebContainers. No installation required.

Boot Container Sandbox

user-defined-command

Install user-defined-command, an AI agent skill for AI agent workflows and automation. Works with Claude Code, Cursor, and Windsurf with one-command setup.

SKILL.md
Readonly

User-Defined Command Skill

This skill enables you to create and edit valid Steward user-defined commands — YAML-based command definitions stored as markdown files in the Steward/Commands folder.

File Format

Each command is a markdown file (.md) containing one or more YAML code blocks. The file can also contain plain text, headings, and other markdown content that can be referenced by system prompts.

YAML Schema

Command-Level Fields

FieldTypeRequiredDescription
command_namestringYesThe name (In kebab-case) to invoke the command (e.g., clean-up invoked as /clean-up)
query_requiredbooleanNoIf true, the command requires user input after the prefix. Default: false
modelstringNoDefault model for all steps (e.g., gpt-4o, gemini-2.5-flash)
system_promptarray of stringsNoAdditional system prompts applied to all steps
use_toolbooleanNoIf false, disables the core tool usage instructions
hiddenbooleanNoIf true, the command does not appear in the autocomplete menu
triggersarray of trigger objectsNoAutomatically execute when file events match criteria
stepsarray of step objectsYesThe sequence of steps to execute

Step-Level Fields

FieldTypeRequiredDescription
namestringNoStep name that activates corresponding tools: read, edit, search, vault, generate, image, speech. Use generate for direct AI response without tools
querystringConditionalThe query to send. Required if query_required is true. Use $from_user as placeholder for user input
system_promptarray of stringsNoAdditional system prompts for this step only
modelstringNoModel override for this step
no_confirmbooleanNoIf true, skips confirmation prompts for this step

Trigger Fields

FieldTypeRequiredDescription
eventsarray of stringsYesEvents to watch: create, modify, delete
foldersarray of stringsNoFolder paths to watch (e.g., ["Inbox", "Daily Notes"])
patternsobjectNoPattern matching criteria (all must match)
patterns.tagsstring or arrayNoTags to match (e.g., "#todo" or ["#todo", "#review"])
patterns.contentstringNoRegex pattern to match file content
patterns.<property>string or arrayNoAny frontmatter property name and value to match

Command Syntax (Direct Tool Calls)

Steps can use command syntax in the query field to invoke tools directly without an AI round trip. This is the preferred approach for deterministic operations.

Syntax

c:<tool> [--arg=value]...
  • c: prefix identifies a direct command call
  • <tool> is a short alias (see reference below)
  • --key=value pairs map to the tool's input schema
  • Multiple commands can be chained with ; separator: c:read --blocks=1; c:conclude
  • Quoted values for strings with spaces: --content="hello world"
  • Comma-separated values for arrays: --files=Note1.md,Note2.md

Command Reference

AliasToolFlags
c:readContent Reading--type, --files, --element, --blocks, --pattern
c:searchSearch--keywords, --filenames, --folders, --properties
c:deleteDelete--artifact, --files
c:listList--folder, --pattern
c:moveMove--artifact, --files, --destination
c:renameRename--artifact, --pattern, --replace
c:grepGrep--pattern, --paths
c:speechSpeech--text
c:imageImage--prompt
c:concludeConclude (stop)

c:read Flags

FlagTypeDefaultDescription
--typestringaboveOne of: above, below, pattern, entire, frontmatter
--filesstring[][]Comma-separated file names to read from
--artifactstringArtifact ID (or latest) to resolve file names from.
--elementstringnullOne of: paragraph, table, code, list, blockquote, image, heading
--blocksnumber1Number of blocks to read. Use -1 for all content from current position
--patternstringRegExp pattern (required when --type=pattern)

c:search Flags

FlagTypeDescription
--keywordsstring[]Comma-separated search terms
--filenamesstring[]Comma-separated file names to search for
--foldersstring[]Comma-separated folder paths to search within
--propertiesjsonProperty filters in name:value format, comma-separated (e.g. tag:todo,status:active)

c:delete Flags

FlagTypeDescription
--artifactstringArtifact ID containing files to delete
--filesstring[]Comma-separated file paths to delete

One of --artifact or --files is required.

c:list Flags

FlagTypeDescription
--folderstringFolder path to list files from
--patternstringRegExp pattern to filter file names

c:move Flags

FlagTypeDescription
--artifactstringArtifact ID containing files to move
--filesstring[]Comma-separated file paths to move
--destinationstringDestination folder path

One of --artifact or --files is required, along with --destination.

c:rename Flags

FlagTypeDescription
--artifactstringArtifact ID containing files to rename
--patternstringPattern to match in file names
--replacestringReplacement text for matched pattern

c:grep Flags

FlagTypeDescription
--patternstringText or RegExp pattern to search for in file content
--pathsstring[]Comma-separated folder paths to search within

Composing Steps

When composing UDC steps, prefer c: command syntax for deterministic operations to avoid unnecessary AI round trips. Reserve natural language queries for steps that require AI reasoning (e.g., content generation, summarization, complex editing decisions).

Use command syntax when the step:

  • Reads content from a known location (c:read)
  • Searches with specific criteria (c:search)
  • Performs file operations: delete, move, rename, list, grep
  • Generates speech or images from known text/prompts (c:speech, c:image)

Use natural language when the step:

  • Needs AI to generate, summarize, or transform content
  • Requires the AI to decide what to edit or how to structure output
  • Involves complex reasoning about the content

When c: syntax is used, the step name is still recommended for tool activation but the query is parsed directly, bypassing the AI entirely.

System Prompt Values

The system_prompt field accepts an array of strings. Each string can be:

  • Plain text: Direct instructions (e.g., 'Always use formal language')
  • Wiki link to a note: '[[Note Name]]' — includes the full content of that note
  • Wiki link to a heading: '[[Note Name#Heading]]' — includes content under that heading only
  • Wiki link to local heading: '[[#Heading]]' — includes content under a heading in the current command file

Placeholders

These placeholders are replaced with actual values at execution time:

  • $from_user — The user's input text
  • $file_name — The file name that triggered the command (for triggered commands)
  • $steward — The Steward folder path
  • $active_file — The file path of the currently active file in the workspace

Examples

Simple multi-step command (with command syntax)

yaml
1command_name: clean-up 2query_required: false 3steps: 4 - name: search 5 query: 'c:search --keywords=Untitled --properties=tag:delete' 6 no_confirm: true 7 - name: vault 8 query: 'c:delete --artifact=latest; c:conclude' 9 no_confirm: true

Simple multi-step command (natural language)

yaml
1command_name: clean-up 2query_required: false 3model: gpt-4o 4steps: 5 - name: search 6 query: 'Notes name starts with Untitled or with tag #delete' 7 - name: vault 8 query: 'Delete them' 9 model: gpt-3.5-turbo

Mixed: command syntax for read, natural language for AI-driven edit

yaml
1command_name: format-lists 2query_required: false 3steps: 4 - name: read 5 query: 'c:read --blocks=-1 --element=list' 6 no_confirm: true 7 - name: edit 8 query: 'Format the list items from the previous step into a clean bulleted list' 9 system_prompt: 10 - 'Rewrite the list using consistent bullet formatting'

Chaining multiple commands in a single step

yaml
1command_name: quick-search-delete 2query_required: false 3steps: 4 - query: 'c:search --keywords=Untitled; c:delete --artifact=latest; c:conclude' 5 no_confirm: true

Question-answering command with system prompt

yaml
1command_name: ask 2query_required: true 3use_tool: false 4system_prompt: 5 - '[[#Instructions]]' 6steps: 7 - query: '$from_user'

Command with step-level system prompts

yaml
1command_name: summarize 2query_required: true 3steps: 4 - name: generate 5 system_prompt: 6 - '[[My Context Note]]' 7 - 'Focus on key takeaways' 8 - 'Use bullet points' 9 query: $from_user

Automated trigger command (with command syntax for read)

yaml
1command_name: generate_flashcards 2query_required: false 3 4triggers: 5 - events: [modify] 6 patterns: 7 tags: '#flashcard-gen' 8 9steps: 10 - name: read 11 query: 'c:read --type=entire --files=$file_name; c:conclude' 12 no_confirm: true 13 - name: edit 14 query: | 15 Generate flashcards from this note content. 16 Format each flashcard as: 17 Q: [question] 18 A: [answer] 19 --- 20 Append the flashcards at the end of the note under a "## Flashcards" heading.

Hidden command (not shown in autocomplete)

yaml
1command_name: internal-helper 2hidden: true 3query_required: true 4steps: 5 - name: generate 6 query: $from_user

Rules

  • Note name should use sentence case: capitalize the first letter with spaces between words (e.g., Clean up vault.md).
  • Do NOT add any heading at the beginning of the note. A short introduction should be the first content in the file.
  • The YAML block MUST be inside a fenced code block with the yaml language tag.
  • command_name and steps are always required.
  • Step name determines which tools are available. Omitting name uses the default tool set.
  • When query_required is true, at least one step must use $from_user in its query.
  • When use_tool is false, the core system prompt with tool instructions is not sent — useful for pure conversational commands.
  • System prompts and instructions referenced via [[#Heading]] should be placed BELOW the YAML code block, not above it.
  • System prompts with wiki links are resolved at execution time. If a linked note or heading does not exist, an error occurs and the command will stop.
  • For triggered commands, ensure the query in steps uses $file_name to reference the triggering file.
  • Multiple triggers can be defined; any matching trigger will execute the command.
  • A command file can contain multiple YAML code blocks, each defining a separate command.
  • Markdown content outside YAML blocks (headings, text, lists) can be referenced by system prompts using [[#Heading]] syntax.
  • When composing UDC steps, prefer c: command syntax for deterministic operations (read, search, delete, move, rename, list, grep, speech, image) to avoid unnecessary AI round trips. Reserve natural language queries for steps that require AI reasoning.

FAQ & Installation Steps

These questions and steps mirror the structured data on this page for better search understanding.

? Frequently Asked Questions

What is user-defined-command?

Perfect for AI Agents needing customized command definitions, such as Cursor, Windsurf, or Claude Code, to enhance their interaction capabilities. User-defined-command is a skill that allows developers to create custom YAML-based command definitions stored as markdown files in the Steward/Commands folder.

How do I install user-defined-command?

Run the command: npx killer-skills add googlicius/obsidian-steward/user-defined-command. It works with Cursor, Windsurf, VS Code, Claude Code, and 19+ other IDEs.

What are the use cases for user-defined-command?

Key use cases include: Defining custom commands for specific tasks, Editing existing commands to adapt to new requirements, Creating markdown files with YAML code blocks for command definitions.

Which IDEs are compatible with user-defined-command?

This skill is compatible with Cursor, Windsurf, VS Code, Trae, Claude Code, OpenClaw, Aider, Codex, OpenCode, Goose, Cline, Roo Code, Kiro, Augment Code, Continue, GitHub Copilot, Sourcegraph Cody, and Amazon Q Developer. Use the Killer-Skills CLI for universal one-command installation.

Are there any limitations for user-defined-command?

Requires access to the `Steward/Commands` folder. Commands must be defined in YAML-based markdown files.

How To Install

  1. 1. Open your terminal

    Open the terminal or command line in your project directory.

  2. 2. Run the install command

    Run: npx killer-skills add googlicius/obsidian-steward/user-defined-command. The CLI will automatically detect your IDE or AI agent and configure the skill.

  3. 3. Start using the skill

    The skill is now active. Your AI agent can use user-defined-command immediately in the current project.

Related Skills

Looking for an alternative to user-defined-command or another community skill for your workflow? Explore these related open-source skills.

View All

widget-generator

Logo of f
f

f.k.a. Awesome ChatGPT Prompts. Share, discover, and collect prompts from the community. Free and open source — self-host for your organization with complete privacy.

149.6k
0
AI

flags

Logo of vercel
vercel

flags is a Next.js feature management skill that enables developers to efficiently add or modify framework feature flags, streamlining React application development.

138.4k
0
Browser

zustand

Logo of lobehub
lobehub

The ultimate space for work and life — to find, build, and collaborate with agent teammates that grow with you. We are taking agent harness to the next level — enabling multi-agent collaboration, effortless agent team design, and introducing agents as the unit of work interaction.

72.8k
0
AI

data-fetching

Logo of lobehub
lobehub

The ultimate space for work and life — to find, build, and collaborate with agent teammates that grow with you. We are taking agent harness to the next level — enabling multi-agent collaboration, effortless agent team design, and introducing agents as the unit of work interaction.

72.8k
0
AI