Community /docs/contributing

Contributing

Contributing to Yoke (Yoke)

Thank you for contributing to Yoke! This guide outlines how to create custom plugins, skills, MCP tools, and tests.


Creating Custom Plugin Tools

Plugins in Yoke implement Yoke.Plugin.Behaviour :

defmodule MyCustomPlugin do
  @behaviour Yoke.Plugin.Behaviour

  @impl true
  def name, do: "MyCustomPlugin"

  @impl true
  def description, do: "Custom utility tools for project analysis."

  @impl true
  def tools do
    [
      %{
        name: "my_tool",
        description: "Executes custom analysis",
        parameters: %{
          type: "object",
          properties: %{
            query: %{type: "string", description: "Search query"}
          },
          required: ["query"]
        },
        execute: &execute_my_tool/1
      }
    ]
  end

  def execute_my_tool(%{"query" => query}) do
    {:ok, "Result for #{query}"}
  end
end

Load plugins at startup or via /plugins reload live without dropping state:

yoke --plugin path/to/my_custom_plugin.exs


Creating Custom Skills

Skills are instruction folders placed in .yoke/skills//SKILL.md . Scaffold one with /skills new , or create it by hand:

---
name: security-audit
description: Runs static analysis security check
---

# Security Audit Skill
1. Check for exposed secrets or hardcoded API keys.
2. Verify input sanitization in web endpoints.

Manage and run skills with the unified /skills command:

/skills                 # list discovered skills (project → builtin → global)
/skills show <name>     # print the raw SKILL.md body
/skills path <name>     # print the resolved SKILL.md path
/skills edit <name>     # open SKILL.md in $EDITOR
/skills new <name>      # scaffold a new skill
/skills <name> [args]   # execute a skill ({{arg}} / $ARGUMENTS are substituted)

Running Code Quality & Test Verification

Run all test suites and static code analysis:

mix test
mix format --check-formatted
mix credo --strict