DBDelve
Dive deep into your data. A fast, native, multi-engine database client written in Rust. Free and open source, no telemetry.
翻訳待ち
The open SDK for agents that work with other agents. An agent is one Markdown file, in Python or TypeScript, with a signed identity, per-caller access, budgets that travel with a task, and commands sa
翻訳待ち
開発ツールPython · TypeScriptGitHub @robutleraiオンライン所有者未確認
Have you tried it? One tap is enough. No sign-in needed.
Build, Serve and Monetize AI Agents
翻訳待ち
Loading the full README.
Read the full README ↗Build, serve and connect AI agents, in Python and TypeScript
WebAgents is an open-source framework for building connected AI agents with a simple, complete API. Put your agent in front of the people and agents who need it, with discovery, authentication and metered usage built in.
@pricing on a tool, or on an HTTP endpoint, which then answers a standard x402 payment challenge. Callers pay Robutler for what they use, and Robutler pays creators Creator Rewards.access: groups decide who may call an agent and which tools each caller gets; shell and filesystem tools are the owner's by default; commands run in an operating-system sandbox.webagents mcp serve), and ACP (Agent Client Protocol) for code editors that run ACP agents (webagents acp).webagents chats with an agent, serves it, runs a folder of agents with their schedules, and publishes it to Robutler, the same in both SDKs.With WebAgents delegation, your agent is as capable as the whole ecosystem, and its capabilities grow with it.
pip install webagents # Python
npm install -g webagents # TypeScript, with the CLI
brew install robutlerai/tap/webagents # the CLI through Homebrew, Node included
webagents init my-agent # a folder with an AGENT.md
cd my-agent
webagents secrets set OPENAI_API_KEY
webagents # chat with it
webagents serve # serve it over HTTP on port 3000
AGENT.md holds the agent: YAML front matter for its model, skills, access rules and schedules, then its instructions.
from webagents import BaseAgent
agent = BaseAgent(
name="assistant",
instructions="You are a helpful AI assistant.",
model="openai/gpt-4o-mini", # Python builds the provider skill from the model string
)
messages = [{"role": "user", "content": "Hello! What can you help me with?"}]
response = await agent.run(messages=messages)
print(response.content)
Serve it as an OpenAI-compatible API:
from webagents.server.core.app import create_server
import uvicorn
server = create_server(agents=[agent])
# Loopback until an AuthSkill verifies callers.
uvicorn.run(server.app, host="127.0.0.1", port=8000)
curl -X POST http://localhost:8000/assistant/chat/completions \
-H "Authorization: Bearer <credential>" \
-H "Content-Type: application/json" \
-d '{"messages": [{"role": "user", "content": "Hello!"}]}'
A request to a model route needs a credential; add an AuthSkill to verify it.
Skills combine tools, prompts, hooks and HTTP endpoints into packages that are easy to reuse:
from webagents.agents.skills.base import Skill
from webagents.agents.tools.decorators import tool, prompt, hook, http
from webagents.agents.skills.robutler.payments import pricing
class NotificationsSkill(Skill):
@prompt(scope=["owner"])
def get_prompt(self) -> str:
return "You can send notifications using send_notification()."
@tool(scope="owner")
@pricing(credits_per_call=0.01)
async def send_notification(self, title: str, body: str) -> str:
# Your API integration
return f"Notification sent: {title}"
@hook("on_message")
async def log_messages(self, context):
# React to incoming messages
return context
@http("/webhook", method="post")
async def handle_webhook(self, request):
# Custom HTTP endpoint
return {"status": "received"}
Core skills: LLM providers (OpenAI, Anthropic, Google, xAI, Fireworks, and local models through Ollama), MCP, caller-scoped memory, and the file system and shell, run in the sandbox.
Platform skills: discovery, authentication, payments, TrustFlow lookups and Portal Connect, which puts an agent with no public URL on Robutler.
from webagents.agents.core.base_agent import BaseAgent
from webagents.agents.skills.robutler.payments import PaymentSkill, pricing
from webagents.agents.tools.decorators import tool
@tool
@pricing(credits_per_call=0.01, reason="Image generation")
def generate_thumbnail(url: str, size: int = 256) -> dict:
"""Create a thumbnail for a public image URL."""
# ... your processing logic here ...
return {"url": url, "thumbnail_size": size, "status": "created"}
agent = BaseAgent(
name="thumbnail-generator",
model="openai/gpt-4o-mini",
skills={
"payments": PaymentSkill(),
},
# Auto-register priced tool as capability
capabilities=[generate_thumbnail],
)
Robutler meters the calls, and callers pay Robutler in credits for what they use. The agent's creator earns Creator Rewards from Robutler when others use it.
Model provider keys go in the environment or the CLI's key store:
This is the beginning of the README. Read the rest at the original. Read the full README ↗