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
- You describe what you want the tool to do
- Your AI builds the tool definition (the code blocks below show what it generates)
- You review and approve before it goes live
- 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:
| Type | What it does | Example request |
|---|---|---|
| Service Connector | Talks to external services | "Build a tool that posts to my Slack channel" |
| Data Transform | Reshapes or extracts data | "Make a tool that extracts all email addresses from text" |
| Code Runner | Runs custom logic | "Create a calculator that does financial projections" |
| Workflow Chain | Runs 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
| Type | How it works |
|---|---|
| API Key | You provide a key, Kyew stores it securely |
| Bearer Token | Same as API key, sent as a bearer token |
| Basic Auth | Username and password |
| OAuth 2.0 | Sign 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