Documentation
¶
Index ¶
- Constants
- type Agent
- type Argument
- type BaseFrontMatter
- type Block
- type CommandFrontMatter
- type Context
- type Input
- type MCPServerConfig
- type MCPServerConfigs
- type Markdown
- type Option
- func WithAgent(agent Agent) Option
- func WithLogger(logger *slog.Logger) Option
- func WithManifestURL(manifestURL string) Option
- func WithParams(params Params) Option
- func WithResume(resume bool) Option
- func WithSearchPaths(paths ...string) Option
- func WithSelectors(selectors Selectors) Option
- func WithUserPrompt(userPrompt string) Option
- type Params
- type Result
- type RuleFrontMatter
- type RuleMarkdown
- type Selectors
- type SlashCommand
- type Task
- type TaskFrontMatter
- type TaskMarkdown
- type Text
- type TextLine
- type TransportType
Constants ¶
const FreeTextParamName = "text"
FreeTextParamName is the parameter name used for the text content in free-text tasks
const FreeTextTaskName = "free-text"
FreeTextTaskName is the task name used for free-text prompts
Variables ¶
This section is empty.
Functions ¶
This section is empty.
Types ¶
type Agent ¶ added in v0.0.17
type Agent string
Agent represents an AI coding agent
const ( AgentCursor Agent = "cursor" AgentOpenCode Agent = "opencode" AgentCopilot Agent = "copilot" AgentClaude Agent = "claude" AgentGemini Agent = "gemini" AgentAugment Agent = "augment" AgentWindsurf Agent = "windsurf" AgentCodex Agent = "codex" )
Supported agents
func ParseAgent ¶ added in v0.0.17
ParseAgent parses a string into an Agent type
func (Agent) MatchesPath ¶ added in v0.0.17
MatchesPath returns true if the given path matches any of the agent's patterns
func (Agent) PathPatterns ¶ added in v0.0.17
PathPatterns returns the path patterns associated with this agent
func (Agent) ShouldExcludePath ¶ added in v0.0.18
ShouldExcludePath returns true if the given path should be excluded based on this agent Empty agent means no exclusion
func (Agent) UserRulePath ¶ added in v0.0.24
UserRulePath returns the primary user-level rules path for this agent relative to home directory. Returns an empty string if the agent is not set. The path is relative and should be joined with the home directory.
type Argument ¶ added in v0.0.22
type Argument struct {
Key string `parser:"(@Term Assign)?"`
Value string `parser:"(@String | @Term)"`
}
Argument represents either a named (key=value) or positional argument
type BaseFrontMatter ¶ added in v0.0.18
BaseFrontMatter represents parsed YAML frontmatter from markdown files
type Block ¶ added in v0.0.22
type Block struct {
SlashCommand *SlashCommand `parser:"@@"`
Text *Text `parser:"| @@"`
}
Block represents either a slash command or text content
type CommandFrontMatter ¶ added in v0.0.22
type CommandFrontMatter struct {
BaseFrontMatter `yaml:",inline"`
// ExpandParams controls whether parameter expansion should occur
// Defaults to true if not specified
ExpandParams *bool `yaml:"expand,omitempty" json:"expand,omitempty"`
}
CommandFrontMatter represents the frontmatter fields for command files. Previously this was an empty placeholder struct, but now supports the expand field to control parameter expansion behavior in command content.
func (*CommandFrontMatter) UnmarshalJSON ¶ added in v0.0.23
func (c *CommandFrontMatter) UnmarshalJSON(data []byte) error
UnmarshalJSON custom unmarshaler that populates both typed fields and Content map
type Context ¶
type Context struct {
// contains filtered or unexported fields
}
Context holds the configuration and state for assembling coding context
type Input ¶ added in v0.0.22
type Input struct {
Blocks []Block `parser:"@@*"`
}
Input is the top-level wrapper for parsing
type MCPServerConfig ¶ added in v0.0.18
type MCPServerConfig struct {
// Type specifies the connection protocol.
// Values: "stdio", "sse", "http".
Type TransportType `json:"type,omitempty" yaml:"type,omitempty"`
// Command is the executable to run (e.g. "npx", "docker").
// Required for "stdio" type.
Command string `json:"command,omitempty" yaml:"command,omitempty"`
// Args is an array of arguments for the command.
Args []string `json:"args,omitempty" yaml:"args,omitempty"`
// Env defines environment variables for the server process.
Env map[string]string `json:"env,omitempty" yaml:"env,omitempty"`
// URL is the endpoint for "http" or "sse" types.
// Required for remote connections.
URL string `json:"url,omitempty" yaml:"url,omitempty"`
// Headers contains custom HTTP headers (e.g. {"Authorization": "Bearer ..."}).
// Used for "http" and "sse" types.
Headers map[string]string `json:"headers,omitempty" yaml:"headers,omitempty"`
// Content holds arbitrary additional fields from YAML/JSON that aren't in the struct
Content map[string]any `json:"-" yaml:",inline"`
}
MCPServerConfig defines the common configuration fields supported by both platforms. It also supports arbitrary additional fields via the Content map.
func (*MCPServerConfig) UnmarshalJSON ¶ added in v0.0.25
func (m *MCPServerConfig) UnmarshalJSON(data []byte) error
UnmarshalJSON custom unmarshaler that populates both typed fields and Content map
type MCPServerConfigs ¶ added in v0.0.21
type MCPServerConfigs map[string]MCPServerConfig
MCPServerConfigs maps server names to their configurations.
type Markdown ¶
type Markdown[T any] struct { FrontMatter T // Parsed YAML frontmatter Content string // Expanded content of the markdown Tokens int // Estimated token count }
Markdown represents a markdown file with frontmatter and content
type Option ¶
type Option func(*Context)
Option is a functional option for configuring a Context
func WithAgent ¶ added in v0.0.17
WithAgent sets the target agent, which excludes that agent's own rules
func WithManifestURL ¶ added in v0.0.20
WithManifestURL sets the manifest URL
func WithResume ¶
WithResume enables resume mode, which skips rule discovery and bootstrap scripts
func WithSearchPaths ¶ added in v0.0.20
WithSearchPaths adds one or more search paths
func WithSelectors ¶
WithSelectors sets the selectors
func WithUserPrompt ¶ added in v0.0.24
WithUserPrompt sets the user prompt to append to the task
type Params ¶
Params is a map of parameter key-value pairs for template substitution
func ParseParams ¶ added in v0.0.19
ParseParams parses a string containing key=value pairs separated by spaces. Values must be quoted with double quotes, and quotes can be escaped. Unquoted values are treated as an error. Examples:
- `key1="value1" key2="value2"`
- `key1="value with spaces" key2="value2"`
- `key1="value with \"escaped\" quotes"`
type Result ¶
type Result struct {
Rules []Markdown[RuleFrontMatter] // List of included rule files
Task Markdown[TaskFrontMatter] // Task file with frontmatter and content
Tokens int // Total token count
Agent Agent // The agent used (from task or -a flag)
}
Result holds the assembled context from running a task
func (*Result) MCPServers ¶ added in v0.0.18
func (r *Result) MCPServers() MCPServerConfigs
MCPServers returns all MCP servers from both rules and the task. Servers from the task take precedence over servers from rules. If multiple rules define the same server name, the behavior is non-deterministic.
type RuleFrontMatter ¶ added in v0.0.18
type RuleFrontMatter struct {
BaseFrontMatter `yaml:",inline"`
// TaskNames specifies which task(s) this rule applies to
// Array of task names for OR logic
TaskNames []string `yaml:"task_names,omitempty" json:"task_names,omitempty"`
// Languages specifies which programming language(s) this rule applies to
// Array of languages for OR logic (e.g., ["go", "python"])
Languages []string `yaml:"languages,omitempty" json:"languages,omitempty"`
// Agent specifies which AI agent this rule is intended for
Agent string `yaml:"agent,omitempty" json:"agent,omitempty"`
// MCPServers maps server names to their configurations
// Metadata only, does not filter
MCPServers MCPServerConfigs `yaml:"mcp_servers,omitempty" json:"mcp_servers,omitempty"`
// RuleName is an optional identifier for the rule file
RuleName string `yaml:"rule_name,omitempty" json:"rule_name,omitempty"`
// ExpandParams controls whether parameter expansion should occur
// Defaults to true if not specified
ExpandParams *bool `yaml:"expand,omitempty" json:"expand,omitempty"`
}
RuleFrontMatter represents the standard frontmatter fields for rule files
func (*RuleFrontMatter) UnmarshalJSON ¶ added in v0.0.18
func (r *RuleFrontMatter) UnmarshalJSON(data []byte) error
UnmarshalJSON custom unmarshaler that populates both typed fields and Content map
type RuleMarkdown ¶ added in v0.0.18
type RuleMarkdown = Markdown[RuleFrontMatter]
RuleMarkdown is a Markdown with RuleFrontMatter
type Selectors ¶
Selectors stores selector key-value pairs where values are stored in inner maps Multiple values for the same key use OR logic (match any value in the inner map) Each value can be represented exactly once per key
func (*Selectors) GetValue ¶
GetValue returns true if the given value exists in the inner map for the given key. Returns false if the key doesn't exist or the value is not present.
func (*Selectors) MatchesIncludes ¶
func (includes *Selectors) MatchesIncludes(frontmatter BaseFrontMatter) bool
MatchesIncludes returns true if the frontmatter matches all include selectors. If a key doesn't exist in frontmatter, it's allowed. Multiple values for the same key use OR logic (matches if frontmatter value is in the inner map). This enables combining CLI selectors (-s flag) with task frontmatter selectors: both are added to the same Selectors map, creating an OR condition for rules to match.
type SlashCommand ¶ added in v0.0.22
type SlashCommand struct {
Name string `parser:"Slash @Term"`
Arguments []Argument `parser:"(Whitespace @@)* Whitespace? Newline?"`
}
SlashCommand represents a command starting with "/" that ends with a newline or EOF The newline is optional to handle EOF, but when present, prevents matching inline slashes
func (*SlashCommand) Params ¶ added in v0.0.22
func (s *SlashCommand) Params() map[string]string
Params converts the slash command's arguments into a parameter map Returns a map with: - "ARGUMENTS": space-separated string of all arguments - "1", "2", etc.: positional parameters (1-indexed) - named parameters: key-value pairs from key="value" arguments
func (SlashCommand) String ¶ added in v0.0.22
func (s SlashCommand) String() string
String returns the original text representation of a slash command
type Task ¶ added in v0.0.22
type Task []Block
Task represents a parsed task, which is a sequence of blocks
type TaskFrontMatter ¶ added in v0.0.18
type TaskFrontMatter struct {
BaseFrontMatter `yaml:",inline"`
// Agent specifies the default agent if not specified via -a flag
// This is not used for selecting tasks or rules, only as a default
Agent string `yaml:"agent,omitempty" json:"agent,omitempty"`
// Languages specifies the programming language(s) for filtering rules
// Array of languages for OR logic (e.g., ["go", "python"])
Languages []string `yaml:"languages,omitempty" json:"languages,omitempty"`
// Model specifies the AI model identifier
// Does not filter rules, metadata only
Model string `yaml:"model,omitempty" json:"model,omitempty"`
// SingleShot indicates whether the task runs once or multiple times
// Does not filter rules, metadata only
SingleShot bool `yaml:"single_shot,omitempty" json:"single_shot,omitempty"`
// Timeout specifies the task timeout in time.Duration format (e.g., "10m", "1h")
// Does not filter rules, metadata only
Timeout string `yaml:"timeout,omitempty" json:"timeout,omitempty"`
// MCPServers maps server names to their configurations
// Does not filter rules, metadata only
MCPServers MCPServerConfigs `yaml:"mcp_servers,omitempty" json:"mcp_servers,omitempty"`
// Resume indicates if this task should be resumed
Resume bool `yaml:"resume,omitempty" json:"resume,omitempty"`
// Selectors contains additional custom selectors for filtering rules
Selectors map[string]any `yaml:"selectors,omitempty" json:"selectors,omitempty"`
// ExpandParams controls whether parameter expansion should occur
// Defaults to true if not specified
ExpandParams *bool `yaml:"expand,omitempty" json:"expand,omitempty"`
}
TaskFrontMatter represents the standard frontmatter fields for task files
func (*TaskFrontMatter) UnmarshalJSON ¶ added in v0.0.18
func (t *TaskFrontMatter) UnmarshalJSON(data []byte) error
UnmarshalJSON custom unmarshaler that populates both typed fields and Content map
type TaskMarkdown ¶ added in v0.0.18
type TaskMarkdown = Markdown[TaskFrontMatter]
TaskMarkdown is a Markdown with TaskFrontMatter
type Text ¶ added in v0.0.22
type Text struct {
Lines []TextLine `parser:"@@+"`
}
Text represents a block of text It can span multiple lines, consuming line content and newlines But it will stop before a newline that's followed by a slash (potential command)
type TextLine ¶ added in v0.0.22
type TextLine struct {
NonSlashStart []string `parser:"(@Term | @String | @Assign | @Whitespace)"` // First token can't be Slash
RestOfLine []string `parser:"(@Term | @String | @Slash | @Assign | @Whitespace)*"` // Rest can include Slash
NewlineOpt string `parser:"@Newline?"`
}
TextLine is a single line of text content (not starting with a slash) It matches tokens until the end of the line
type TransportType ¶ added in v0.0.18
type TransportType string
TransportType defines the communication protocol used by the server. Supported by both Claude and Cursor.
const ( // TransportTypeStdio is for local processes (executables). TransportTypeStdio TransportType = "stdio" // TransportTypeSSE is for Server-Sent Events (Remote). // Note: Claude Code prefers HTTP over SSE, but supports it. TransportTypeSSE TransportType = "sse" // TransportTypeHTTP is for standard HTTP/POST interactions. TransportTypeHTTP TransportType = "http" )