用 Codex 或 Claude 帮你安装 复制这段 Prompt,粘贴到 Codex、Claude 或其他助手里,让它检查 Skill 页面并帮你完成安装。
直接命令不会经过审查 Prompt;运行前请先检查来源。
npx skills add https://github.com/vercel-labs/seal --skill ai-python-custom-loop命令会保持在同一行。复制前请横向滚动并检查完整内容。
想先保存到本地?可下载 SkillsMP 当前能够提供的文件。
基于 SOC 职业分类
正在显示 SKILL.md
| name | ai-python-custom-loop |
| description | Use when building custom agent loops. Modify tool dispatch, history management, hooks, control flow. |
| metadata | {"sdk-version":"0.2.1"} |
Keep the default shape unless you must change control flow:
class MyAgent(ai.Agent):
async def loop(self, context: ai.Context):
while context.keep_running():
async with (
ai.stream(context=context) as stream,
ai.ToolRunner() as runner,
):
async for event in ai.util.merge(stream, runner.events()):
yield event
if isinstance(event, ai.events.ToolEnd):
runner.schedule(context.resolve(event.tool_call))
context.add(stream.message)
context.add(runner.get_tool_message())
Rules:
context.keep_running() at the top of each turn.ai.stream(context=context) so model, messages, tools, output type, and params stay together.Agent.run hides replay events from callers.ToolEnd, use context.resolve(event.tool_call). It handles validation, approval gates, and cached replay results.tool.fn directly unless you also handle validation, approvals, and cached results.ToolRunner.schedule(...).ToolRunner.schedule(...) also accepts a zero-arg async callable that returns ai.events.ToolCallResult.runner.add_result(ai.tool_result(...)).stream.message, then runner.get_tool_message(). context.add(...) skips replay messages.context.resolve(...) build the gated call. Use ai-python-serverless-execution for request boundaries.ai-python-durable-execution.