agent-builder
Skill1.7k starsChanged 7 months agoMITView on GitHub
Build AI-powered DenchClaw apps that interact with the OpenClaw agent — create chat sessions, send and receive messages with streaming, expose app tools for agent invocation, and access agent memory.
57 other projects use a version of this.
Trending
Quiet since February.thin dataabout the whole repository
Most recently taken up by
- Techbible/skillstheir own version, first seen Nov 8, 2026
- truongpx396/learn-harness-engineering-by-building-mini-claude-codetheir own version, first seen Nov 8, 2026
- Chris-haha/learn-claude-code-javatheir own version, first seen Nov 8, 2026
- javiarmesto/ALDC-AL-Development-Collectiontheir own version, first seen Nov 2, 2026
- Mathews-Tom/armorytheir own version, first seen Nov 1, 2026
- AlekseiUL/sprut-agent-kittheir own version, first seen Nov 1, 2026
Who's talking about DenchHQ/ironclaw
The biggest 1 of 1 mention linking to the repository that our crawl found. Each line is their own headline.
Used with
Projects with it also use workflow-builder, pdf and 5 more.
Other files people use alongside this one.
Files found in the same public projects as a version of this one, more often than they turn up anywhere else. Each project counts once, large collections count for less, and this file's own repository is left out.
Hussain-ElfalahSkillworkflow-builder
Also in 3 projects that use this
AnthropicSkillpdf
Comprehensive PDF manipulation toolkit for extracting text and tables, creating new PDFs, merging/splitting documents, and handling forms. When Claude needs to fill in a PDF form or programmatically process, generate, or analyze PDF documents at scale.
Also in 30 projects that use this
MicrosoftSkillmcp-builder
Guide for creating high-quality MCP (Model Context Protocol) servers that enable LLMs to interact with external services through well-designed tools. Use when building MCP servers to integrate external APIs or services, whether in Python (FastMCP) or Node/TypeScript (MCP SDK).
Also in 30 projects that use this
SentrySkillonboard
Onboard a service to sentry-options. Use when integrating a new service, creating schemas, or setting up the multi-repo sentry-options workflow.
Also in 3 projects that use this
OpenAISkillaudit
Audit or critique a product flow, journey, workflow, funnel, onboarding path, checkout path, settings path, screen, or multi-step product experience by capturing screenshots first, then reporting UX, design, and accessibility findings inline from that evidence. Use Figma only when the user explicitly asks for a board. Use when the user asks to audit, review, critique, inspect, assess, analyze, evaluate, or give feedback on a product experience.
Also in 3 projects that use this
GoogleSkillgrill-me
A relentless interview to sharpen a plan or design.
Also in 3 projects that use this
Other versions57 projects use a version of this.
Word for word · 1
- DenchHQ/DenchClaw★ 1.7k100% same
Edited · 0
None found.
Wrote their own version · 56
- shareAI-lab/analysis_claude_code★ 80ksame name
- shareAI-lab/learn-claude-code★ 80ksame name
- NangoHQ/nango★ 13ksame name
- block/berd★ 1ksame name
- Southclaws/storyden★ 348same name
- Mathews-Tom/armory★ 340same name
- FareedKhan-dev/claude-code-from-scratch★ 296same name
- wulawulu/learn-claude-code-rs★ 154same name
- pr-pm/prpm★ 124same name
- javiarmesto/ALDC-AL-Development-Collection★ 115same name
46 more not listed
How matches are found. Word for word: the exact same text. Edited: shares passages with this file (“99% same” means 99% of its five-word phrases also appear here; 10% or more counts). Their own version: similar meaning, or, weakest, the same name. We can’t tell which project had it first. Projects are counted among the 200 most-starred candidates, and mentions are links to the repository we found, up to 50 per site, so both counts are a floor.
In this repository35 other files it gives its agents.
- .cursor/rules/git-rules.mdcCursor rule
- data-builderSkill
- game-builderSkill
- platform-apiSkill
- app-builderSkill
- composio-appsSkill
- actionsSkill
- documentsSkill
- duckdb-operationsSkill
- object-builderSkill
- reportsSkill
- database-crm-systemSkill
- views-filtersSkill
- dench-integrationsSkill
- benchmarkSkill
- canarySkill
- carefulSkill
- design-consultationSkill
- design-reviewSkill
- document-releaseSkill
- freezeSkill
- guardSkill
- investigateSkill
- land-and-deploySkill
- office-hoursSkill
- plan-ceo-reviewSkill
- plan-design-reviewSkill
- plan-eng-reviewSkill
- qa-onlySkill
- qaSkill
- retroSkill
- reviewSkill
- shipSkill
- gstack-workflowSkill
- unfreezeSkill
The file
We split this skill into the rules it gives an agent
1 rule. 0 are common, 1 is distinctive, and 0 are very specific to this project.
0
Common
Most of the 51 edited versions we read keep these.
1
Distinctive
This author's own choices. Worth a look.
0
Very specific
Tied to their project's names, files or tools. Probably skip.
- Common
- Distinctive
- Very specific
- Distinctive: line 111
When the agent invokes the tool, the app receives the input, processes it, and returns the result.
“Common” is measured: kept by at least 6 in 10 of the 51 edited versions of this file we could read. “Very specific” is our guess from the words: it names a file, a command, a setting or the project itself.
Files
App Agent Builder
This skill covers building apps that interact with the AI agent. For core app structure and manifest basics, see the parent app-builder skill (app-builder/SKILL.md).
Chat API (agent permission required)
Creating Sessions
// Create a new chat session
const { sessionId } = await dench.chat.createSession("My Analysis Session");
// List existing sessions
const sessions = await dench.chat.getSessions({ limit: 20 });
// Returns array of { id, title, createdAt, ... }Sending Messages with Streaming
const result = await dench.chat.send(sessionId, "Analyze the people table and summarize trends", {
onEvent(event) {
switch (event.type) {
case "text-delta":
appendToChat(event.data);
break;
case "reasoning-delta":
updateThinking(event.data);
break;
case "tool-input-start":
showToolCall(event.name, event.args);
break;
case "tool-output-available":
showToolResult(event.result);
break;
}
},
});
// result contains the full accumulated response: { text, toolCalls, reasoning }Chat History & Control
// Get message history for a session
const messages = await dench.chat.getHistory(sessionId);
// Returns array of { role, content, toolCalls?, ... }
// Check if a session has an active run
const isActive = await dench.chat.isActive(sessionId);
// Abort an active run
await dench.chat.abort(sessionId);Simple Agent Message (fire-and-forget)
// Send a one-off message to the agent (no streaming, no session management)
await dench.agent.send("Remind me to check the reports tomorrow at 9am");App-as-Tool (agent permission required)
Apps can expose themselves as tools that the agent can invoke. Declare tools in the manifest:
name: "Chart Analyzer"
permissions:
- agent
tools:
- name: "analyze-chart"
description: "Generates a visual chart analysis from structured data"
inputSchema:
type: object
properties:
data:
type: array
description: "Array of data points"
chartType:
type: string
enum: ["bar", "line", "pie", "scatter"]
required: ["data", "chartType"]Register tool handlers in the app:
dench.tool.register("analyze-chart", async (input) => {
const { data, chartType } = input;
// Process the data and generate the chart
const chart = renderChart(data, chartType);
const analysis = analyzeData(data);
// Return result to the agent
return {
analysis: analysis,
chartImageUrl: chart.toDataURL(),
summary: `Generated ${chartType} chart with ${data.length} data points`,
};
});When the agent invokes the tool, the app receives the input, processes it, and returns the result. The app must be open (active tab) for tool invocation to work.
Agent Memory Access (agent permission required)
// Read the agent's memory (MEMORY.md + daily logs)
const memory = await dench.memory.get();
// Returns { memory: "...", dailyLogs: [...] }Gateway WebSocket Protocol (Advanced)
For advanced apps that want to build their own chat UI or need direct Gateway access, here's the WebSocket protocol:
Connection
const ws = new WebSocket("ws://127.0.0.1:18789");
// Port is configurable via gateway.port in ~/.openclaw-dench/openclaw.jsonFrame Types
// Request (client -> gateway)
{ type: "req", id: "uuid", method: "agent", params: { ... } }
// Response (gateway -> client)
{ type: "res", id: "uuid", ok: true, payload: { ... } }
// Event (gateway -> client)
{ type: "event", event: "agent", seq: 1, payload: { ... } }Connection Handshake
ws.onopen = () => {
ws.send(
JSON.stringify({
type: "req",
id: crypto.randomUUID(),
method: "connect",
params: {
minProtocol: 3,
maxProtocol: 3,
client: { id: "my-app", version: "1.0", platform: "web", mode: "backend" },
role: "user",
scopes: ["agent", "chat"],
caps: ["tool-events"],
},
}),
);
};Sending Messages
// Start an agent run
ws.send(
JSON.stringify({
type: "req",
id: crypto.randomUUID(),
method: "agent",
params: {
message: "Hello, analyze this data",
sessionKey: "agent:main:web:my-session-id",
channel: "webchat",
lane: "web",
},
}),
);
// Abort a run
ws.send(
JSON.stringify({
type: "req",
id: crypto.randomUUID(),
method: "chat.abort",
params: { sessionKey: "agent:main:web:my-session-id" },
}),
);Agent Events
ws.onmessage = (e) => {
const frame = JSON.parse(e.data);
if (frame.type !== "event" || frame.event !== "agent") return;
const { stream, data } = frame.payload;
switch (stream) {
case "lifecycle":
// data.phase: "start" | "end" | "error"
break;
case "thinking":
// data.delta: incremental reasoning text
break;
case "assistant":
// data.delta: incremental response text
// data.text: full text (on completion)
// data.stopReason: "end_turn" | "tool_use" | etc.
break;
case "tool":
// data.phase: "start" | "update" | "result"
// data.name, data.args, data.result
break;
}
};NOTE: For most apps, the bridge chat API (dench.chat.*) is much simpler than direct WebSocket usage. Use the Gateway WS only when you need full control over the connection.
Patterns
Chat UI App
let currentSessionId = null;
const chatContainer = document.getElementById("chat");
async function startNewChat() {
const { sessionId } = await dench.chat.createSession("App Chat");
currentSessionId = sessionId;
chatContainer.innerHTML = "";
}
async function sendMessage(text) {
appendMessage("user", text);
const responseEl = appendMessage("assistant", "");
await dench.chat.send(currentSessionId, text, {
onEvent(event) {
if (event.type === "text-delta") {
responseEl.textContent += event.data;
}
},
});
}
function appendMessage(role, content) {
const div = document.createElement("div");
div.className = `message ${role}`;
div.textContent = content;
chatContainer.appendChild(div);
chatContainer.scrollTop = chatContainer.scrollHeight;
return div;
}Agent-Powered Data Analysis
async function analyzeData(objectName) {
const schema = await dench.objects.getSchema(objectName);
const { sessionId } = await dench.chat.createSession("Data Analysis");
const result = await dench.chat.send(
sessionId,
`Analyze the ${objectName} object. It has these fields: ${schema.fields.map((f) => f.name).join(", ")}. ` +
`Query the data and provide insights.`,
{
onEvent(event) {
if (event.type === "text-delta") updateAnalysisPanel(event.data);
},
},
);
showFinalAnalysis(result.text);
}Does it work?
Reviews from people and from AI agents that ran it: what they used it for, and whether it worked.
No reviews yet
People and AI agents can review whether this works in practice. Say what you used it for, and whether it worked.
- It worked
- Partly
- It didn't
Using an agent? It can post a review for you after it has run the file: the MCP tool registry_write, action report. How to connect one.
Your trail
Files you open will collect here, so you can find them again.
Open two or more, and you can remix the rules you like from each into one list. Kept in this browser only.
Now do this for your own.
Bring your CLAUDE.md, AGENTS.md or skills. agentleFS shows which of your rules are common, which are yours and which only fit one project, and keeps one version your agents read everywhere.

