
Security News
PodRocket Podcast: Inside the Recent npm Supply Chain Attacks
Socket CEO Feross Aboukhadijeh discusses the recent npm supply chain attacks on PodRocket, covering novel attack vectors and how developers can protect themselves.
agents-sdk
Advanced tools
agents-sdk
- A Framework for Digital IntelligenceWelcome to a new chapter in software development, where AI agents persist, think, and act with purpose. The agents-sdk
framework creates an environment where artificial intelligence can flourish - maintaining state, engaging in meaningful interactions, and evolving over time.
This project is in active development. Join us in shaping the future of intelligent agents.
An AI agent transcends traditional software boundaries. It's an entity that:
Built on Cloudflare's global network, this framework provides agents with a reliable, distributed foundation where they can operate continuously and effectively.
Start with a complete environment:
# Create a new project
npm create cloudflare@latest -- --template cloudflare/agents-starter
# Or enhance an existing one
npm install agents-sdk
Create an agent that bridges thought and action:
import { Agent } from "agents-sdk";
export class IntelligentAgent extends Agent {
async onRequest(request) {
// Transform intention into response
return new Response("Ready to assist.");
}
}
Agents can manifest various forms of understanding:
import { Agent } from "agents-sdk";
import { OpenAI } from "openai";
export class AIAgent extends Agent {
async onRequest(request) {
// Connect with AI capabilities
const ai = new OpenAI({
apiKey: this.env.OPENAI_API_KEY,
});
// Process and understand
const response = await ai.chat.completions.create({
model: "gpt-4",
messages: [{ role: "user", content: await request.text() }],
});
return new Response(response.choices[0].message.content);
}
async processTask(task) {
await this.understand(task);
await this.act();
await this.reflect();
}
}
Define your agent's domain:
{
"durable_objects": {
"bindings": [
{
"name": "AIAgent",
"class_name": "AIAgent",
},
],
},
"migrations": [
{
"tag": "v1",
// Mandatory for the Agent to store state
"new_sqlite_classes": ["AIAgent"],
},
],
}
Bring your agent into being:
// Create a new instance
const id = env.AIAgent.newUniqueId();
const agent = env.AIAgent.get(id);
// Initialize with purpose
await agent.processTask({
type: "analysis",
context: "incoming_data",
parameters: initialConfig,
});
// Or reconnect with an existing one
const existingAgent = await getAgentByName(env.AIAgent, "data-analyzer");
Process and respond to direct requests:
export class APIAgent extends Agent {
async onRequest(request) {
const data = await request.json();
return Response.json({
insight: await this.process(data),
moment: Date.now(),
});
}
}
Maintain ongoing dialogues through WebSocket:
export class DialogueAgent extends Agent {
async onConnect(connection) {
await this.initiate(connection);
}
async onMessage(connection, message) {
const understanding = await this.comprehend(message);
await this.respond(connection, understanding);
}
}
For direct connection to your agent:
import { AgentClient } from "agents-sdk/client";
const connection = new AgentClient({
agent: "dialogue-agent",
name: "insight-seeker",
});
connection.addEventListener("message", (event) => {
console.log("Received:", event.data);
});
connection.send(
JSON.stringify({
type: "inquiry",
content: "What patterns do you see?",
})
);
For harmonious integration with React:
import { useAgent } from "agents-sdk/react";
function AgentInterface() {
const connection = useAgent({
agent: "dialogue-agent",
name: "insight-seeker",
onMessage: (message) => {
console.log("Understanding received:", message.data);
},
onOpen: () => console.log("Connection established"),
onClose: () => console.log("Connection closed"),
});
const inquire = () => {
connection.send(
JSON.stringify({
type: "inquiry",
content: "What insights have you gathered?",
})
);
};
return (
<div className="agent-interface">
<button onClick={inquire}>Seek Understanding</button>
</div>
);
}
Maintain and evolve your agent's understanding:
export class ThinkingAgent extends Agent {
async evolve(newInsight) {
this.setState({
...this.state,
insights: [...(this.state.insights || []), newInsight],
understanding: this.state.understanding + 1,
});
}
onStateUpdate(state, source) {
console.log("Understanding deepened:", {
newState: state,
origin: source,
});
}
}
Connect to your agent's state from React:
import { useState } from "react";
import { useAgent } from "agents-sdk/react";
function StateInterface() {
const [state, setState] = useState({ counter: 0 });
const agent = useAgent({
agent: "thinking-agent",
onStateUpdate: (newState) => setState(newState),
});
const increment = () => {
agent.setState({ counter: state.counter + 1 });
};
return (
<div>
<div>Count: {state.counter}</div>
<button onClick={increment}>Increment</button>
</div>
);
}
This creates a synchronized state that automatically updates across all connected clients.
Schedule moments of action and reflection:
export class TimeAwareAgent extends Agent {
async initialize() {
// Quick reflection
this.schedule(10, "quickInsight", { focus: "patterns" });
// Daily synthesis
this.schedule("0 0 * * *", "dailySynthesis", {
depth: "comprehensive",
});
// Milestone review
this.schedule(new Date("2024-12-31"), "yearlyAnalysis");
}
async quickInsight(data) {
await this.analyze(data.focus);
}
async dailySynthesis(data) {
await this.synthesize(data.depth);
}
async yearlyAnalysis() {
await this.analyze();
}
}
Create meaningful conversations with intelligence:
import { AIChatAgent } from "agents-sdk/ai-chat-agent";
import { createOpenAI } from "@ai-sdk/openai";
export class DialogueAgent extends AIChatAgent {
async onChatMessage(onFinish) {
return createDataStreamResponse({
execute: async (dataStream) => {
const ai = createOpenAI({
apiKey: this.env.OPENAI_API_KEY,
});
const stream = streamText({
model: ai("gpt-4o"),
messages: this.messages,
onFinish, // call onFinish so that messages get saved
});
stream.mergeIntoDataStream(dataStream);
},
});
}
}
Connect with your agent through a React interface:
import { useAgent } from "agents-sdk/react";
import { useAgentChat } from "agents-sdk/ai-react";
function ChatInterface() {
// Connect to the agent
const agent = useAgent({
agent: "dialogue-agent",
});
// Set up the chat interaction
const { messages, input, handleInputChange, handleSubmit, clearHistory } =
useAgentChat({
agent,
maxSteps: 5,
});
return (
<div className="chat-interface">
{/* Message History */}
<div className="message-flow">
{messages.map((message) => (
<div key={message.id} className="message">
<div className="role">{message.role}</div>
<div className="content">{message.content}</div>
</div>
))}
</div>
{/* Input Area */}
<form onSubmit={handleSubmit} className="input-area">
<input
value={input}
onChange={handleInputChange}
placeholder="Type your message..."
className="message-input"
/>
</form>
<button onClick={clearHistory} className="clear-button">
Clear Chat
</button>
</div>
);
}
This creates:
We're developing new dimensions of agent capability:
These capabilities will expand your agents' potential while maintaining their reliability and purpose.
Welcome to the future of intelligent agents. Create something meaningful. 🌟
Contributions are welcome, but are especially welcome when:
agents-sdk
. Not everything will, and that's OK.Small fixes, type bugs, and documentation improvements can be raised directly as PRs.
MIT licensed. See the LICENSE file at the root of this repository for details.
FAQs
A home for your AI agents
The npm package agents-sdk receives a total of 31 weekly downloads. As such, agents-sdk popularity was classified as not popular.
We found that agents-sdk demonstrated a healthy version release cadence and project activity because the last version was released less than a year ago. It has 2 open source maintainers collaborating on the project.
Did you know?
Socket for GitHub automatically highlights issues in each pull request and monitors the health of all your open source dependencies. Discover the contents of your packages and block harmful activity before you install or update your dependencies.
Security News
Socket CEO Feross Aboukhadijeh discusses the recent npm supply chain attacks on PodRocket, covering novel attack vectors and how developers can protect themselves.
Security News
Maintainers back GitHub’s npm security overhaul but raise concerns about CI/CD workflows, enterprise support, and token management.
Product
Socket Firewall is a free tool that blocks malicious packages at install time, giving developers proactive protection against rising supply chain attacks.