Skip to content
Back to skills

Agentscope Developer Framework

ASecurity

Build agentic applications using unified agent interfaces, asynchronous design patterns, ReAct paradigm grounding, and developer-centric evaluation and deployment tools.

  • 6 stars
  • 0 votes
  • 0 copies
  • 4 views
  • Added September 9, 2026
ai-agentspythonreactexpressdockerapiperformance

Works with

  • cli
  • api

Security analysis

A100/100

Scanned September 9, 2026

npx -y skills add ADu2021/skillXiv --skill agentscope-developer-framework --agent claude-code

Installs into .claude/skills of the current project.

Are you the author of Agentscope Developer Framework?

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

Security grade badge for Agentscope Developer Framework
[![Security: A — Skills Directory](https://www.skillsdirectory.com/api/skills/adu2021-agentscope-developer-framework/badge)](https://www.skillsdirectory.com/skills/adu2021-agentscope-developer-framework)

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: agentscope-developer-framework
title: "AgentScope 1.0: Developer-Centric Framework for Agentic Applications"
version: 0.0.2
engine: skillxiv-v0.0.2-claude-opus-4.6
license: MIT
url: https://arxiv.org/abs/2508.16279
keywords: [agent-framework, developer-tools, async-design, react-paradigm, agentic-applications]
description: "Build agentic applications using unified agent interfaces, asynchronous design patterns, ReAct paradigm grounding, and developer-centric evaluation and deployment tools."
---

# AgentScope 1.0: Developer-Centric Framework

## Core Concept

AgentScope 1.0 provides a comprehensive framework for building production-ready agentic applications. It features unified component architecture for easy model/tool integration, asynchronous design for efficient multi-agent systems, ReAct paradigm grounding combining reasoning and action, built-in agents for common tasks, visual evaluation interfaces, and runtime sandboxes for safe deployment.

## Architecture Overview

- **Unified Component Interfaces**: Extensible abstractions for models, tools, memory
- **Asynchronous Design**: Event-driven architecture supporting diverse interaction patterns
- **ReAct Paradigm**: Structured reasoning and action loops
- **Built-in Agents**: Pre-configured solutions for common scenarios
- **Developer Tools**: Visualization, evaluation, and sandbox execution

## Implementation Steps

### 1. Implement Core Component Abstraction

Create unified interfaces for models and tools:

```python
from abc import ABC, abstractmethod
from typing import Dict, Any, List, Optional
from dataclasses import dataclass
import asyncio

@dataclass
class Message:
    role: str  # "user", "assistant", "system"
    content: str

class ModelInterface(ABC):
    """Abstract base for LLM integration."""

    @abstractmethod
    async def generate(
        self,
        messages: List[Message],
        temperature: float = 0.7,
        max_tokens: int = 1024,
        **kwargs
    ) -> str:
        pass

class Tool(ABC):
    """Abstract base for agent tools."""

    @abstractmethod
    async def execute(self, input_str: str, **kwargs) -> str:
        pass

    @property
    @abstractmethod
    def description(self) -> str:
        pass

    @property
    @abstractmethod
    def parameters(self) -> Dict[str, Any]:
        pass

class OpenAIModel(ModelInterface):
    def __init__(self, model_name: str, api_key: str):
        self.model_name = model_name
        self.api_key = api_key

    async def generate(
        self,
        messages: List[Message],
        temperature: float = 0.7,
        max_tokens: int = 1024,
        **kwargs
    ) -> str:
        import aiohttp

        async with aiohttp.ClientSession() as session:
            payload = {
                "model": self.model_name,
                "messages": [{"role": m.role, "content": m.content} for m in messages],
                "temperature": temperature,
                "max_tokens": max_tokens,
                **kwargs
            }

            async with session.post(
                "https://api.openai.com/v1/chat/completions",
                json=payload,
                headers={"Authorization": f"Bearer {self.api_key}"}
            ) as resp:
                data = await resp.json()
                return data["choices"][0]["message"]["content"]

class Calculator(Tool):
    async def execute(self, expression: str, **kwargs) -> str:
        try:
            result = eval(expression, {"__builtins__": {}}, {})
            return str(result)
        except Exception as e:
            return f"Error: {str(e)}"

    @property
    def description(self) -> str:
        return "Evaluate mathematical expressions"

    @property
    def parameters(self) -> Dict[str, Any]:
        return {"expression": {"type": "string", "description": "Math expression"}}
```

### 2. Implement ReAct Agent Loop

Structure agents around reasoning and acting:

```python
from enum import Enum

class ActionType(Enum):
    THINK = "think"
    ACT = "act"
    CONCLUDE = "conclude"

@dataclass
class ReActTrace:
    thoughts: List[str]
    actions: List[Dict[str, str]]
    observations: List[str]
    final_answer: str
    success: bool

class ReActAgent:
    def __init__(
        self,
        model: ModelInterface,
        tools: Dict[str, Tool],
        max_steps: int = 10
    ):
        self.model = model
        self.tools = tools
        self.max_steps = max_steps
        self.trace: Optional[ReActTrace] = None

    async def run(self, task: str) -> ReActTrace:
        """Execute ReAct loop."""
        self.trace = ReActTrace([], [], [], "", False)
        messages = [Message("user", task)]

        for step in range(self.max_steps):
            # Reasoning phase
            thought = await self._think(messages, task)
            self.trace.thoughts.append(thought)
            messages.append(Message("assistant", thought))

            # Check if should act or conclude
            if "use tool:" in thought.lower() or "call:" in thought.lower():
                # Acting phase
                action_str = self._extract_action(thought)
                tool_name, tool_input = self._parse_action(action_str)

                if tool_name == "conclude":
                    self.trace.final_answer = tool_input
                    self.trace.success = True
                    break

                # Execute tool
                if tool_name in self.tools:
                    observation = await self.tools[tool_name].execute(tool_input)
                    self.trace.actions.append({"tool": tool_name, "input": tool_input})
                    self.trace.observations.append(observation)
                    messages.append(Message("user", f"Tool result: {observation}"))

        return self.trace

    async def _think(self, messages: List[Message], task: str) -> str:
        """Generate reasoning step."""
        system_msg = Message("system",
            "You are a reasoning agent. Think step by step. "
            "When ready, use tools by saying 'use tool: <tool_name>(<input>)' "
            "or conclude by saying 'conclude: <answer>'")

        full_messages = [system_msg] + messages
        return await self.model.generate(full_messages)

    def _extract_action(self, thought: str) -> str:
        """Extract action specification from thought."""
        import re
        match = re.search(r'(?:use tool:|call:)\s*(.+?)(?:\n|$)', thought, re.IGNORECASE)
        return match.group(1) if match else ""

    def _parse_action(self, action_str: str) -> tuple:
        """Parse action into tool name and input."""
        import re
        match = re.match(r'(\w+)\s*\((.+)\)', action_str)
        if match:
            return match.group(1), match.group(2)
        return action_str, ""
```

### 3. Implement Asynchronous Multi-Agent Coordination

Enable concurrent agent interactions:

```python
class AgentPool:
    """Manages multiple agents with async execution."""

    def __init__(self):
        self.agents: Dict[str, ReActAgent] = {}
        self.message_queue: asyncio.Queue = asyncio.Queue()

    def register_agent(self, name: str, agent: ReActAgent):
        """Register agent in pool."""
        self.agents[name] = agent

    async def execute_task(
        self,
        task: str,
        primary_agent: str,
        parallel_agents: Optional[List[str]] = None
    ) -> Dict[str, ReActTrace]:
        """
        Execute task with primary agent and optional parallel agents.
        """
        results = {}

        # Primary agent
        if primary_agent in self.agents:
            results[primary_agent] = await self.agents[primary_agent].run(task)

        # Parallel agents
        if parallel_agents:
            tasks = [
                self.agents[agent].run(task)
                for agent in parallel_agents
                if agent in self.agents
            ]
            parallel_results = await asyncio.gather(*tasks)
            for agent_name, trace in zip(parallel_agents, parallel_results):
                results[agent_name] = trace

        return results

    async def agent_collaboration(
        self,
        agents: List[str],
        task: str,
        max_rounds: int = 3
    ) -> Dict[str, Any]:
        """
        Multi-round collaboration between agents.
        """
        messages = {agent: [Message("user", task)] for agent in agents}

        for round_idx in range(max_rounds):
            # All agents think and share results
            round_results = {}

            for agent_name in agents:
                agent = self.agents[agent_name]
                thought = await agent._think(messages[agent_name], task)
                messages[agent_name].append(Message("assistant", thought))
                round_results[agent_name] = thought

            # Share thoughts across agents
            for agent_name in agents:
                for other_agent in agents:
                    if other_agent != agent_name:
                        messages[agent_name].append(
                            Message("user", f"Agent {other_agent}: {round_results[other_agent]}")
                        )

        return {agent: messages[agent][-1].content for agent in agents}
```

### 4. Implement Evaluation Interface

Create tools for assessing agent performance:

```python
class AgentEvaluator:
    """Evaluate agent performance on tasks."""

    async def evaluate_on_dataset(
        self,
        agent: ReActAgent,
        dataset: List[Dict[str, str]]
    ) -> Dict[str, float]:
        """
        Run agent on dataset and compute metrics.
        """
        results = []

        for example in dataset:
            trace = await agent.run(example["task"])
            correct = trace.final_answer == example["expected_answer"]
            results.append({
                "correct": correct,
                "steps": len(trace.actions),
                "tools_used": [a["tool"] for a in trace.actions]
            })

        # Compute metrics
        accuracy = sum(1 for r in results if r["correct"]) / len(results)
        avg_steps = sum(r["steps"] for r in results) / len(results)

        return {
            "accuracy": accuracy,
            "avg_steps": avg_steps,
            "efficiency": accuracy / (avg_steps + 1)
        }

    def visualize_trace(self, trace: ReActTrace) -> str:
        """Generate visualization of reasoning trace."""
        viz = "ReAct Trace Visualization\n"
        viz += "=" * 50 + "\n"

        for i, (thought, action, obs) in enumerate(zip(
            trace.thoughts,
            trace.actions,
            trace.observations
        )):
            viz += f"\nStep {i+1}:\n"
            viz += f"  Thought: {thought}\n"
            viz += f"  Action: {action}\n"
            viz += f"  Observation: {obs}\n"

        viz += f"\nFinal Answer: {trace.final_answer}\n"
        return viz
```

### 5. Implement Sandbox Execution Environment

Create safe execution context:

```python
import docker
import json

class SandboxExecutor:
    """Execute agents in isolated containers."""

    def __init__(self, image_name: str = "agentscope-runtime"):
        self.client = docker.from_env()
        self.image_name = image_name

    async def run_agent_sandboxed(
        self,
        agent_code: str,
        task: str,
        timeout: int = 300
    ) -> Dict[str, Any]:
        """
        Run agent code in isolated sandbox.
        """
        container_input = {
            "agent_code": agent_code,
            "task": task
        }

        try:
            container = self.client.containers.run(
                self.image_name,
                stdin_open=True,
                stdout=True,
                stderr=True,
                detach=True
            )

            # Send task to container
            container.exec_run(
                f"python /app/agent.py",
                input=json.dumps(container_input).encode()
            )

            # Wait for completion or timeout
            exit_code = container.wait(timeout=timeout)

            # Get output
            logs = container.logs().decode()

            container.remove()

            return {
                "success": exit_code == 0,
                "output": logs,
                "exit_code": exit_code
            }

        except Exception as e:
            return {
                "success": False,
                "error": str(e),
                "exit_code": -1
            }
```

## Practical Guidance

### When to Use AgentScope

- Building production agent applications
- Multi-agent collaboration systems
- Rapid prototyping of agent architectures
- Applications requiring safe sandboxed execution
- Complex workflows mixing reasoning and tools

### When NOT to Use

- Simple single-prompt inference
- Real-time low-latency applications (<100ms)
- Scenarios without clear tool definitions
- Extremely resource-constrained environments

### Key Hyperparameters

- **max_steps**: 5-20 per agent task
- **async_batch_size**: 4-16 parallel agents
- **timeout**: 30-600 seconds based on task complexity
- **temperature**: 0.7 for reasoning, 0.0 for determinism

### Performance Expectations

- Framework Overhead: <100ms per agent initialization
- Concurrent Agents: 10-100s feasible on single machine
- Tool Latency: Dominated by tool, not framework

## Reference

Researchers. (2024). AgentScope 1.0: A Developer-Centric Framework for Building Agentic Applications. arXiv preprint arXiv:2508.16279.

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.