Skip to content
Back to skills

Agent Framework Design

ASecurity

Use when building custom AI agent frameworks.

  • 2 stars
  • 0 votes
  • 0 copies
  • 4 views
  • Added September 10, 2026
ai-agentspythongoshellapi

Works with

  • api

Security analysis

A100/100

Scanned September 10, 2026

npx -y skills add LoopyLuci/Skills --skill agent-framework-design --agent claude-code

Installs into .claude/skills of the current project.

Are you the author of Agent Framework Design?

Add the live security badge to your README. It updates with every re-scan.

Security grade badge for Agent Framework Design
[![Security: A — Skills Directory](https://www.skillsdirectory.com/api/skills/loopyluci-agent-framework-design/badge)](https://www.skillsdirectory.com/skills/loopyluci-agent-framework-design)

More formats (shields.io, HTML) on the badges page. Keep it an A: scan every change in CI with Pro.

Download with Pro
SKILL.md
---
name: agent-framework-design
description: "Use when building custom AI agent frameworks."
category: mlops
tags: [agents, framework, design, ai, llm, tool-use]
---
# Agent Framework Design

Designing and building custom AI agent frameworks.

## Core Agent Loop

```python
class Agent:
    def __init__(self, llm, tools: dict):
        self.llm = llm
        self.tools = tools          # name → callable
        self.messages = []
        self.max_steps = 10

    def run(self, task: str) -> str:
        self.messages.append({"role": "user", "content": task})

        for step in range(self.max_steps):
            response = self.llm.invoke(self.messages)

            if response.get("type") == "final":
                return response["content"]

            tool_name = response["tool"]
            tool_args = response["args"]
            result = self.tools[tool_name](**tool_args)

            self.messages.append({
                "role": "tool",
                "tool": tool_name,
                "content": str(result)
            })

        return "Max steps reached"
```

## Tool Definition

```python
from pydantic import BaseModel
from typing import Any, Callable

class Tool(BaseModel):
    name: str
    description: str
    parameters: dict          # JSON Schema
    function: Callable
    requires_admin: bool = False

    def to_llm_format(self) -> dict:
        return {
            "type": "function",
            "function": {
                "name": self.name,
                "description": self.description,
                "parameters": self.parameters,
            }
        }

# Example tools
tools = {
    "read_file": Tool(
        name="read_file",
        description="Read a file from disk",
        parameters={
            "type": "object",
            "properties": {
                "path": {"type": "string", "description": "Path to file"}
            },
            "required": ["path"]
        },
        function=lambda path: open(path).read(),
    ),
    "run_command": Tool(
        name="run_command",
        description="Execute a shell command",
        parameters={
            "type": "object",
            "properties": {
                "command": {"type": "string"},
                "timeout": {"type": "integer", "default": 30}
            },
            "required": ["command"]
        },
        function=lambda command, timeout=30: ...,
        requires_admin=True,
    ),
}
```

## System Prompt Template

```python
SYSTEM_PROMPT = """You are an AI assistant with access to the following tools:
{tool_descriptions}

You must decide which tool to use or provide a final answer.
For tool calls, respond with:
  TOOL: tool_name
  ARGS: {{"arg1": "value1"}}

For final answers, respond with:
  FINAL: your answer here

Rules:
1. Only use tools that exist in the list above
2. Pass all required parameters
3. If a tool fails, try an alternative approach
4. Be concise in observations
5. Max {max_steps} steps"""
```

## Agent with Planning

```python
class PlanningAgent(Agent):
    def run(self, task: str) -> str:
        # Step 1: Create plan
        plan_prompt = f"Create a step-by-step plan to: {task}"
        plan = self.llm.invoke(plan_prompt)

        # Step 2: Execute each step
        for step in plan.split("\n"):
            if step.strip():
                result = super().run(step.strip())

        # Step 3: Summarize
        summary = self.llm.invoke(f"Summarize the results: {result}")
        return summary
```

## Pitfalls

- Tool descriptions must be precise — vague descriptions cause wrong tool selection
- Max steps prevents infinite loops but may truncate complex tasks
- Error handling per tool prevents one failure from crashing the agent
- Rate limiting: agents can hit API limits quickly — add delays
- Context window fills with tool results — summarize intermediate steps

Attribution

Is this your skill, or is something wrong with this listing? Request removal or report an issue. Author removals are honored within 72 hours.

Comments

Loading comments…

Newsletter

Get the weekly list of safe new skills, and the ones we pulled.