← 返回 Skills 市场
trippingkelsea

Strands

作者 TrippingKelsea · GitHub ↗ · v1.0.0
cross-platform ⚠ suspicious
1513
总下载
0
收藏
0
当前安装
1
版本数
在 OpenClaw 中安装
/install aws-strands
功能描述
Build and run Python-based AI agents using the AWS Strands SDK. Use when you need to create autonomous agents, multi-agent workflows, custom tools, or integrate with MCP servers. Supports Ollama (local), Anthropic, OpenAI, Bedrock, and other model providers. Use for agent scaffolding, tool creation, and running agent tasks programmatically.
使用说明 (SKILL.md)

Strands Agents SDK

Build AI agents in Python using the Strands SDK (Apache-2.0, from AWS).

Validated against: strands-agents==1.23.0, strands-agents-tools==0.2.19

Prerequisites

# Install SDK + tools (via pipx for isolation — recommended)
pipx install strands-agents-builder  # includes strands-agents + strands-agents-tools + CLI

# Or install directly
pip install strands-agents strands-agents-tools

Core Concept: Bedrock Is the Default

Agent() with no model= argument defaults to Amazon Bedrock — specifically us.anthropic.claude-sonnet-4-20250514-v1:0 in us-west-2. This requires AWS credentials. To use a different provider, pass model= explicitly.

Default model constant: strands.models.bedrock.DEFAULT_BEDROCK_MODEL_ID

Quick Start — Local Agent (Ollama)

from strands import Agent
from strands.models.ollama import OllamaModel

# host is a required positional argument
model = OllamaModel("http://localhost:11434", model_id="qwen3:latest")
agent = Agent(model=model)
result = agent("What is the capital of France?")
print(result)

Note: Not all open-source models support tool-calling. Abliterated models often lose function-calling during the abliteration process. Test with a stock model (qwen3, llama3.x, mistral) first.

Quick Start — Bedrock (Default Provider)

from strands import Agent

# No model specified → BedrockModel (Claude Sonnet 4, us-west-2)
# Requires AWS credentials (~/.aws/credentials or env vars)
agent = Agent()
result = agent("Explain quantum computing")

# Explicit Bedrock model:
from strands.models import BedrockModel
model = BedrockModel(model_id="us.anthropic.claude-sonnet-4-20250514-v1:0")
agent = Agent(model=model)

Quick Start — Anthropic (Direct API)

from strands import Agent
from strands.models.anthropic import AnthropicModel

# max_tokens is Required[int] — must be provided
model = AnthropicModel(model_id="claude-sonnet-4-20250514", max_tokens=4096)
agent = Agent(model=model)
result = agent("Explain quantum computing")

Requires ANTHROPIC_API_KEY environment variable.

Quick Start — OpenAI

from strands import Agent
from strands.models.openai import OpenAIModel

model = OpenAIModel(model_id="gpt-4.1")
agent = Agent(model=model)

Requires OPENAI_API_KEY environment variable.

Creating Custom Tools

Use the @tool decorator. Type hints become the schema; the docstring becomes the description:

from strands import Agent, tool

@tool
def read_file(path: str) -> str:
    """Read contents of a file at the given path.

    Args:
        path: Filesystem path to read.
    """
    with open(path) as f:
        return f.read()

@tool
def write_file(path: str, content: str) -> str:
    """Write content to a file.

    Args:
        path: Filesystem path to write.
        content: Text content to write.
    """
    with open(path, 'w') as f:
        f.write(content)
    return f"Wrote {len(content)} bytes to {path}"

agent = Agent(model=model, tools=[read_file, write_file])
agent("Read /tmp/test.txt and summarize it")

ToolContext

Tools can access agent state via ToolContext:

from strands import tool
from strands.types.tools import ToolContext

@tool
def stateful_tool(query: str, tool_context: ToolContext) -> str:
    """A tool that accesses agent state.

    Args:
        query: Input query.
    """
    # Access shared agent state
    count = tool_context.state.get("call_count", 0) + 1
    tool_context.state["call_count"] = count
    return f"Call #{count}: {query}"

Built-in Tools (46 available)

strands-agents-tools provides pre-built tools:

from strands_tools import calculator, file_read, file_write, shell, http_request
agent = Agent(model=model, tools=[calculator, file_read, shell])

Full list: calculator, file_read, file_write, shell, http_request, editor, image_reader, python_repl, current_time, think, stop, sleep, environment, retrieve, search_video, chat_video, speak, generate_image, generate_image_stability, diagram, journal, memory, agent_core_memory, elasticsearch_memory, mongodb_memory, mem0_memory, rss, cron, batch, workflow, use_agent, use_llm, use_aws, use_computer, load_tool, handoff_to_user, slack, swarm, graph, a2a_client, mcp_client, exa, tavily, bright_data, nova_reels.

Hot reload: Agent(load_tools_from_directory=True) watches ./tools/ for changes.

MCP Integration

Connect to any Model Context Protocol server. MCPClient implements ToolProvider — pass it directly in the tools list:

from strands import Agent
from strands.tools.mcp import MCPClient
from mcp import stdio_client, StdioServerParameters

# MCPClient takes a callable that returns the transport
mcp = MCPClient(lambda: stdio_client(StdioServerParameters(
    command="uvx",
    args=["some-mcp-server@latest"]
)))

# Use as context manager — MCPClient is a ToolProvider
with mcp:
    agent = Agent(model=model, tools=[mcp])
    agent("Use the MCP tools to do something")

SSE transport:

from mcp.client.sse import sse_client
mcp = MCPClient(lambda: sse_client("http://localhost:8080/sse"))

Multi-Agent Patterns

Agents as Tools

Nest agents — inner agents become tools for the outer agent:

researcher = Agent(model=model, system_prompt="You are a research assistant.")
writer = Agent(model=model, system_prompt="You are a writer.")

orchestrator = Agent(
    model=model,
    tools=[researcher, writer],
    system_prompt="You coordinate research and writing tasks."
)
orchestrator("Research quantum computing and write a blog post")

Swarm Pattern

Self-organizing agent teams with shared context and autonomous handoff coordination:

from strands.multiagent.swarm import Swarm

# Agents need name + description for handoff identification
researcher = Agent(
    model=model,
    name="researcher",
    description="Finds and summarizes information"
)
writer = Agent(
    model=model,
    name="writer",
    description="Creates polished content"
)

swarm = Swarm(
    nodes=[researcher, writer],
    entry_point=researcher,    # optional — defaults to first agent
    max_handoffs=20,           # default
    max_iterations=20,         # default
    execution_timeout=900.0,   # 15 min default
    node_timeout=300.0         # 5 min per node default
)
result = swarm("Research AI agents, then hand off to writer for a blog post")

Swarm auto-injects a handoff_to_agent tool. Agents hand off by calling it with the target agent's name. Supports interrupt/resume, session persistence, and repetitive-handoff detection.

Graph Pattern (DAG)

Deterministic dependency-based execution via GraphBuilder:

from strands.multiagent.graph import GraphBuilder

builder = GraphBuilder()
research_node = builder.add_node(researcher, node_id="research")
writing_node = builder.add_node(writer, node_id="writing")
builder.add_edge("research", "writing")
builder.set_entry_point("research")

# Optional: conditional edges
# builder.add_edge("research", "writing",
#     condition=lambda state: "complete" in str(state.completed_nodes))

graph = builder.build()
result = graph("Write a blog post about AI agents")

Supports cycles (feedback loops) with builder.reset_on_revisit(True), execution timeouts, and nested graphs (Graph as a node in another Graph).

A2A Protocol (Agent-to-Agent)

Expose a Strands agent as an A2A-compatible server for inter-agent communication:

from strands.multiagent.a2a import A2AServer

server = A2AServer(
    agent=my_agent,
    host="127.0.0.1",
    port=9000,
    version="0.0.1"
)
server.start()  # runs uvicorn

Connect to A2A agents with the a2a_client tool from strands-agents-tools. A2A implements Google's Agent-to-Agent protocol for standardized cross-process/cross-network agent communication.

Session Persistence

Persist conversations across agent runs:

from strands.session.file_session_manager import FileSessionManager

session = FileSessionManager(session_file_path="./sessions/my_session.json")
agent = Agent(model=model, session_manager=session)

# Also available:
from strands.session.s3_session_manager import S3SessionManager
session = S3SessionManager(bucket_name="my-bucket", session_id="session-1")

Both Swarm and Graph support session managers for persisting multi-agent state.

Bidirectional Streaming (Experimental)

Real-time voice/text conversations with persistent audio streams:

from strands.experimental.bidi.agent import BidiAgent
from strands.experimental.bidi.models.nova_sonic import NovaSonicModel

# Supports: NovaSonicModel, GeminiLiveModel, OpenAIRealtimeModel
model = NovaSonicModel(region="us-east-1")
agent = BidiAgent(model=model, tools=[my_tool])

Supports interruption detection, concurrent tool execution, and continuous back-and-forth audio. Experimental — API subject to change.

System Prompts

agent = Agent(
    model=model,
    system_prompt="You are Hex, a sharp and witty AI assistant.",
    tools=[read_file, write_file]
)

Strands also supports list[SystemContentBlock] for structured system prompts with cache control.

Observability

Native OpenTelemetry tracing:

agent = Agent(
    model=model,
    trace_attributes={"project": "my-agent", "environment": "dev"}
)

Every tool call, model invocation, handoff, and lifecycle event is instrumentable.

Bedrock-Specific Features

  • Guardrails: guardrail_id + guardrail_version in BedrockModel config — content filtering, PII detection, input/output redaction
  • Cache points: System prompt and tool definition caching for cost optimization
  • Streaming: On by default, disable with streaming=False
  • Region: Defaults to us-west-2, override via region_name param or AWS_REGION env
  • Cross-region inference: Model IDs prefixed with us. use cross-region inference profiles

Scaffolding a New Agent

python3 {baseDir}/scripts/create-agent.py my-agent --provider ollama --model qwen3:latest
python3 {baseDir}/scripts/create-agent.py my-agent --provider anthropic
python3 {baseDir}/scripts/create-agent.py my-agent --provider bedrock
python3 {baseDir}/scripts/create-agent.py my-agent --provider openai --model gpt-4.1

Creates a ready-to-run agent directory with tools, config, and entry point.

Running an Agent

python3 {baseDir}/scripts/run-agent.py path/to/agent.py "Your prompt here"
python3 {baseDir}/scripts/run-agent.py path/to/agent.py --interactive

Model Providers Reference (11 total)

Provider Class Init Notes
Bedrock BedrockModel BedrockModel(model_id=...) Default, eagerly imported
Ollama OllamaModel OllamaModel("http://host:11434", model_id=...) host is positional
Anthropic AnthropicModel AnthropicModel(model_id=..., max_tokens=4096) max_tokens required
OpenAI OpenAIModel OpenAIModel(model_id=...) OPENAI_API_KEY
Gemini GeminiModel GeminiModel(model_id=...) api_key in client_args
Mistral MistralModel MistralModel(model_id=...) Mistral API key
LiteLLM LiteLLMModel LiteLLMModel(model_id=...) Meta-provider (Cohere, Groq, etc.)
LlamaAPI LlamaAPIModel LlamaAPIModel(model_id=...) Meta Llama API
llama.cpp LlamaCppModel LlamaCppModel(...) Local server, OpenAI-compatible
SageMaker SageMakerAIModel SageMakerAIModel(...) Custom AWS endpoints
Writer WriterModel WriterModel(model_id=...) Writer platform

All non-Bedrock providers are lazy-loaded — dependencies imported only when referenced.

Import pattern: from strands.models.\x3Cprovider> import \x3CClass> (or from strands.models import \x3CClass> for lazy-load).

Tips

  • Agent() without model= requires AWS credentials (Bedrock default)
  • AnthropicModel requires max_tokens — omitting it causes a runtime error
  • OllamaModel host is positional: OllamaModel("http://...", model_id="...")
  • Abliterated Ollama models often lose tool-calling support — use stock models for tool-using agents
  • Swarm agents need name= and description= for handoff routing
  • Agent(load_tools_from_directory=True) watches ./tools/ for hot-reloaded tool files
  • Use agent.tool.my_tool() to call tools directly without LLM routing
  • MCPClient is a ToolProvider — pass it directly in tools=[mcp], don't call list_tools_sync() manually when using with Agent
  • Session managers work with Agent, Swarm, and Graph
  • Pin your strands-agents version — the SDK is young and APIs evolve between releases
安全使用建议
This skill is largely coherent with its stated purpose (a Strands SDK), but pay attention to three things before installing or running it: 1) Metadata mismatch — the registry claims no required env vars but the docs/examples require AWS credentials and several provider API keys; treat that as a red flag and verify which keys you supply. 2) Powerful default tools — the scaffolded agent includes file read/write and run_command (subprocess with shell=True). Remove or tightly restrict these tools unless you trust the agent code and execution environment. 3) Code execution surface — run-agent imports and executes arbitrary agent Python files and the SDK supports hot-reloading tools directories; only load agents and tools from trusted sources and consider running them in an isolated container, VM, or least‑privileged account. Operational suggestions: use a dedicated, limited-privilege AWS account/role for Bedrock access (or avoid Agent() default Bedrock by always passing model=), avoid placing real production secrets in environment variables used by this skill, audit and remove the run_command tool if you don't need shell access, and review any scaffolded code before running. If you need higher confidence, request the skill author/publisher identity or prefer an official release from the upstream repo (https://github.com/strands-agents/sdk-python) and validate versions and checksums.
功能分析
Type: OpenClaw Skill Name: aws-strands Version: 1.0.0 The skill bundle provides an SDK for building AI agents, which includes highly privileged capabilities. The `SKILL.md` documentation and `scripts/create-agent.py` reveal that agents can be equipped with tools for arbitrary shell command execution (`subprocess.run(command, shell=True)` in `create-agent.py` and `shell` tool from `strands_tools`), file system read/write, and HTTP requests. While these are presented as features for agent functionality, their inherent power to execute arbitrary code and interact with the system without explicit user confirmation (once the agent is running) poses significant security risks, warranting a 'suspicious' classification due to the potential for misuse, even without clear evidence of intentional malicious behavior by the skill bundle itself.
能力评估
Purpose & Capability
The name/description (Strands SDK for building Python agents) matches the included instructions and example code. The SDK legitimately needs model provider credentials (Bedrock/AWS, Anthropic, OpenAI, etc.) and exposes tools for file I/O and shell execution — these are coherent with an agent framework. However the registry metadata lists no required env vars or primary credential while the SKILL.md and templates clearly reference multiple provider credentials and AWS profiles, which is an inconsistency to be aware of.
Instruction Scope
The runtime instructions and provided templates explicitly enable reading/writing arbitrary files and running shell commands (the scaffolded agent includes read_file/write_file/run_command, with run_command using subprocess.run(..., shell=True)). run-agent loads an arbitrary Python agent file via importlib and executes it, so installing/using this skill can cause execution of arbitrary code from scaffolded or user-supplied agent files. Hot-reload of ./tools/ is supported (Agent(load_tools_from_directory=True)), which can further lead to code being executed when files change. These behaviors are expected for an agent SDK but constitute significant privileges and should be restricted to trusted environments.
Install Mechanism
This is instruction-only with no install spec and requires python3. No remote download/install steps are declared in the skill package itself — lower installation risk. The SKILL.md suggests pip or pipx for installing the Strands packages, which is expected and standard.
Credentials
The registry shows 'Required env vars: none', but SKILL.md and cheatsheet document multiple provider credentials (AWS_ACCESS_KEY_ID/AWS_SECRET_ACCESS_KEY for Bedrock/SageMaker, ANTHROPIC_API_KEY, OPENAI_API_KEY, MISTRAL_API_KEY, STRANDS_MCP_TIMEOUT, etc.). Bedrock is the default when Agent() is created with no model and thus will attempt to use AWS credentials if present. Requesting broad cloud credentials (AWS) and multiple API keys is proportionate for a multi-provider agent SDK, but the metadata mismatch is misleading and the presence of AWS credentials in a default code path increases risk — those are high‑value secrets and should be scoped/segregated.
Persistence & Privilege
always:false and no system-wide config modifications are declared (good). However the skill's templates write files (create-agent scaffolds a project) and run-agent executes code from agent files, so installed/generated agents can persist code to disk and execute it later. Autonomous invocation is allowed (platform default) — combine that with the SDK's powerful tools (shell, file I/O, MCP clients) and the blast radius increases if used autonomously or with broad credentials.
如何使用
  1. 确保已安装 OpenClaw(本地或 Docker 部署)
  2. 在对话框中输入安装命令:/install aws-strands
  3. 安装完成后,直接呼叫该 Skill 的名称或使用 /aws-strands 触发
  4. 根据 Skill 的参数说明提供必要输入,即可获得结构化输出
版本历史
v1.0.0
New skill
元数据
Slug aws-strands
版本 1.0.0
许可证
累计安装 0
当前安装数 0
历史版本数 1
常见问题

Strands 是什么?

Build and run Python-based AI agents using the AWS Strands SDK. Use when you need to create autonomous agents, multi-agent workflows, custom tools, or integrate with MCP servers. Supports Ollama (local), Anthropic, OpenAI, Bedrock, and other model providers. Use for agent scaffolding, tool creation, and running agent tasks programmatically. 它是一个面向 Claude Code / OpenClaw 的 AI Agent Skill 插件,目前累计下载 1513 次。

如何安装 Strands?

在 OpenClaw 或 Claude Code 对话框中运行命令「/install aws-strands」即可一键安装,无需额外配置。

Strands 是免费的吗?

是的,Strands 完全免费(开源免费),可自由下载、安装和使用。

Strands 支持哪些平台?

Strands 跨平台运行,可在任意部署了 OpenClaw / Claude Code 的环境中使用(cross-platform)。

谁开发了 Strands?

由 TrippingKelsea(@trippingkelsea)开发并维护,当前版本 v1.0.0。

💬 留言讨论