Custom Tools

Custom Tools

Custom tools let you extend what your AI can do. Describe what you want — "build me a tool that checks my GitHub PRs every morning" — and your AI creates it. You review, approve, and it's live.

You never write code. Your AI handles the technical details.


How It Works

  1. You describe what you want the tool to do
  2. Your AI builds the tool definition (the code blocks below show what it generates)
  3. You review and approve before it goes live
  4. You use it by asking your AI in plain language

For example:

You: "Build me a tool that creates GitHub issues"
AI:  Creates the tool, sets up the connection to GitHub
You: "Create an issue in my project called 'Fix the login bug'"
AI:  Uses the tool you just built

Tool Types

Kyew supports four types of custom tools:

TypeWhat it doesExample request
Service ConnectorTalks to external services"Build a tool that posts to my Slack channel"
Data TransformReshapes or extracts data"Make a tool that extracts all email addresses from text"
Code RunnerRuns custom logic"Create a calculator that does financial projections"
Workflow ChainRuns multiple steps in order"Build a workflow that pulls data from Linear and posts a summary to Slack"

Service Connectors

Connect your AI to external services. Ask your AI something like:

"Build me a tool that creates issues in my GitHub repo"

Your AI generates the tool definition (you don't need to understand this — it's shown here for reference):

// What your AI generates under the hood:
create_dynamic_tool({
  name: "github_create_issue",
  description: "Create an issue in a GitHub repository",
  tool_type: "http_proxy",
  http_config: {
    method: "POST",
    url_template: "https://api.github.com/repos/{{owner}}/{{repo}}/issues",
    body_template: { title: "{{title}}", body: "{{body}}" },
    connection_id: "my-github-connection"
  }
})

See Service Connector Reference for technical details.


Data Transforms

Reshape or extract data. Ask your AI:

"Make a tool that pulls email addresses out of any text I give it"

Your AI builds it using a data expression language (JSONata):

// What your AI generates:
create_dynamic_tool({
  name: "extract_emails",
  description: "Extract email addresses from text",
  tool_type: "transform",
  transform_config: {
    expression: "$match(input.text, /[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\\.[a-zA-Z]{2,}/g)"
  }
})

See Data Transform Reference for technical details.


Code Runners

For anything that needs custom logic. Ask your AI:

"Build a tool that calculates averages, medians, and percentiles for any list of numbers"

Your AI writes JavaScript that runs in a secure, isolated container:

// What your AI generates:
create_code_tool({
  name: "calculate_stats",
  description: "Calculate statistical measures",
  runtime: "javascript",
  code: `
export default {
  async fetch(request) {
    const { numbers } = await request.json();
    const sum = numbers.reduce((a, b) => a + b, 0);
    return Response.json({
      sum,
      mean: sum / numbers.length,
      min: Math.min(...numbers),
      max: Math.max(...numbers)
    });
  }
}
  `
})

See Code Runner Reference for technical details.


Workflow Chains

Combine multiple tools into a single workflow. Ask your AI:

"Build a workflow that deploys my site and then posts a notification to Slack"

Your AI chains existing tools together:

// What your AI generates:
create_dynamic_tool({
  name: "deploy_and_notify",
  description: "Deploy and notify the team on Slack",
  tool_type: "chain",
  chain_config: {
    steps: [
      { tool_name: "cloudflare_deploy", input_mapping: { env: "{{environment}}" } },
      { tool_name: "slack_post", input_mapping: { channel: "#deployments", message: "Deployed to {{environment}}" } }
    ]
  }
})

See Workflow Chain Reference for technical details.


Managing Your Tools

Everything is done through conversation:

"List my custom tools"
"Show details for the GitHub issue tool"
"Update the Slack tool to also include a link"
"Delete the weather tool, I don't use it anymore"
"Test the GitHub tool with a sample issue"

Connections

When a tool needs to access a service (GitHub, Slack, etc.), your AI sets up a secure connection for authentication. You'll be asked to provide your API key or sign in via OAuth — the credentials are stored securely and never embedded in the tool itself.

Supported Authentication

TypeHow it works
API KeyYou provide a key, Kyew stores it securely
Bearer TokenSame as API key, sent as a bearer token
Basic AuthUsername and password
OAuth 2.0Sign in via browser, tokens refresh automatically

Tool Status

Every tool goes through a simple lifecycle:

  • Draft — just created, not active yet (you can review it)
  • Active — live and usable in conversations
  • Disabled — temporarily turned off

Your AI walks you through this. You always approve before a tool goes live.


Tips

  • Be specific when describing what you want — "a tool that posts to #general on Slack" is better than "a Slack tool"
  • Test before activating — ask your AI to test the tool with sample data first
  • Keep credentials safe — always use connections for API keys, never paste them into tool descriptions
Previous
You're in Control