
Autogpt Agents
Implement and register custom AutoGPT blocks with Pydantic schemas so autonomous workflows can call your logic.
Overview
AutoGPT Agents is an agent skill for the Build phase that teaches how to author, credential, and register custom AutoGPT blocks with typed Pydantic schemas.
Install
npx skills add https://github.com/orchestra-research/ai-research-skills --skill autogpt-agentsWhat is this skill?
- Block scaffold with BlockSchema input/output Pydantic models and async execute yielding named outputs
- Registration pattern via backend.blocks registry and BLOCKS list
- Credential-aware blocks using ProviderName integrations
- Standard vs custom block_type alignment with AutoGPT backend.data.block
- Guidance for internal process helpers separate from execute yield contract
Adoption & trust: 1 installs on skills.sh; 9.4k GitHub stars; 2/3 security scanners passed (skills.sh audits).
What problem does it solve?
You want AutoGPT workflows to call bespoke logic but lack a clear Block subclass, yield contract, and registry wiring on the backend.
Who is it for?
Indie builders hacking AutoGPT’s Python backend who need one more reusable node in autonomous agent pipelines.
Skip if: Claude Code SKILL.md-only workflows with no AutoGPT deployment, or no Python backend access.
When should I use this skill?
You are implementing or registering a new AutoGPT Block with input/output schemas and optional provider credentials.
What do I get? / Deliverables
You can ship a registered custom block with validated inputs/outputs and optional provider credentials ready to drop into AutoGPT graphs.
- Custom Block class with id, schemas, and execute implementation
- Registry entry in backend.blocks BLOCKS list
Recommended Skills
Journey fit
Custom AutoGPT blocks are product/agent capability work—you extend the agent runtime during Build, not distribution or ops. Block classes, registries, and provider credentials are agent-platform tooling, parallel to skills and MCP for other stacks.
How it compares
Backend block extension guide for AutoGPT—not a Prism skill pack for Claude or a REST MCP wrapper alone.
Common Questions / FAQ
Who is autogpt-agents for?
Developers extending AutoGPT with Python custom blocks who want schema-first blocks and registry patterns instead of one-off scripts.
When should I use autogpt-agents?
During Build agent-tooling when you are adding a new Block class, wiring credentials, or registering it before testing flows in Ship.
Is autogpt-agents safe to install?
Custom blocks can call networks and secrets via provider integrations; review the Security Audits panel on this page and scope credentials per environment.
SKILL.md
READMESKILL.md - Autogpt Agents
# AutoGPT Advanced Usage Guide ## Custom Block Development ### Block structure ```python from backend.data.block import Block, BlockSchema, BlockType from pydantic import BaseModel class MyBlockInput(BaseModel): """Input schema for the block.""" query: str max_results: int = 10 class MyBlockOutput(BaseModel): """Output schema for the block.""" results: list[str] count: int class MyCustomBlock(Block): """Custom block for specific functionality.""" id = "my-custom-block-uuid" name = "My Custom Block" description = "Does something specific" block_type = BlockType.STANDARD input_schema = MyBlockInput output_schema = MyBlockOutput async def execute(self, input_data: MyBlockInput) -> dict: """Execute the block logic.""" # Implement your logic results = await self.process(input_data.query, input_data.max_results) yield "results", results yield "count", len(results) async def process(self, query: str, max_results: int) -> list[str]: """Internal processing logic.""" # Implementation return ["result1", "result2"] ``` ### Block registration ```python # backend/blocks/__init__.py from backend.blocks.my_block import MyCustomBlock # Add to block registry BLOCKS = [ MyCustomBlock, # ... other blocks ] ``` ### Block with credentials ```python from backend.data.block import Block from backend.integrations.providers import ProviderName class APIIntegrationBlock(Block): """Block that uses external API credentials.""" credentials_required = [ProviderName.OPENAI] async def execute(self, input_data): # Get credentials from the system credentials = await self.get_credentials(ProviderName.OPENAI) # Use credentials client = OpenAI(api_key=credentials.api_key) response = await client.chat.completions.create( model="gpt-4o", messages=[{"role": "user", "content": input_data.prompt}] ) yield "response", response.choices[0].message.content ``` ### Block with cost tracking ```python from backend.data.block import Block from backend.data.block_cost_config import BlockCostConfig class LLMBlock(Block): """Block with cost tracking.""" cost_config = BlockCostConfig( cost_type="token", cost_per_unit=0.00002, # Per token provider="openai" ) async def execute(self, input_data): response = await self.call_llm(input_data.prompt) # Report token usage for cost tracking self.report_usage( input_tokens=response.usage.prompt_tokens, output_tokens=response.usage.completion_tokens ) yield "output", response.content ``` ## Advanced Execution Patterns ### Parallel node execution ```python from backend.executor.manager import ExecutionManager async def execute_parallel_nodes(graph_exec_id: str, node_ids: list[str]): """Execute multiple nodes in parallel.""" manager = ExecutionManager() tasks = [ manager.execute_node(graph_exec_id, node_id) for node_id in node_ids ] results = await asyncio.gather(*tasks) return results ``` ### Conditional branching ```python from backend.blocks.branching import BranchingBlock class SmartBranchBlock(BranchingBlock): """Advanced conditional branching.""" async def execute(self, input_data): condition = await self.evaluate_condition(input_data) if condition == "path_a": yield "output_a", input_data.value elif condition == "path_b": yield "output_b", input_data.value else: yield "output_default", input_data.value ``` ### Loop execution ```python class LoopBlock(Block): """Execute a subgraph in a loop.""" async def execute(self, input_data): items = input_data.items results = [] for i, item in enumerate(items): # Execute neste