docs: Added example MCP server allowlisting to the example configuration files
This commit is contained in:
+64
-54
@@ -11,64 +11,74 @@
|
|||||||
# - <agent-name>_AGENT_SESSION
|
# - <agent-name>_AGENT_SESSION
|
||||||
# - <agent-name>_VARIABLES (as JSON array of key-value pairs; e.g. '[{"name": "username", "value": "alex"}]')
|
# - <agent-name>_VARIABLES (as JSON array of key-value pairs; e.g. '[{"name": "username", "value": "alex"}]')
|
||||||
|
|
||||||
model: openai:gpt-4o # Specify the LLM to use
|
model: openai:gpt-4o # Specify the LLM to use
|
||||||
temperature: null # Set default temperature parameter, range (0, 1)
|
temperature: null # Set default temperature parameter, range (0, 1)
|
||||||
top_p: null # Set default top-p parameter, with a range of (0, 1) or (0, 2) depending on the model
|
top_p: null # Set default top-p parameter, with a range of (0, 1) or (0, 2) depending on the model
|
||||||
reasoning_effort: null # Reasoning effort level for models that support it (e.g. low, medium, high).
|
reasoning_effort:
|
||||||
# Only valid when the agent's model declares reasoning_levels.
|
null # Reasoning effort level for models that support it (e.g. low, medium, high).
|
||||||
agent_session: null # Set a session to use when starting the agent. (e.g. temp, default); defaults to globally set agent_session
|
# Only valid when the agent's model declares reasoning_levels.
|
||||||
name: <agent-name> # Name of the agent, used in the UI and logs
|
agent_session: null # Set a session to use when starting the agent. (e.g. temp, default); defaults to globally set agent_session
|
||||||
description: <description> # Description of the agent, used in the UI
|
name: <agent-name> # Name of the agent, used in the UI and logs
|
||||||
version: 1 # Version of the agent
|
description: <description> # Description of the agent, used in the UI
|
||||||
|
version: 1 # Version of the agent
|
||||||
# Auto-Continue (Todo System)
|
# Auto-Continue (Todo System)
|
||||||
# The auto-continue system provides built-in task tracking for improved reliability.
|
# The auto-continue system provides built-in task tracking for improved reliability.
|
||||||
# When enabled, the model can create todo lists and the system will automatically
|
# When enabled, the model can create todo lists and the system will automatically
|
||||||
# prompt it to continue when incomplete tasks remain.
|
# prompt it to continue when incomplete tasks remain.
|
||||||
# See the [Todo System documentation](https://github.com/Dark-Alex-17/coyote/wiki/TODO-System) for more information
|
# See the [Todo System documentation](https://github.com/Dark-Alex-17/coyote/wiki/TODO-System) for more information
|
||||||
auto_continue: false # Enable automatic continuation when incomplete todos remain
|
auto_continue: false # Enable automatic continuation when incomplete todos remain
|
||||||
max_auto_continues: 10 # Maximum number of automatic continuations before stopping
|
max_auto_continues: 10 # Maximum number of automatic continuations before stopping
|
||||||
inject_todo_instructions: true # Inject the default todo tool usage instructions into the agent's system prompt
|
inject_todo_instructions: true # Inject the default todo tool usage instructions into the agent's system prompt
|
||||||
continuation_prompt: null # Custom prompt used when auto-continuing (optional; uses default if null)
|
continuation_prompt: null # Custom prompt used when auto-continuing (optional; uses default if null)
|
||||||
# Sub-Agent Spawning System
|
# Sub-Agent Spawning System
|
||||||
# Enable this agent to spawn and manage child agents in parallel.
|
# Enable this agent to spawn and manage child agents in parallel.
|
||||||
# See https://github.com/Dark-Alex-17/coyote/wiki/Agents for detailed documentation.
|
# See https://github.com/Dark-Alex-17/coyote/wiki/Agents for detailed documentation.
|
||||||
can_spawn_agents: false # Enable the agent to spawn child agents
|
can_spawn_agents: false # Enable the agent to spawn child agents
|
||||||
# spawnable_agents: # Optional whitelist restricting which agents can be spawned via `agent__spawn`.
|
# spawnable_agents: # Optional whitelist restricting which agents can be spawned via `agent__spawn`.
|
||||||
# - explore # If omitted (the default), ALL installed agents are spawnable. This is the unrestricted default.
|
# - explore # If omitted (the default), ALL installed agents are spawnable. This is the unrestricted default.
|
||||||
# - coder # Provide a list to restrict. Match is exact and case-sensitive (use directory names).
|
# - coder # Provide a list to restrict. Match is exact and case-sensitive (use directory names).
|
||||||
# - oracle # An empty list ([]) means literally nothing spawnable.
|
# - oracle # An empty list ([]) means literally nothing spawnable.
|
||||||
# Also filters `agent__list_available` output so the LLM only sees what it can spawn.
|
# Also filters `agent__list_available` output so the LLM only sees what it can spawn.
|
||||||
# Graph agents (graph.yaml) ignore this; they declare spawn targets in agent nodes.
|
# Graph agents (graph.yaml) ignore this; they declare spawn targets in agent nodes.
|
||||||
max_concurrent_agents: 4 # Maximum number of agents that can run simultaneously
|
max_concurrent_agents: 4 # Maximum number of agents that can run simultaneously
|
||||||
max_agent_depth: 3 # Maximum nesting depth for sub-agents (prevents runaway spawning)
|
max_agent_depth: 3 # Maximum nesting depth for sub-agents (prevents runaway spawning)
|
||||||
max_concurrent_jobs: 5 # Max background jobs (`job__*` tools) running at once for this agent
|
max_concurrent_jobs:
|
||||||
# (overrides the global setting; 0 disables background jobs for this agent)
|
5 # Max background jobs (`job__*` tools) running at once for this agent
|
||||||
inject_spawn_instructions: true # Inject the default agent spawning instructions into the agent's system prompt
|
# (overrides the global setting; 0 disables background jobs for this agent)
|
||||||
summarization_model: null # Model to use for summarizing sub-agent output (e.g. 'openai:gpt-4o-mini'); defaults to current model
|
inject_spawn_instructions: true # Inject the default agent spawning instructions into the agent's system prompt
|
||||||
summarization_threshold: 4000 # Character threshold above which sub-agent output is summarized before returning to parent
|
summarization_model: null # Model to use for summarizing sub-agent output (e.g. 'openai:gpt-4o-mini'); defaults to current model
|
||||||
escalation_timeout: 300 # Seconds a sub-agent waits for a user interaction response before timing out (default: 5 minutes)
|
summarization_threshold: 4000 # Character threshold above which sub-agent output is summarized before returning to parent
|
||||||
mcp_servers: # Optional list of MCP servers that the agent utilizes
|
escalation_timeout: 300 # Seconds a sub-agent waits for a user interaction response before timing out (default: 5 minutes)
|
||||||
- github # Corresponds to the name of an MCP server in the `<coyote-config-dir>/mcp.json` file
|
mcp_servers: # Optional list of MCP servers that the agent utilizes
|
||||||
global_tools: # Optional list of additional global tools to enable for the agent; i.e. not tools specific to the agent
|
- github # Corresponds to the name of an MCP server in the `<coyote-config-dir>/mcp.json` file
|
||||||
|
mcp_tools: # Optional per-server tool allowlist for the agent's MCP servers
|
||||||
|
github: # (glob patterns: * and ?). Intersects with the global config,
|
||||||
|
- get_* # mcp.json `allowedTools`, and every other configured layer. It
|
||||||
|
- search_* # can only narrow access, never widen it.
|
||||||
|
global_tools: # Optional list of additional global tools to enable for the agent; i.e. not tools specific to the agent
|
||||||
- web_search
|
- web_search
|
||||||
- fs
|
- fs
|
||||||
- python
|
- python
|
||||||
skills_enabled: true # Master switch for skills in this agent (default: inherit from global).
|
skills_enabled:
|
||||||
# Skills also require `function_calling_support: true` in the global config.
|
true # Master switch for skills in this agent (default: inherit from global).
|
||||||
enabled_skills: # Optional list of skills available when this agent runs.
|
# Skills also require `function_calling_support: true` in the global config.
|
||||||
# Must be a subset of global `visible_skills`. Omit to inherit the global default.
|
enabled_skills: # Optional list of skills available when this agent runs.
|
||||||
|
# Must be a subset of global `visible_skills`. Omit to inherit the global default.
|
||||||
- git-master
|
- git-master
|
||||||
- ai-slop-remover
|
- ai-slop-remover
|
||||||
inject_skill_instructions: true # Inject a short hint pointing the model at `skill__list` when skills are enabled
|
inject_skill_instructions:
|
||||||
# (default: true). Suppressed automatically when no skills are available.
|
true # Inject a short hint pointing the model at `skill__list` when skills are enabled
|
||||||
skill_instructions: null # Custom text for the skill hint (optional; uses built-in default if null)
|
# (default: true). Suppressed automatically when no skills are available.
|
||||||
enabled_macros: # Optional list of macros invocable when this agent is active in the REPL.
|
skill_instructions: null # Custom text for the skill hint (optional; uses built-in default if null)
|
||||||
- generate-commit-message # An empty list disables all macros. Omit to inherit the role/global default.
|
enabled_macros: # Optional list of macros invocable when this agent is active in the REPL.
|
||||||
memory: null # Per-agent memory override (default: inherit). Set to `false` to disable memory
|
- generate-commit-message # An empty list disables all macros. Omit to inherit the role/global default.
|
||||||
# for this agent regardless of workspace/global presence. See the Memory wiki page.
|
memory:
|
||||||
|
null # Per-agent memory override (default: inherit). Set to `false` to disable memory
|
||||||
|
# for this agent regardless of workspace/global presence. See the Memory wiki page.
|
||||||
|
|
||||||
dynamic_instructions: false # Whether to use dynamic instructions for the agent; if false, static instructions are used
|
dynamic_instructions: false # Whether to use dynamic instructions for the agent; if false, static instructions are used
|
||||||
instructions: | # Static instructions for the agent; ignored if dynamic instructions are used
|
instructions:
|
||||||
|
| # Static instructions for the agent; ignored if dynamic instructions are used
|
||||||
You are a AI agent designed to demonstrate agent capabilities.
|
You are a AI agent designed to demonstrate agent capabilities.
|
||||||
|
|
||||||
<tools>
|
<tools>
|
||||||
@@ -88,12 +98,12 @@ instructions: | # Static instructions for the agent; ignored if
|
|||||||
<user>
|
<user>
|
||||||
username: {{username}}
|
username: {{username}}
|
||||||
</user>
|
</user>
|
||||||
variables: # Optional variables for the agent
|
variables: # Optional variables for the agent
|
||||||
# The variables defined above like {{__variable_name__}} are automatically available
|
# The variables defined above like {{__variable_name__}} are automatically available
|
||||||
- name: username
|
- name: username
|
||||||
description: Your user name
|
description: Your user name
|
||||||
default: null # A default value for this variable; if null, the variable must be provided when starting the agent
|
default: null # A default value for this variable; if null, the variable must be provided when starting the agent
|
||||||
conversation_starters: # Optional conversation starters for the agent
|
conversation_starters: # Optional conversation starters for the agent
|
||||||
- What is the meaning of life?
|
- What is the meaning of life?
|
||||||
- Tell me a joke.
|
- Tell me a joke.
|
||||||
- What is the capital of France?
|
- What is the capital of France?
|
||||||
@@ -104,15 +114,15 @@ conversation_starters: # Optional conversation starters for the agent
|
|||||||
- How do I stay motivated?
|
- How do I stay motivated?
|
||||||
- What is the best way to exercise?
|
- What is the best way to exercise?
|
||||||
- How do I manage my time effectively?
|
- How do I manage my time effectively?
|
||||||
documents: # Optional documents to load for the agent
|
documents: # Optional documents to load for the agent
|
||||||
# To enable graph-based RAG (entity/relationship extraction + knowledge graph retrieval),
|
# To enable graph-based RAG (entity/relationship extraction + knowledge graph retrieval),
|
||||||
# set `rag_extractor_model` in your global config.yaml.
|
# set `rag_extractor_model` in your global config.yaml.
|
||||||
# See https://github.com/Dark-Alex-17/coyote/wiki/RAG#graph-based-rag
|
# See https://github.com/Dark-Alex-17/coyote/wiki/RAG#graph-based-rag
|
||||||
- git:/some/repo # Explicitly tell Coyote to use the 'git' document loader using an absolute path
|
- git:/some/repo # Explicitly tell Coyote to use the 'git' document loader using an absolute path
|
||||||
- pdf:some-pdf-file.pdf # Explicitly tell Coyote to use the 'pdf' document loader using a relative path
|
- pdf:some-pdf-file.pdf # Explicitly tell Coyote to use the 'pdf' document loader using a relative path
|
||||||
- https://some-website.com/some-page
|
- https://some-website.com/some-page
|
||||||
- some-file.pdf # File with relative path to the <coyote-config-dir>/agents/<agent-name> directory; i.e. file in the same directory as this config file
|
- some-file.pdf # File with relative path to the <coyote-config-dir>/agents/<agent-name> directory; i.e. file in the same directory as this config file
|
||||||
- ~/some-file.txt # File in the user's home directory
|
- ~/some-file.txt # File in the user's home directory
|
||||||
- /absolute/path/to/some-file.md # File with absolute path
|
- /absolute/path/to/some-file.md # File with absolute path
|
||||||
- /absolute/path/**/NAME.txt # Find all NAME.txt files in the specified directory and all its subdirectories
|
- /absolute/path/**/NAME.txt # Find all NAME.txt files in the specified directory and all its subdirectories
|
||||||
- /absolute/path/to/*/README.md # Find all README.md files in all immediate subdirectories of the specified directory (depth=1)
|
- /absolute/path/to/*/README.md # Find all README.md files in all immediate subdirectories of the specified directory (depth=1)
|
||||||
|
|||||||
+195
-168
@@ -1,40 +1,39 @@
|
|||||||
# ---- LLM ----
|
# ---- LLM ----
|
||||||
model: openai:gpt-4o # Specify the LLM to use
|
model: openai:gpt-4o # Specify the LLM to use
|
||||||
temperature: null # Set default temperature parameter (0, 1)
|
temperature: null # Set default temperature parameter (0, 1)
|
||||||
top_p: null # Set default top-p parameter, with a range of (0, 1) or (0, 2) depending on the model
|
top_p: null # Set default top-p parameter, with a range of (0, 1) or (0, 2) depending on the model
|
||||||
reasoning_effort: null # Reasoning effort level for models that support it (e.g. low, medium, high).
|
reasoning_effort:
|
||||||
# Only valid when the active model declares reasoning_levels. See the Clients docs.
|
null # Reasoning effort level for models that support it (e.g. low, medium, high).
|
||||||
|
# Only valid when the active model declares reasoning_levels. See the Clients docs.
|
||||||
|
|
||||||
# ---- Behavior ----
|
# ---- Behavior ----
|
||||||
stream: true # Controls whether to use the stream-style APIs when querying for completions from LLM clients.
|
stream: true # Controls whether to use the stream-style APIs when querying for completions from LLM clients.
|
||||||
save: true # Indicates whether to persist the conversation to messages.md for posterity
|
save: true # Indicates whether to persist the conversation to messages.md for posterity
|
||||||
keybindings: emacs # Choose keybinding style (emacs, vi)
|
keybindings: emacs # Choose keybinding style (emacs, vi)
|
||||||
editor: null # Specifies the editor used to edit the input buffer or session. (e.g. vim, emacs, nano, hx). Defaults to $EDITOR
|
editor: null # Specifies the editor used to edit the input buffer or session. (e.g. vim, emacs, nano, hx). Defaults to $EDITOR
|
||||||
wrap: no # Controls text wrapping (no, auto, <max-width>)
|
wrap: no # Controls text wrapping (no, auto, <max-width>)
|
||||||
wrap_code: false # Enables or disables the wrapping of code blocks
|
wrap_code: false # Enables or disables the wrapping of code blocks
|
||||||
|
|
||||||
# ---- Prelude ----
|
# ---- Prelude ----
|
||||||
repl_prelude: null # Set a default session or role for REPL mode to use (e.g. role:<name>, session:<name>, <session>:<role>)
|
repl_prelude: null # Set a default session or role for REPL mode to use (e.g. role:<name>, session:<name>, <session>:<role>)
|
||||||
cmd_prelude: null # Set a default session or role for CMD mode to use (e.g. role:<name>, session:<name>, <session>:<role>)
|
cmd_prelude: null # Set a default session or role for CMD mode to use (e.g. role:<name>, session:<name>, <session>:<role>)
|
||||||
agent_session: null # Set a session to use when starting an agent (e.g. temp, default)
|
agent_session: null # Set a session to use when starting an agent (e.g. temp, default)
|
||||||
|
|
||||||
# ---- Appearance ----
|
# ---- Appearance ----
|
||||||
highlight: true # Controls syntax highlighting
|
highlight: true # Controls syntax highlighting
|
||||||
raw_markdown: false # When true, render markdown as raw text with syntax highlighting only. When false (default), transforms markdown syntax (headings, bold, lists, etc.) into styled terminal output
|
raw_markdown: false # When true, render markdown as raw text with syntax highlighting only. When false (default), transforms markdown syntax (headings, bold, lists, etc.) into styled terminal output
|
||||||
light_theme: false # Activates a light color theme when true. env: COYOTE_LIGHT_THEME
|
light_theme: false # Activates a light color theme when true. env: COYOTE_LIGHT_THEME
|
||||||
|
|
||||||
# ---- Miscellaneous ----
|
# ---- Miscellaneous ----
|
||||||
user_agent: null # Set User-Agent HTTP header, use `auto` for coyote/<current-version>
|
user_agent: null # Set User-Agent HTTP header, use `auto` for coyote/<current-version>
|
||||||
save_shell_history: true # Whether to save shell execution command to the history file
|
save_shell_history: true # Whether to save shell execution command to the history file
|
||||||
sync_models_url: > # URL to sync model changes from
|
sync_models_url: > # URL to sync model changes from
|
||||||
https://raw.githubusercontent.com/Dark-Alex-17/coyote/refs/heads/main/models.yaml
|
https://raw.githubusercontent.com/Dark-Alex-17/coyote/refs/heads/main/models.yaml
|
||||||
|
|
||||||
# ---- REPL Prompt ----
|
# ---- REPL Prompt ----
|
||||||
# Custom REPL left/right prompts; see the [REPL Prompt Documentation](https://github.com/Dark-Alex-17/coyote/wiki/REPL-Prompt) for more information
|
# Custom REPL left/right prompts; see the [REPL Prompt Documentation](https://github.com/Dark-Alex-17/coyote/wiki/REPL-Prompt) for more information
|
||||||
left_prompt:
|
left_prompt: '{color.red}{model}){color.green}{?session {?agent {agent}>}{session}{?role /}}{!session {?agent {agent}>}}{role}{?rag @{rag}}{color.cyan}{?session )}{!session >}{color.reset} '
|
||||||
'{color.red}{model}){color.green}{?session {?agent {agent}>}{session}{?role /}}{!session {?agent {agent}>}}{role}{?rag @{rag}}{color.cyan}{?session )}{!session >}{color.reset} '
|
right_prompt: '{color.cyan}{?reasoning_effort [{reasoning_effort}] }{color.purple}{?session {?consume_tokens {consume_tokens}({consume_percent}%)}{!consume_tokens {consume_tokens}}}{color.reset}'
|
||||||
right_prompt:
|
|
||||||
'{color.cyan}{?reasoning_effort [{reasoning_effort}] }{color.purple}{?session {?consume_tokens {consume_tokens}({consume_percent}%)}{!consume_tokens {consume_tokens}}}{color.reset}'
|
|
||||||
|
|
||||||
# ---- Vault ----
|
# ---- Vault ----
|
||||||
# See the [Vault documentation](https://github.com/Dark-Alex-17/coyote/wiki/Vault) for more information on the Coyote vault.
|
# See the [Vault documentation](https://github.com/Dark-Alex-17/coyote/wiki/Vault) for more information on the Coyote vault.
|
||||||
@@ -42,7 +41,7 @@ right_prompt:
|
|||||||
# The secrets_provider tells Coyote where to read and write secrets referenced via {{SECRET_NAME}} syntax.
|
# The secrets_provider tells Coyote where to read and write secrets referenced via {{SECRET_NAME}} syntax.
|
||||||
#
|
#
|
||||||
# Shorthand: set vault_password_file to enable the local provider with that password file.
|
# Shorthand: set vault_password_file to enable the local provider with that password file.
|
||||||
vault_password_file: null # Path to a file containing the password for the Coyote vault (cannot be a secret template)
|
vault_password_file: null # Path to a file containing the password for the Coyote vault (cannot be a secret template)
|
||||||
#
|
#
|
||||||
# Explicit: set secrets_provider to one of the supported types below. When secrets_provider is set,
|
# Explicit: set secrets_provider to one of the supported types below. When secrets_provider is set,
|
||||||
# vault_password_file is ignored. Note: secrets_provider itself cannot use {{SECRET}} template syntax.
|
# vault_password_file is ignored. Note: secrets_provider itself cannot use {{SECRET}} template syntax.
|
||||||
@@ -82,38 +81,39 @@ vault_password_file: null # Path to a file containing the password for th
|
|||||||
|
|
||||||
# ---- Function Calling ----
|
# ---- Function Calling ----
|
||||||
# See the [Tools documentation](https://github.com/Dark-Alex-17/coyote/wiki/Tools) for more details
|
# See the [Tools documentation](https://github.com/Dark-Alex-17/coyote/wiki/Tools) for more details
|
||||||
function_calling_support: true # Enables or disables function calling (Globally).
|
function_calling_support: true # Enables or disables function calling (Globally).
|
||||||
mapping_tools: # Alias for a tool or toolset
|
mapping_tools: # Alias for a tool or toolset
|
||||||
fs: 'fs_cat,fs_ls,fs_mkdir,fs_rm,fs_write,fs_read,fs_glob,fs_grep'
|
fs: 'fs_cat,fs_ls,fs_mkdir,fs_rm,fs_write,fs_read,fs_glob,fs_grep'
|
||||||
enabled_tools: null # Which tools to enable by default.
|
enabled_tools:
|
||||||
# Accepts either a YAML list or a comma-separated string. Use 'all' to enable everything.
|
null # Which tools to enable by default.
|
||||||
# Example (list form):
|
# Accepts either a YAML list or a comma-separated string. Use 'all' to enable everything.
|
||||||
# enabled_tools:
|
# Example (list form):
|
||||||
# - fs
|
# enabled_tools:
|
||||||
# - web_search_coyote
|
# - fs
|
||||||
# Example (comma-separated form):
|
# - web_search_coyote
|
||||||
# enabled_tools: fs,web_search_coyote
|
# Example (comma-separated form):
|
||||||
visible_tools: # Which tools are visible to be compiled (and are thus able to be defined in 'enabled_tools')
|
# enabled_tools: fs,web_search_coyote
|
||||||
# - ast_grep.sh
|
visible_tools: # Which tools are visible to be compiled (and are thus able to be defined in 'enabled_tools')
|
||||||
# - demo_py.py
|
# - ast_grep.sh
|
||||||
# - demo_sh.sh
|
# - demo_py.py
|
||||||
# - demo_ts.ts
|
# - demo_sh.sh
|
||||||
|
# - demo_ts.ts
|
||||||
- execute_command.sh
|
- execute_command.sh
|
||||||
# - execute_py_code.py
|
# - execute_py_code.py
|
||||||
# - execute_sql_code.sh
|
# - execute_sql_code.sh
|
||||||
# - fetch_url_via_curl.sh
|
# - fetch_url_via_curl.sh
|
||||||
# - fetch_url_via_jina.sh
|
# - fetch_url_via_jina.sh
|
||||||
- fs_cat.sh
|
- fs_cat.sh
|
||||||
- fs_ls.sh
|
- fs_ls.sh
|
||||||
# - fs_read.sh
|
# - fs_read.sh
|
||||||
# - fs_glob.sh
|
# - fs_glob.sh
|
||||||
# - fs_grep.sh
|
# - fs_grep.sh
|
||||||
# - fs_mkdir.sh
|
# - fs_mkdir.sh
|
||||||
# - fs_patch.sh
|
# - fs_patch.sh
|
||||||
# - fs_write.sh
|
# - fs_write.sh
|
||||||
- get_current_time.sh
|
- get_current_time.sh
|
||||||
# - get_current_weather.py
|
# - get_current_weather.py
|
||||||
# - get_current_weather.ts
|
# - get_current_weather.ts
|
||||||
- get_current_weather.sh
|
- get_current_weather.sh
|
||||||
# - search_arxiv.sh
|
# - search_arxiv.sh
|
||||||
# - search_wikipedia.sh
|
# - search_wikipedia.sh
|
||||||
@@ -126,85 +126,106 @@ visible_tools: # Which tools are visible to be compiled (and a
|
|||||||
|
|
||||||
# ---- MCP Servers ----
|
# ---- MCP Servers ----
|
||||||
# See the [MCP Servers documentation](https://github.com/Dark-Alex-17/coyote/wiki/MCP-Servers) for more details
|
# See the [MCP Servers documentation](https://github.com/Dark-Alex-17/coyote/wiki/MCP-Servers) for more details
|
||||||
mcp_server_support: true # Enables or disables MCP servers (globally).
|
mcp_server_support: true # Enables or disables MCP servers (globally).
|
||||||
mapping_mcp_servers: # Alias for an MCP server or set of servers
|
mapping_mcp_servers: # Alias for an MCP server or set of servers
|
||||||
git: github,gitmcp
|
git: github,gitmcp
|
||||||
enabled_mcp_servers: null # Which MCP servers to enable by default.
|
enabled_mcp_servers:
|
||||||
# Accepts either a YAML list or a comma-separated string. Use 'all' to enable everything.
|
null # Which MCP servers to enable by default.
|
||||||
# Example (list form):
|
# Accepts either a YAML list or a comma-separated string. Use 'all' to enable everything.
|
||||||
# enabled_mcp_servers:
|
# Example (list form):
|
||||||
# - github
|
# enabled_mcp_servers:
|
||||||
# - slack
|
# - github
|
||||||
# Example (comma-separated form):
|
# - slack
|
||||||
# enabled_mcp_servers: github,slack,ddg-search
|
# Example (comma-separated form):
|
||||||
no_workspace_mcp: false # Disable loading workspace-local MCP servers (default: false).
|
# enabled_mcp_servers: github,slack,ddg-search
|
||||||
# When false (the default), Coyote merges the first workspace MCP config it finds
|
mcp_tools:
|
||||||
# into the global MCP registry at startup, checking in order:
|
null # Per-server MCP tool allowlists (glob patterns: * and ? supported).
|
||||||
# 1. .coyote/mcp.json
|
# Tools that match no pattern are hidden from the model as if they
|
||||||
# 2. .coyote/.mcp.json (Claude-style file name)
|
# don't exist. Stacks with the other allowlist layers (mcp.json
|
||||||
# 3. .mcp.json (project root; Claude Code convention)
|
# `allowedTools`, role, agent, session, skill, graph node). Every
|
||||||
# Workspace entries shadow global ones on name collision.
|
# configured layer must allow a tool, so layers only ever narrow.
|
||||||
# Set to true (or pass --no-workspace-mcp) to skip this entirely.
|
# An empty list blocks all of a server's tools.
|
||||||
|
# Example:
|
||||||
|
# mcp_tools:
|
||||||
|
# github:
|
||||||
|
# - get_*
|
||||||
|
# - list_*
|
||||||
|
# slack: []
|
||||||
|
no_workspace_mcp:
|
||||||
|
false # Disable loading workspace-local MCP servers (default: false).
|
||||||
|
# When false (the default), Coyote merges the first workspace MCP config it finds
|
||||||
|
# into the global MCP registry at startup, checking in order:
|
||||||
|
# 1. .coyote/mcp.json
|
||||||
|
# 2. .coyote/.mcp.json (Claude-style file name)
|
||||||
|
# 3. .mcp.json (project root; Claude Code convention)
|
||||||
|
# Workspace entries shadow global ones on name collision.
|
||||||
|
# Set to true (or pass --no-workspace-mcp) to skip this entirely.
|
||||||
|
|
||||||
# ---- Skills ----
|
# ---- Skills ----
|
||||||
# Skills are modular knowledge or capability packs the LLM can load and unload mid-conversation.
|
# Skills are modular knowledge or capability packs the LLM can load and unload mid-conversation.
|
||||||
# See the [Skills documentation](https://github.com/Dark-Alex-17/coyote/wiki/Skills) for more details.
|
# See the [Skills documentation](https://github.com/Dark-Alex-17/coyote/wiki/Skills) for more details.
|
||||||
skills_enabled: true # Master switch. Set to false to hide all skill management tools from the model.
|
skills_enabled:
|
||||||
# Skills also require `function_calling_support: true` above to work at all.
|
true # Master switch. Set to false to hide all skill management tools from the model.
|
||||||
visible_skills: # The universe of skills allowed to be enabled in any context. Omit (null) for "all installed".
|
# Skills also require `function_calling_support: true` above to work at all.
|
||||||
|
visible_skills: # The universe of skills allowed to be enabled in any context. Omit (null) for "all installed".
|
||||||
- ai-slop-remover
|
- ai-slop-remover
|
||||||
- code-review
|
- code-review
|
||||||
- frontend-ui-ux
|
- frontend-ui-ux
|
||||||
- git-master
|
- git-master
|
||||||
enabled_skills: null # Which skills are available by default (no role/agent/session active). null = all visible.
|
enabled_skills:
|
||||||
# Accepts either a YAML list or a comma-separated string.
|
null # Which skills are available by default (no role/agent/session active). null = all visible.
|
||||||
# Example (list form):
|
# Accepts either a YAML list or a comma-separated string.
|
||||||
# enabled_skills:
|
# Example (list form):
|
||||||
# - git-master
|
# enabled_skills:
|
||||||
# - ai-slop-remover
|
# - git-master
|
||||||
# Example (comma-separated form):
|
# - ai-slop-remover
|
||||||
# enabled_skills: git-master,ai-slop-remover
|
# Example (comma-separated form):
|
||||||
inject_skill_instructions: true # Inject a short hint pointing the model at `skill__list` when skills are enabled in
|
# enabled_skills: git-master,ai-slop-remover
|
||||||
# this context. Only injected if `function_calling_support`, `skills_enabled`, and the
|
inject_skill_instructions:
|
||||||
# effective enabled skill set is non-empty (default: true).
|
true # Inject a short hint pointing the model at `skill__list` when skills are enabled in
|
||||||
skill_instructions: null # Custom text used for the skill hint when injected. If null, uses built-in default.
|
# this context. Only injected if `function_calling_support`, `skills_enabled`, and the
|
||||||
|
# effective enabled skill set is non-empty (default: true).
|
||||||
|
skill_instructions: null # Custom text used for the skill hint when injected. If null, uses built-in default.
|
||||||
|
|
||||||
# ---- Macros ----
|
# ---- Macros ----
|
||||||
# Macros are Coyote's custom commands: named sequences of REPL commands and prompts, invoked directly by name
|
# Macros are Coyote's custom commands: named sequences of REPL commands and prompts, invoked directly by name
|
||||||
# (a macro file named `review.yaml` runs as `.review [args]`; built-in commands always win a name collision).
|
# (a macro file named `review.yaml` runs as `.review [args]`; built-in commands always win a name collision).
|
||||||
# Workspace-local macros in `.coyote/macros/` shadow same-named global macros (skip them with --no-workspace-macros).
|
# Workspace-local macros in `.coyote/macros/` shadow same-named global macros (skip them with --no-workspace-macros).
|
||||||
# See the [Macros documentation](https://github.com/Dark-Alex-17/coyote/wiki/Macros) for more details.
|
# See the [Macros documentation](https://github.com/Dark-Alex-17/coyote/wiki/Macros) for more details.
|
||||||
enabled_macros: null # Which macros are invocable by default (no role/agent/session active). null = all visible.
|
enabled_macros:
|
||||||
# An empty list means NO macros are invocable. Accepts either a YAML list or a
|
null # Which macros are invocable by default (no role/agent/session active). null = all visible.
|
||||||
# comma-separated string. Roles, agents, and sessions may define their own
|
# An empty list means NO macros are invocable. Accepts either a YAML list or a
|
||||||
# `enabled_macros`; the most specific active one wins (session > agent > role > global).
|
# comma-separated string. Roles, agents, and sessions may define their own
|
||||||
# Example (list form):
|
# `enabled_macros`; the most specific active one wins (session > agent > role > global).
|
||||||
# enabled_macros:
|
# Example (list form):
|
||||||
# - generate-commit-message
|
# enabled_macros:
|
||||||
# Example (comma-separated form):
|
# - generate-commit-message
|
||||||
# enabled_macros: generate-commit-message,review
|
# Example (comma-separated form):
|
||||||
|
# enabled_macros: generate-commit-message,review
|
||||||
|
|
||||||
# ---- Auto-Continue (Todo System) ----
|
# ---- Auto-Continue (Todo System) ----
|
||||||
# The auto-continue system provides built-in task tracking for improved reliability.
|
# The auto-continue system provides built-in task tracking for improved reliability.
|
||||||
# When enabled, the model can create todo lists and the system will automatically
|
# When enabled, the model can create todo lists and the system will automatically
|
||||||
# prompt it to continue when incomplete tasks remain.
|
# prompt it to continue when incomplete tasks remain.
|
||||||
# See the [Todo System documentation](https://github.com/Dark-Alex-17/coyote/wiki/TODO-System) for more information
|
# See the [Todo System documentation](https://github.com/Dark-Alex-17/coyote/wiki/TODO-System) for more information
|
||||||
auto_continue: false # Enable automatic continuation when incomplete todos remain (default: false)
|
auto_continue: false # Enable automatic continuation when incomplete todos remain (default: false)
|
||||||
max_auto_continues: 10 # Maximum number of automatic continuations before stopping (default: 10)
|
max_auto_continues: 10 # Maximum number of automatic continuations before stopping (default: 10)
|
||||||
inject_todo_instructions: true # Inject default todo usage instructions into the system prompt (default: true)
|
inject_todo_instructions: true # Inject default todo usage instructions into the system prompt (default: true)
|
||||||
continuation_prompt: null # Custom prompt used when auto-continuing. If null, uses built-in default
|
continuation_prompt: null # Custom prompt used when auto-continuing. If null, uses built-in default
|
||||||
|
|
||||||
# ---- Session ----
|
# ---- Session ----
|
||||||
# See the [Session documentation](https://github.com/Dark-Alex-17/coyote/wiki/Sessions) for more information
|
# See the [Session documentation](https://github.com/Dark-Alex-17/coyote/wiki/Sessions) for more information
|
||||||
save_session: null # Controls the persistence of the session. If true, auto save; if false, don't auto-save save; if null, ask the user what to do
|
save_session: null # Controls the persistence of the session. If true, auto save; if false, don't auto-save save; if null, ask the user what to do
|
||||||
compression_threshold: 4000 # Compress the session when the token count reaches or exceeds this threshold
|
compression_threshold: 4000 # Compress the session when the token count reaches or exceeds this threshold
|
||||||
summarization_prompt: > # The text prompt used for creating a concise summary of session message
|
summarization_prompt:
|
||||||
|
> # The text prompt used for creating a concise summary of session message
|
||||||
'Summarize the discussion briefly in 200 words or less to use as a prompt for future context.'
|
'Summarize the discussion briefly in 200 words or less to use as a prompt for future context.'
|
||||||
summary_context_prompt: > # The text prompt used for including the summary of the entire session as context to the model
|
summary_context_prompt:
|
||||||
|
> # The text prompt used for including the summary of the entire session as context to the model
|
||||||
'This is a summary of the chat history as a recap: '
|
'This is a summary of the chat history as a recap: '
|
||||||
compression_keep_last: 0 # Number of most-recent messages to keep visible after compression (0 = compress all messages)
|
compression_keep_last: 0 # Number of most-recent messages to keep visible after compression (0 = compress all messages)
|
||||||
max_tool_result_chars: null # Cap on tool result characters forwarded to the model per call (null = no cap)
|
max_tool_result_chars: null # Cap on tool result characters forwarded to the model per call (null = no cap)
|
||||||
max_concurrent_jobs: 5 # Max background jobs (`job__*` tools) running at once per context (default: 5; 0 disables background jobs entirely)
|
max_concurrent_jobs: 5 # Max background jobs (`job__*` tools) running at once per context (default: 5; 0 disables background jobs entirely)
|
||||||
|
|
||||||
# ---- Memory ----
|
# ---- Memory ----
|
||||||
# See the [Memory documentation](https://github.com/Dark-Alex-17/coyote/wiki/Memory) for more information.
|
# See the [Memory documentation](https://github.com/Dark-Alex-17/coyote/wiki/Memory) for more information.
|
||||||
@@ -213,11 +234,13 @@ max_concurrent_jobs: 5 # Max background jobs (`job__*` tools) running
|
|||||||
# even when memory files exist. The cascade is: agent > session > role > app.
|
# even when memory files exist. The cascade is: agent > session > role > app.
|
||||||
# Bootstrap with `coyote --init-memory [global|workspace]` to create the marker file
|
# Bootstrap with `coyote --init-memory [global|workspace]` to create the marker file
|
||||||
# the LLM needs before it will write any memory.
|
# the LLM needs before it will write any memory.
|
||||||
memory: null # null = enabled when memory exists on disk; true = force on; false = force off
|
memory: null # null = enabled when memory exists on disk; true = force on; false = force off
|
||||||
memory_cap_with_tools: null # Char cap for injected memory when function calling is available (default: 6000).
|
memory_cap_with_tools:
|
||||||
# Only MEMORY.md indexes are injected; the LLM uses memory__read to fetch drill files.
|
null # Char cap for injected memory when function calling is available (default: 6000).
|
||||||
memory_cap_without_tools: null # Char cap when function calling is unavailable (default: 12000).
|
# Only MEMORY.md indexes are injected; the LLM uses memory__read to fetch drill files.
|
||||||
# Indexes plus drill file bodies are injected up to this cap.
|
memory_cap_without_tools:
|
||||||
|
null # Char cap when function calling is unavailable (default: 12000).
|
||||||
|
# Indexes plus drill file bodies are injected up to this cap.
|
||||||
|
|
||||||
# ---- Workspace Instructions ----
|
# ---- Workspace Instructions ----
|
||||||
# Human-curated project instructions injected read-only into the system prompt, in full.
|
# Human-curated project instructions injected read-only into the system prompt, in full.
|
||||||
@@ -225,22 +248,23 @@ memory_cap_without_tools: null # Char cap when function calling is unavailable
|
|||||||
# chain below (per directory, in order). Scaffold with `coyote --init-instructions`.
|
# chain below (per directory, in order). Scaffold with `coyote --init-instructions`.
|
||||||
# Disable per-invocation with --no-workspace-instructions, or override the chain with
|
# Disable per-invocation with --no-workspace-instructions, or override the chain with
|
||||||
# repeatable --workspace-instructions-file flags.
|
# repeatable --workspace-instructions-file flags.
|
||||||
workspace_instructions: null # null/true = inject when an instructions file exists; false = never inject
|
workspace_instructions: null # null/true = inject when an instructions file exists; false = never inject
|
||||||
workspace_instructions_files: null # File name chain to search, in priority order.
|
workspace_instructions_files:
|
||||||
# Default: [COYOTE.md, AGENTS.md, CLAUDE.md, GEMINI.md]
|
null # File name chain to search, in priority order.
|
||||||
# Set to a custom list to reorder or drop fallbacks, e.g.:
|
# Default: [COYOTE.md, AGENTS.md, CLAUDE.md, GEMINI.md]
|
||||||
# workspace_instructions_files: [COYOTE.md]
|
# Set to a custom list to reorder or drop fallbacks, e.g.:
|
||||||
|
# workspace_instructions_files: [COYOTE.md]
|
||||||
|
|
||||||
# ---- RAG ----
|
# ---- RAG ----
|
||||||
# See the [RAG Docs](https://github.com/Dark-Alex-17/coyote/wiki/RAG) for more details.
|
# See the [RAG Docs](https://github.com/Dark-Alex-17/coyote/wiki/RAG) for more details.
|
||||||
rag_embedding_model: null # Specifies the embedding model used for context retrieval
|
rag_embedding_model: null # Specifies the embedding model used for context retrieval
|
||||||
rag_reranker_model: null # Specifies the reranker model used for sorting retrieved documents; Coyote uses Reciprocal Rank Fusion by default
|
rag_reranker_model: null # Specifies the reranker model used for sorting retrieved documents; Coyote uses Reciprocal Rank Fusion by default
|
||||||
rag_top_k: 5 # Specifies the number of documents to retrieve for answering queries
|
rag_top_k: 5 # Specifies the number of documents to retrieve for answering queries
|
||||||
rag_chunk_size: null # Defines the size of chunks for document processing in characters
|
rag_chunk_size: null # Defines the size of chunks for document processing in characters
|
||||||
rag_chunk_overlap: null # Defines the overlap between chunks
|
rag_chunk_overlap: null # Defines the overlap between chunks
|
||||||
rag_extractor_model: null # LLM model for graph-based entity/relationship extraction; when set, enables a graph RAG signal alongside vector and BM25
|
rag_extractor_model: null # LLM model for graph-based entity/relationship extraction; when set, enables a graph RAG signal alongside vector and BM25
|
||||||
rag_extractor_prompt: null # Custom extraction prompt template; must contain __CHUNK__ placeholder; defaults to built-in prompt when null
|
rag_extractor_prompt: null # Custom extraction prompt template; must contain __CHUNK__ placeholder; defaults to built-in prompt when null
|
||||||
rag_graph_hops: 1 # Number of hops to expand from matched entities at query time (0 = seed nodes only; 1 = direct neighbors; increase for denser graphs)
|
rag_graph_hops: 1 # Number of hops to expand from matched entities at query time (0 = seed nodes only; 1 = direct neighbors; increase for denser graphs)
|
||||||
# Defines the query structure using variables like __CONTEXT__, __SOURCES__, and __INPUT__ to tailor searches to specific needs
|
# Defines the query structure using variables like __CONTEXT__, __SOURCES__, and __INPUT__ to tailor searches to specific needs
|
||||||
rag_template: |
|
rag_template: |
|
||||||
Answer the query based on the context while respecting the rules. (user query, some textual context and rules, all inside xml tags)
|
Answer the query based on the context while respecting the rules. (user query, some textual context and rules, all inside xml tags)
|
||||||
@@ -271,13 +295,14 @@ document_loaders:
|
|||||||
# You can add custom loaders using the following syntax:
|
# You can add custom loaders using the following syntax:
|
||||||
# <file-extension>: <command-to-load-the-file>
|
# <file-extension>: <command-to-load-the-file>
|
||||||
# Note: Use `$1` for input file and `$2` for output file. If `$2` is omitted, use stdout as output.
|
# Note: Use `$1` for input file and `$2` for output file. If `$2` is omitted, use stdout as output.
|
||||||
pdf: 'pdftotext $1 -' # Use pdftotext to convert a PDF file to text
|
pdf: 'pdftotext $1 -' # Use pdftotext to convert a PDF file to text
|
||||||
# (see https://poppler.freedesktop.org for details on how to install pdftotext)
|
# (see https://poppler.freedesktop.org for details on how to install pdftotext)
|
||||||
docx: 'pandoc --to plain $1' # Use pandoc to convert a .docx file to text
|
docx: 'pandoc --to plain $1' # Use pandoc to convert a .docx file to text
|
||||||
# (see https://pandoc.org for details on how to install pandoc)
|
# (see https://pandoc.org for details on how to install pandoc)
|
||||||
jina: 'curl -fsSL https://r.jina.ai/$1 -H "Authorization: Bearer {{JINA_API_KEY}}' # Use Jina to translate a website into text;
|
jina: 'curl -fsSL https://r.jina.ai/$1 -H "Authorization: Bearer {{JINA_API_KEY}}' # Use Jina to translate a website into text;
|
||||||
# Requires a Jina API key to be added to the Coyote vault
|
# Requires a Jina API key to be added to the Coyote vault
|
||||||
git: > # Use yek to load a git repository into the knowledgebase (https://github.com/bodo-run/yek)
|
git:
|
||||||
|
> # Use yek to load a git repository into the knowledgebase (https://github.com/bodo-run/yek)
|
||||||
sh -c "yek $1 --json | jq 'map({ path: .filename, contents: .content })'"
|
sh -c "yek $1 --json | jq 'map({ path: .filename, contents: .content })'"
|
||||||
|
|
||||||
# ---- Clients ----
|
# ---- Clients ----
|
||||||
@@ -312,15 +337,15 @@ clients:
|
|||||||
|
|
||||||
# See https://platform.openai.com/docs/quickstart
|
# See https://platform.openai.com/docs/quickstart
|
||||||
- type: openai
|
- type: openai
|
||||||
api_base: https://api.openai.com/v1 # Optional
|
api_base: https://api.openai.com/v1 # Optional
|
||||||
api_key: '{{OPENAI_API_KEY}}' # You can either hard-code or inject secrets from the Coyote vault
|
api_key: '{{OPENAI_API_KEY}}' # You can either hard-code or inject secrets from the Coyote vault
|
||||||
organization_id: org-xxx # Optional
|
organization_id: org-xxx # Optional
|
||||||
|
|
||||||
# For any platform compatible with OpenAI's API
|
# For any platform compatible with OpenAI's API
|
||||||
- type: openai-compatible
|
- type: openai-compatible
|
||||||
name: ollama
|
name: ollama
|
||||||
api_base: http://localhost:11434/v1
|
api_base: http://localhost:11434/v1
|
||||||
api_key: '{{OLLAMA_API_KEY}}' # Optional; You can either hard-code or inject secrets from the Coyote vault
|
api_key: '{{OLLAMA_API_KEY}}' # Optional; You can either hard-code or inject secrets from the Coyote vault
|
||||||
models:
|
models:
|
||||||
- name: deepseek-r1
|
- name: deepseek-r1
|
||||||
max_input_tokens: 131072
|
max_input_tokens: 131072
|
||||||
@@ -338,9 +363,10 @@ clients:
|
|||||||
# See https://ai.google.dev/docs
|
# See https://ai.google.dev/docs
|
||||||
- type: gemini
|
- type: gemini
|
||||||
api_base: https://generativelanguage.googleapis.com/v1beta
|
api_base: https://generativelanguage.googleapis.com/v1beta
|
||||||
api_key: '{{GEMINI_API_KEY}}' # You can either hard-code or inject secrets from the Coyote vault
|
api_key: '{{GEMINI_API_KEY}}' # You can either hard-code or inject secrets from the Coyote vault
|
||||||
auth: null # When set to 'oauth', Coyote will use OAuth instead of an API key
|
auth:
|
||||||
# Authenticate with `coyote --authenticate` or `.authenticate` in the REPL
|
null # When set to 'oauth', Coyote will use OAuth instead of an API key
|
||||||
|
# Authenticate with `coyote --authenticate` or `.authenticate` in the REPL
|
||||||
patch:
|
patch:
|
||||||
chat_completions:
|
chat_completions:
|
||||||
'.*':
|
'.*':
|
||||||
@@ -357,25 +383,27 @@ clients:
|
|||||||
|
|
||||||
# See https://docs.anthropic.com/claude/reference/getting-started-with-the-api
|
# See https://docs.anthropic.com/claude/reference/getting-started-with-the-api
|
||||||
- type: claude
|
- type: claude
|
||||||
api_base: https://api.anthropic.com/v1 # Optional
|
api_base: https://api.anthropic.com/v1 # Optional
|
||||||
api_key: '{{ANTHROPIC_API_KEY}}' # You can either hard-code or inject secrets from the Coyote vault
|
api_key: '{{ANTHROPIC_API_KEY}}' # You can either hard-code or inject secrets from the Coyote vault
|
||||||
auth: null # When set to 'oauth', Coyote will use OAuth instead of an API key
|
auth:
|
||||||
# Authenticate with `coyote --authenticate` or `.authenticate` in the REPL
|
null # When set to 'oauth', Coyote will use OAuth instead of an API key
|
||||||
|
# Authenticate with `coyote --authenticate` or `.authenticate` in the REPL
|
||||||
|
|
||||||
# See https://docs.mistral.ai/
|
# See https://docs.mistral.ai/
|
||||||
- type: openai-compatible
|
- type: openai-compatible
|
||||||
name: mistral
|
name: mistral
|
||||||
api_base: https://api.mistral.ai/v1
|
api_base: https://api.mistral.ai/v1
|
||||||
api_key: '{{MISTRAL_API_KEY}}' # You can either hard-code or inject secrets from the Coyote vault
|
api_key: '{{MISTRAL_API_KEY}}' # You can either hard-code or inject secrets from the Coyote vault
|
||||||
|
|
||||||
# See https://docs.x.ai/docs - OAuth via SuperGrok / X Premium+ subscription
|
# See https://docs.x.ai/docs - OAuth via SuperGrok / X Premium+ subscription
|
||||||
- type: openai-compatible
|
- type: openai-compatible
|
||||||
name: xai
|
name: xai
|
||||||
api_base: https://api.x.ai/v1
|
api_base: https://api.x.ai/v1
|
||||||
api_key: '{{XAI_API_KEY}}' # You can either hard-code or inject secrets from the Coyote vault
|
api_key: '{{XAI_API_KEY}}' # You can either hard-code or inject secrets from the Coyote vault
|
||||||
auth: null # When set to 'oauth', Coyote will use OAuth instead of an API key
|
auth:
|
||||||
# Authenticate with `coyote --authenticate` or `.authenticate` in the REPL
|
null # When set to 'oauth', Coyote will use OAuth instead of an API key
|
||||||
# Note: Oauth requires SuperGrok/X Premium+ subscription
|
# Authenticate with `coyote --authenticate` or `.authenticate` in the REPL
|
||||||
|
# Note: Oauth requires SuperGrok/X Premium+ subscription
|
||||||
|
|
||||||
# Example: private OpenAI-compatible gateway with client_credentials OAuth
|
# Example: private OpenAI-compatible gateway with client_credentials OAuth
|
||||||
# - type: openai-compatible
|
# - type: openai-compatible
|
||||||
@@ -405,31 +433,31 @@ clients:
|
|||||||
- type: openai-compatible
|
- type: openai-compatible
|
||||||
name: ai12
|
name: ai12
|
||||||
api_base: https://api.ai21.com/studio/v1
|
api_base: https://api.ai21.com/studio/v1
|
||||||
api_key: '{{AI21_API_KEY}}' # You can either hard-code or inject secrets from the Coyote vault
|
api_key: '{{AI21_API_KEY}}' # You can either hard-code or inject secrets from the Coyote vault
|
||||||
|
|
||||||
# See https://docs.cohere.com/docs/the-cohere-platform
|
# See https://docs.cohere.com/docs/the-cohere-platform
|
||||||
- type: cohere
|
- type: cohere
|
||||||
api_base: https://api.cohere.ai/v2 # Optional
|
api_base: https://api.cohere.ai/v2 # Optional
|
||||||
api_key: '{{COHERE_API_KEY}}' # You can either hard-code or inject secrets from the Coyote vault
|
api_key: '{{COHERE_API_KEY}}' # You can either hard-code or inject secrets from the Coyote vault
|
||||||
|
|
||||||
# See https://docs.perplexity.ai/getting-started/overview
|
# See https://docs.perplexity.ai/getting-started/overview
|
||||||
- type: openai-compatible
|
- type: openai-compatible
|
||||||
name: perplexity
|
name: perplexity
|
||||||
api_base: https://api.perplexity.ai
|
api_base: https://api.perplexity.ai
|
||||||
api_key: '{{PERPLEXITY_API_KEY}}' # You can either hard-code or inject secrets from the Coyote vault
|
api_key: '{{PERPLEXITY_API_KEY}}' # You can either hard-code or inject secrets from the Coyote vault
|
||||||
|
|
||||||
# See https://console.groq.com/docs/quickstart
|
# See https://console.groq.com/docs/quickstart
|
||||||
- type: openai-compatible
|
- type: openai-compatible
|
||||||
name: groq
|
name: groq
|
||||||
api_base: https://api.groq.com/openai/v1
|
api_base: https://api.groq.com/openai/v1
|
||||||
api_key: '{{GROQ_API_KEY}}' # You can either hard-code or inject secrets from the Coyote vault
|
api_key: '{{GROQ_API_KEY}}' # You can either hard-code or inject secrets from the Coyote vault
|
||||||
|
|
||||||
# See https://learn.microsoft.com/en-us/azure/ai-services/openai/chatgpt-quickstart
|
# See https://learn.microsoft.com/en-us/azure/ai-services/openai/chatgpt-quickstart
|
||||||
- type: azure-openai
|
- type: azure-openai
|
||||||
api_base: https://{RESOURCE}.openai.azure.com
|
api_base: https://{RESOURCE}.openai.azure.com
|
||||||
api_key: '{{AZURE_OPENAI_API_KEY}}' # You can either hard-code or inject secrets from the Coyote vault
|
api_key: '{{AZURE_OPENAI_API_KEY}}' # You can either hard-code or inject secrets from the Coyote vault
|
||||||
models:
|
models:
|
||||||
- name: gpt-4o # Model deployment name
|
- name: gpt-4o # Model deployment name
|
||||||
max_input_tokens: 128000
|
max_input_tokens: 128000
|
||||||
supports_vision: true
|
supports_vision: true
|
||||||
supports_function_calling: true
|
supports_function_calling: true
|
||||||
@@ -441,7 +469,7 @@ clients:
|
|||||||
# Specifies an application default credentials (adc) file
|
# Specifies an application default credentials (adc) file
|
||||||
# Run `gcloud auth application-default login` to initialize the ADC file
|
# Run `gcloud auth application-default login` to initialize the ADC file
|
||||||
# see https://cloud.google.com/docs/authentication/external/set-up-adc for more information
|
# see https://cloud.google.com/docs/authentication/external/set-up-adc for more information
|
||||||
adc_file: <gcloud-config-dir>/application_default_credentials.json # Optional
|
adc_file: <gcloud-config-dir>/application_default_credentials.json # Optional
|
||||||
patch:
|
patch:
|
||||||
chat_completions:
|
chat_completions:
|
||||||
'gemini-.*':
|
'gemini-.*':
|
||||||
@@ -458,77 +486,76 @@ clients:
|
|||||||
|
|
||||||
# See https://docs.aws.amazon.com/bedrock/latest/userguide/
|
# See https://docs.aws.amazon.com/bedrock/latest/userguide/
|
||||||
- type: bedrock
|
- type: bedrock
|
||||||
access_key_id: '{{AWS_ACCESS_KEY_ID}}' # You can either hard-code or inject secrets from the Coyote vault
|
access_key_id: '{{AWS_ACCESS_KEY_ID}}' # You can either hard-code or inject secrets from the Coyote vault
|
||||||
secret_access_key: '{{AWS_SECRET_ACCESS_KEY}}' # You can either hard-code or inject secrets from the Coyote vault
|
secret_access_key: '{{AWS_SECRET_ACCESS_KEY}}' # You can either hard-code or inject secrets from the Coyote vault
|
||||||
region: xxx
|
region: xxx
|
||||||
session_token: xxx # Optional, only needed for temporary credentials
|
session_token: xxx # Optional, only needed for temporary credentials
|
||||||
|
|
||||||
# See https://developers.cloudflare.com/workers-ai/
|
# See https://developers.cloudflare.com/workers-ai/
|
||||||
- type: openai-compatible
|
- type: openai-compatible
|
||||||
name: cloudflare
|
name: cloudflare
|
||||||
api_base: https://api.cloudflare.com/client/v4/accounts/{ACCOUNT_ID}/ai/v1
|
api_base: https://api.cloudflare.com/client/v4/accounts/{ACCOUNT_ID}/ai/v1
|
||||||
api_key: '{{CLOUDFLARE_API_KEY}}' # You can either hard-code or inject secrets from the Coyote vault
|
api_key: '{{CLOUDFLARE_API_KEY}}' # You can either hard-code or inject secrets from the Coyote vault
|
||||||
|
|
||||||
# See https://cloud.baidu.com/doc/WENXINWORKSHOP/index.html
|
# See https://cloud.baidu.com/doc/WENXINWORKSHOP/index.html
|
||||||
- type: openai-compatible
|
- type: openai-compatible
|
||||||
name: ernie
|
name: ernie
|
||||||
api_base: https://qianfan.baidubce.com/v2
|
api_base: https://qianfan.baidubce.com/v2
|
||||||
api_key: '{{BAIDU_API_KEY}}' # You can either hard-code or inject secrets from the Coyote vault
|
api_key: '{{BAIDU_API_KEY}}' # You can either hard-code or inject secrets from the Coyote vault
|
||||||
|
|
||||||
# See https://dashscope.aliyun.com/
|
# See https://dashscope.aliyun.com/
|
||||||
- type: openai-compatible
|
- type: openai-compatible
|
||||||
name: qianwen
|
name: qianwen
|
||||||
api_base: https://dashscope.aliyuncs.com/compatible-mode/v1
|
api_base: https://dashscope.aliyuncs.com/compatible-mode/v1
|
||||||
api_key: '{{ALIYUN_API_KEY}}' # You can either hard-code or inject secrets from the Coyote vault
|
api_key: '{{ALIYUN_API_KEY}}' # You can either hard-code or inject secrets from the Coyote vault
|
||||||
|
|
||||||
# See https://cloud.tencent.com/product/hunyuan
|
# See https://cloud.tencent.com/product/hunyuan
|
||||||
- type: openai-compatible
|
- type: openai-compatible
|
||||||
name: hunyuan
|
name: hunyuan
|
||||||
api_base: https://api.hunyuan.cloud.tencent.com/v1
|
api_base: https://api.hunyuan.cloud.tencent.com/v1
|
||||||
api_key: '{{TENCENT_API_KEY}}' # You can either hard-code or inject secrets from the Coyote vault
|
api_key: '{{TENCENT_API_KEY}}' # You can either hard-code or inject secrets from the Coyote vault
|
||||||
|
|
||||||
# See https://platform.moonshot.cn/docs/intro
|
# See https://platform.moonshot.cn/docs/intro
|
||||||
- type: openai-compatible
|
- type: openai-compatible
|
||||||
name: moonshot
|
name: moonshot
|
||||||
api_base: https://api.moonshot.cn/v1
|
api_base: https://api.moonshot.cn/v1
|
||||||
api_key: '{{MOONSHOT_API_KEY}}' # You can either hard-code or inject secrets from the Coyote vault
|
api_key: '{{MOONSHOT_API_KEY}}' # You can either hard-code or inject secrets from the Coyote vault
|
||||||
|
|
||||||
# See https://platform.deepseek.com/api-docs/
|
# See https://platform.deepseek.com/api-docs/
|
||||||
- type: openai-compatible
|
- type: openai-compatible
|
||||||
name: deepseek
|
name: deepseek
|
||||||
api_base: https://api.deepseek.com
|
api_base: https://api.deepseek.com
|
||||||
api_key: '{{DEEPSEEK_API_KEY}}' # You can either hard-code or inject secrets from the Coyote vault
|
api_key: '{{DEEPSEEK_API_KEY}}' # You can either hard-code or inject secrets from the Coyote vault
|
||||||
|
|
||||||
# See https://open.bigmodel.cn/dev/howuse/introduction
|
# See https://open.bigmodel.cn/dev/howuse/introduction
|
||||||
- type: openai-compatible
|
- type: openai-compatible
|
||||||
name: zhipuai
|
name: zhipuai
|
||||||
api_base: https://open.bigmodel.cn/api/paas/v4
|
api_base: https://open.bigmodel.cn/api/paas/v4
|
||||||
api_key: '{{ZHIPUAI_API_KEY}}' # You can either hard-code or inject secrets from the Coyote vault
|
api_key: '{{ZHIPUAI_API_KEY}}' # You can either hard-code or inject secrets from the Coyote vault
|
||||||
|
|
||||||
# See https://platform.minimaxi.com/document/Fast%20access
|
# See https://platform.minimaxi.com/document/Fast%20access
|
||||||
- type: openai-compatible
|
- type: openai-compatible
|
||||||
name: minimax
|
name: minimax
|
||||||
api_base: https://api.minimax.chat/v1
|
api_base: https://api.minimax.chat/v1
|
||||||
api_key: '{{MINIMAX_API_KEY}}' # You can either hard-code or inject secrets from the Coyote vault
|
api_key: '{{MINIMAX_API_KEY}}' # You can either hard-code or inject secrets from the Coyote vault
|
||||||
|
|
||||||
# See https://openrouter.ai/docs#quick-start
|
# See https://openrouter.ai/docs#quick-start
|
||||||
- type: openai-compatible
|
- type: openai-compatible
|
||||||
name: openrouter
|
name: openrouter
|
||||||
api_base: https://openrouter.ai/api/v1
|
api_base: https://openrouter.ai/api/v1
|
||||||
api_key: '{{OPENROUTER_API_KEY}}' # You can either hard-code or inject secrets from the Coyote vault
|
api_key: '{{OPENROUTER_API_KEY}}' # You can either hard-code or inject secrets from the Coyote vault
|
||||||
|
|
||||||
# See https://github.com/marketplace/models
|
# See https://github.com/marketplace/models
|
||||||
- type: openai-compatible
|
- type: openai-compatible
|
||||||
name: github
|
name: github
|
||||||
api_base: https://models.inference.ai.azure.com
|
api_base: https://models.inference.ai.azure.com
|
||||||
api_key: '{{GITHUB_API_KEY}}' # You can either hard-code or inject secrets from the Coyote vault
|
api_key: '{{GITHUB_API_KEY}}' # You can either hard-code or inject secrets from the Coyote vault
|
||||||
|
|
||||||
# See https://deepinfra.com/docs
|
# See https://deepinfra.com/docs
|
||||||
- type: openai-compatible
|
- type: openai-compatible
|
||||||
name: deepinfra
|
name: deepinfra
|
||||||
api_base: https://api.deepinfra.com/v1/openai
|
api_base: https://api.deepinfra.com/v1/openai
|
||||||
api_key: '{{DEEPINFRA_API_KEY}}' # You can either hard-code or inject secrets from the Coyote vault
|
api_key: '{{DEEPINFRA_API_KEY}}' # You can either hard-code or inject secrets from the Coyote vault
|
||||||
|
|
||||||
|
|
||||||
# ----- RAG dedicated -----
|
# ----- RAG dedicated -----
|
||||||
|
|
||||||
@@ -536,10 +563,10 @@ clients:
|
|||||||
- type: openai-compatible
|
- type: openai-compatible
|
||||||
name: jina
|
name: jina
|
||||||
api_base: https://api.jina.ai/v1
|
api_base: https://api.jina.ai/v1
|
||||||
api_key: '{{JINA_API_KEY}}' # You can either hard-code or inject secrets from the Coyote vault
|
api_key: '{{JINA_API_KEY}}' # You can either hard-code or inject secrets from the Coyote vault
|
||||||
|
|
||||||
# See https://docs.voyageai.com/docs/introduction
|
# See https://docs.voyageai.com/docs/introduction
|
||||||
- type: openai-compatible
|
- type: openai-compatible
|
||||||
name: voyageai
|
name: voyageai
|
||||||
api_base: https://api.voyageai.com/v1
|
api_base: https://api.voyageai.com/v1
|
||||||
api_key: '{{VOYAGEAI_API_KEY}}' # You can either hard-code or inject secrets from the Coyote vault
|
api_key: '{{VOYAGEAI_API_KEY}}' # You can either hard-code or inject secrets from the Coyote vault
|
||||||
|
|||||||
@@ -16,6 +16,10 @@ enabled_tools: # Tools to enable for this role. Accepts a
|
|||||||
enabled_mcp_servers: # MCP servers to enable for this role. Accepts a YAML list (preferred)
|
enabled_mcp_servers: # MCP servers to enable for this role. Accepts a YAML list (preferred)
|
||||||
- github # or a comma-separated string (e.g. `enabled_mcp_servers: github,gitmcp`).
|
- github # or a comma-separated string (e.g. `enabled_mcp_servers: github,gitmcp`).
|
||||||
- gitmcp # Use `all` to enable every configured MCP server.
|
- gitmcp # Use `all` to enable every configured MCP server.
|
||||||
|
mcp_tools: # Per-server MCP tool allowlists for this role (globs: * and ?).
|
||||||
|
github: # Intersects with the global config / mcp.json `allowedTools`.
|
||||||
|
- get_* # Layers only narrow. Tools matching no pattern are hidden from
|
||||||
|
- search_* # the model as if they don't exist.
|
||||||
skills_enabled: true # Master switch for skills in this role (default: inherit from global).
|
skills_enabled: true # Master switch for skills in this role (default: inherit from global).
|
||||||
# Skills also require `function_calling_support: true` in the global config.
|
# Skills also require `function_calling_support: true` in the global config.
|
||||||
enabled_skills: # Skills available when this role is active. Accepts a YAML list (preferred)
|
enabled_skills: # Skills available when this role is active. Accepts a YAML list (preferred)
|
||||||
|
|||||||
@@ -51,6 +51,10 @@ global_tools: # Tool universe an `llm` node's `tools:` whit
|
|||||||
mcp_servers: # MCP servers an `llm` node may reference via `mcp:<server>`
|
mcp_servers: # MCP servers an `llm` node may reference via `mcp:<server>`
|
||||||
- ddg-search
|
- ddg-search
|
||||||
|
|
||||||
|
mcp_tools: # Optional per-server tool allowlists (globs: * and ?) applied to
|
||||||
|
ddg-search: # every node that uses `mcp:<server>`; intersects with the other
|
||||||
|
- search # allowlist layers (global config, agent, mcp.json `allowedTools`).
|
||||||
|
|
||||||
# ---------------------------------------------------------------------------
|
# ---------------------------------------------------------------------------
|
||||||
# Skills policy (optional)
|
# Skills policy (optional)
|
||||||
# Skills only attach to `llm` nodes inside a graph. Both fields are optional.
|
# Skills only attach to `llm` nodes inside a graph. Both fields are optional.
|
||||||
@@ -402,6 +406,9 @@ nodes:
|
|||||||
tools: # Narrow whitelist: exactly these entries, nothing else
|
tools: # Narrow whitelist: exactly these entries, nothing else
|
||||||
- web_search_coyote # an exact global-tool / custom-tool name
|
- web_search_coyote # an exact global-tool / custom-tool name
|
||||||
- mcp:ddg-search # `mcp:<server>` includes that server's functions
|
- mcp:ddg-search # `mcp:<server>` includes that server's functions
|
||||||
|
mcp_tools: # Optional per-node narrowing of MCP tools (globs: * and ?)
|
||||||
|
ddg-search: # keys must be servers this graph enables; intersects with
|
||||||
|
- search # the graph-level mcp_tools above and every other layer
|
||||||
model: claude:claude-haiku-4-5 # Optional per-node model override
|
model: claude:claude-haiku-4-5 # Optional per-node model override
|
||||||
temperature: 0.3 # Optional per-node sampling override
|
temperature: 0.3 # Optional per-node sampling override
|
||||||
reasoning_effort: null # Optional per-node reasoning effort override (e.g. low, medium, high)
|
reasoning_effort: null # Optional per-node reasoning effort override (e.g. low, medium, high)
|
||||||
|
|||||||
Reference in New Issue
Block a user