diff --git a/skills/querying-documentation/SKILL.md b/skills/querying-documentation/SKILL.md index 70b8d3d7c21e9fab279dd975745c80c07449a6d1..c8d4b19ae290b0b645ce728a7e7ba1d796c5124a 100644 --- a/skills/querying-documentation/SKILL.md +++ b/skills/querying-documentation/SKILL.md @@ -1,12 +1,31 @@ --- name: querying-documentation -description: Invokes an agent to search specific sets of language/framework documentation and answer moderately complex queries. Use for exploring packages, asking about overall usage, and combining symbols across packages in a doc set. -compatibility: Requires Fish, doc-agent Fish function, synu Fish plugin +description: Spawns a focused subagent to query language/framework documentation. Use for complex questions requiring exploration across multiple symbols, external library APIs, or understanding how to combine types from different packages. Currently supports Go; more doc sets may be added later. +compatibility: Requires Fish and synu Fish plugin license: AGPL-3.0-or-later metadata: author: Amolith --- -`fish -c 'doc-agent'` spawns focused agents to trawl through docs for specific languages/tools. These agents have restricted tool access. List the available doc sets and see `doc-agent` usage by running `fish -c 'doc-agent -h'`. Your queries must include specific package or module references. Ask few questions, preferably one, per invocation. They must be precise, clear, high quality questions which elicit clear answers. A too-brief example query might be "Check path.to/module for how to use module.Type in module.Method". +Invoke with `fish path/to/skills/querying-documentation/scripts/query.fish -s ''`. Use the absolute path so you can run it from the project directory where `go doc` will work. -Refer to [installing-doc-agent.md](references/installing-doc-agent.md) if it's unavailable. +Run with `-h` to see available doc sets. + +These agents have restricted tool access—they can only query docs, not read files or search the web. Write thorough questions that justify the cost; simple lookups you can answer with `go doc` yourself. + +## Examples + +```bash +# Combining stdlib with external library +fish path/to/skills/querying-documentation/scripts/query.fish -s go 'How would I use golang.org/x/sync/errgroup together with context.WithCancel to run parallel HTTP requests that all cancel if any fails?' + +# Understanding relationships across an external library +fish path/to/skills/querying-documentation/scripts/query.fish -s go 'In github.com/charmbracelet/bubbletea, how do Model, Cmd, and Msg relate? What does Update return and why?' + +# Exploring implementation patterns +fish path/to/skills/querying-documentation/scripts/query.fish -s go 'How do the io.Reader wrappers (bufio.Reader, io.LimitReader, io.TeeReader) compose? Show how to chain them for reading a limited, buffered copy of a stream.' +``` + +--- + +Refer to [dependencies.md](references/dependencies.md) if dependencies are missing. diff --git a/skills/querying-documentation/references/dependencies.md b/skills/querying-documentation/references/dependencies.md new file mode 100644 index 0000000000000000000000000000000000000000..50b3930ae4ea8c8a3394b9d57818e8c1615ca84f --- /dev/null +++ b/skills/querying-documentation/references/dependencies.md @@ -0,0 +1 @@ +For synu installation, see https://git.secluded.site/agent-skills/blob/main/skills/invoking-subagents/references/installing-synu.md?raw=1 diff --git a/skills/querying-documentation/references/installing-doc-agent.md b/skills/querying-documentation/references/installing-doc-agent.md deleted file mode 100644 index 6c93dc7afa46eb310351926ee6cf644a8fbc52f8..0000000000000000000000000000000000000000 --- a/skills/querying-documentation/references/installing-doc-agent.md +++ /dev/null @@ -1,3 +0,0 @@ -Yoink it from https://git.secluded.site/yadr/blob/main/dot_config/private_fish/functions/doc-agent.fish?raw=1 into ~/.config/fish/functions/doc-agent.fish - -doc-agent also relies on synu. Refer to https://git.secluded.site/agent-skills/blob/main/invoking-subagents/references/installing-synu.md?raw=1 if it's unavailable. diff --git a/skills/querying-documentation/scripts/query.fish b/skills/querying-documentation/scripts/query.fish new file mode 100644 index 0000000000000000000000000000000000000000..cd7548b48f3adecfdd991e095a8bdb39dc0e9d20 --- /dev/null +++ b/skills/querying-documentation/scripts/query.fish @@ -0,0 +1,85 @@ +function doc-agent --description "Invoke Synclaude as a documentation-focused sub-agent" + # Define available docsets + set -l available_sets go + + # Docset: go + set -l go_tools "go doc" + set -l go_allowed_tools "Bash(go doc:*)" + # These aren't global because WebFetch might be useful later for + # obtaining docs from pages that don't have CLI tooling + set -l go_disallowed_tools "Bash(*) Explore Edit Read WebFetch WebSearch Glob Grep NotebookEdit NotebookRead SlashCommand Task Write" + set -l go_usage "\ +Looking up Go stdlib, types, functions, methods, interfaces, or third-party \ +package APIs, asking about usage, combining functions from across APIs, etc." + set -l go_system_prompt "\ +You are a focused documentation agent for Go. Use 'go doc' to look up \ +information about Go packages, types, functions, methods, and other symbols. \ +Look at specific symbols rather than reading entire packages unless necessary \ +to understand context. Answer queries thoroughly. You are disallowed from \ +running any tool but Bash to execute `go doc` subcommands. You _must_ use\ +`go doc` to answer the query and nothing else." + + argparse 'h/help' 's/set=' 'm/model=' -- $argv + or return 1 + + # Show help if requested + if set -q _flag_help + echo "Usage: doc-agent -s ''" + echo + echo "Options:" + echo " -s, --set Documentation set to use (required)" + echo " -h, --help Show this help message" + echo + echo "Available documentation sets:" + echo + + for docset in $available_sets + set -l tools_var "$docset"_tools + set -l usage_var "$docset"_usage + + echo "- $docset" + echo " - Allowed tools: $$tools_var" + echo " - When to use: $$usage_var" | fold -s -w 78 | sed '1!s/^/ /' + echo + end + + echo "Tips:" + echo "- Encourage looking at specific symbols rather than entire" + echo " packages unless context requires it." + echo "- The doc-agent will only have access to its specific" + echo " documentation tools; it can't read files, search the web, etc." + return 0 + end + + # Validate required arguments + if not set -q _flag_set + echo "Error: --set/-s is required" >&2 + echo "Run 'doc-agent -h' for usage information" >&2 + return 1 + end + + # Validate docset exists + if not contains $_flag_set $available_sets + echo "Error: unknown documentation set '$_flag_set'" >&2 + echo "Run 'doc-agent -h' to see available sets" >&2 + return 1 + end + + # Configure the doc set + switch $_flag_set + case go + set allowed_tools $go_allowed_tools + set disallowed_tools $go_disallowed_tools + set system_prompt $go_system_prompt + + case '*' + echo "Error: unknown documentation set '$_flag_set'" >&2 + return 1 + end + + synu claude -H "hf:zai-org/GLM-4.7" -l "hf:zai-org/GLM-4.7" --model sonnet \ + --allowed-tools "$allowed_tools" \ + --disallowed-tools "$disallowed_tools" \ + --append-system-prompt "$system_prompt" \ + -p $argv +end