智能代理脚本 是 AI Skill Hub 本期精选Agent工作流之一。综合评分 8.0 分,整体质量较高。我们强烈推荐将其纳入你的 AI 工具库,帮助提升工作效率。
智能代理脚本 是一套完整的 AI Agent 自动化工作流方案。通过可视化的节点编排,将复杂的多步骤任务拆解为清晰的自动化流程,实现全程无人值守的智能处理。支持与数百种外部服务和 API 无缝集成,适合构建数据处理管线、业务自动化和 AI 辅助决策系统。
智能代理脚本 是一套完整的 AI Agent 自动化工作流方案。通过可视化的节点编排,将复杂的多步骤任务拆解为清晰的自动化流程,实现全程无人值守的智能处理。支持与数百种外部服务和 API 无缝集成,适合构建数据处理管线、业务自动化和 AI 辅助决策系统。
# 方式一:npm 全局安装 npm install -g agentfootprint # 方式二:npx 直接运行(无需安装) npx agentfootprint --help # 方式三:项目依赖安装 npm install agentfootprint # 方式四:从源码运行 git clone https://github.com/footprintjs/agentfootprint cd agentfootprint npm install npm start
# 命令行使用
agentfootprint --help
# 基本用法
agentfootprint [options] <input>
# Node.js 代码中使用
const agentfootprint = require('agentfootprint');
const result = await agentfootprint.run(options);
console.log(result);
# agentfootprint 配置说明 # 查看配置选项 agentfootprint --config-example > config.yml # 常见配置项 # output_dir: ./output # log_level: info # workers: 4 # 环境变量(覆盖配置文件) export AGENTFOOTPRINT_CONFIG="/path/to/config.yml"
<p align="center"> <strong>Your agent gave an answer that <em>looks</em> right — and it's wrong.<br/>The logs can't tell you who influenced it. Agentfootprint can.</strong> </p>
<p align="center"> The explainable AI agent framework for TypeScript: every read, write, decision, and tool call becomes <strong>connected evidence</strong> as your agent runs. When something goes wrong, you don't grep logs — you ask. </p>
<p align="center"> <strong>Build</strong> agents — skills, steering, RAG, memory, control flow — and <strong>debug</strong> them like nothing else.<br/> <em>Why</em> is a query, not a guess. </p>
<p align="center"> <a href="https://footprintjs.github.io/agentThinkingUI/"> <img src="docs/assets/hero-atui.png" alt="An agent run replayed in Story Lens — the LLM 'brain' calls the Flight-search tool, the step inspector shows the tool's raw output and the brain's reasoning about it, and the timeline scrubs every step of the run." width="100%"> </a> </p> <p align="center"> <sub>A real run, replayed — rendered with <a href="https://github.com/footprintjs/agentThinkingUI"><b>Story Lens</b></a> (<code>npm i agentthinkingui</code>). Every frame is generated from the run's own trace; <a href="https://footprintjs.github.io/agentThinkingUI/">▶ watch it live</a>.</sub> </p>
<p align="center"> <a href="https://github.com/footprintjs/agentfootprint/actions"><img src="https://github.com/footprintjs/agentfootprint/actions/workflows/ci.yml/badge.svg" alt="CI"></a> <img src="https://img.shields.io/badge/coverage-87%25-green.svg" alt="coverage: 87%"> <a href="https://www.npmjs.com/package/agentfootprint"><img src="https://img.shields.io/npm/v/agentfootprint.svg?style=flat" alt="npm version"></a> <a href="https://bundlephobia.com/package/agentfootprint"><img src="https://img.shields.io/bundlephobia/minzip/agentfootprint?label=minzipped" alt="minzipped size"></a> <a href="#tree-shakeable--esm-first"><img src="https://img.shields.io/badge/tree--shakeable-%E2%9C%93-success?style=flat" alt="tree-shakeable"></a> <a href="https://www.npmjs.com/package/agentfootprint"><img src="https://img.shields.io/npm/dm/agentfootprint.svg" alt="Downloads"></a> <a href="https://github.com/footprintjs/agentfootprint/blob/main/LICENSE"><img src="https://img.shields.io/badge/license-MIT-blue.svg" alt="MIT"></a> </p>
---
Skills, steering, RAG, facts, memory, guardrails — every name for context does one thing: it injects into one of three LLM slots. So we abstracted the injection itself.
<p align="center"> <picture> <source media="(prefers-color-scheme: dark)" srcset="docs/assets/hero-dark.svg"> <source media="(prefers-color-scheme: light)" srcset="docs/assets/hero-light.svg"> <img alt="agentfootprint mascot composing context flavors (Skills, Steering, Guardrails, RAG, Tool APIs, Memory) into three structured LLM slots (system, messages, tools) — the central abstraction, visualized." src="docs/assets/hero-light.svg" width="100%"/> </picture> </p> <p align="center"> <sub><em>One primitive: <code>Injection = slot × trigger × cache</code>. Because the framework owns this point, every piece of context is <b>born tracked</b> — observability isn't wired up, it's a consequence of the abstraction. <a href="#the-model--what-we-abstract">The full model ↓</a></em></sub> </p>
You collect domain-specific data and instructions — Skills · Steering · Guardrails · RAG · Tool APIs · Memory, with more on the way. They all do one thing: inject into one of three slots (system, messages, tools). So we abstracted the injection itself.
<p align="center"> <picture> <source media="(prefers-color-scheme: dark)" srcset="docs/assets/triggers-dark.svg"> <source media="(prefers-color-scheme: light)" srcset="docs/assets/triggers-light.svg"> <img alt="agentfootprint — Every LLM call has 3 fixed slots (system, messages, tools). Every flavor lands in one slot under one of 4 fixed triggers (always · rule · on-tool-return · llm-activated). Sparkle streams flow from each trigger lane down to a specific pill inside its destination slot — same slot can hold pills from different triggers (RAG via rule, Instruction via on-tool-return), and the same flavor (Skill) can land in different slots." src="docs/assets/triggers-light.svg" width="100%"/> </picture> </p>
The abstraction is three rules:
system, messages, tools — the LLM API surface.That's the whole model: Injection = slot × trigger × cache.
system / messages / tools).The agent space has many credible primary abstractions:
| Framework | What it abstracts |
|---|---|
| **LangChain** | Pipelines of composable components |
| **LangGraph** | State machines of nodes and edges |
| **CrewAI · AutoGen** | Crews of role-playing agents |
| **Mastra · Genkit · Pydantic AI** | Typed full-stack bundles |
| **DSPy** | Compiled prompts |
| **Inngest AgentKit** | Durable workflows |
We didn't have to choose between them.
agentfootprint is built on footprintjs — the flowchart pattern for backend code. footprintjs gives us every one of those abstractions out of the box:
| Capability | What footprintjs hands us |
|---|---|
| Composition | Sequence · Parallel · Conditional · Loop |
| State machines | The ReAct loop *is* a flowchart |
| Multi-agent crews | Compose Agents through control flow — no special class needed |
| Durable workflows | pauseHere() plus JSON-portable resume() |
| Typed observation | 60+ events for free, because the framework owns the loop |
So we used the budget those abstractions would have cost us to invest deeply in something they all leave to the developer: the injection loop.
[!IMPORTANT] We abstract context engineering — and hand back the trace. Live to develop · offline to monitor · detailed to improve.
---
Tools do the work. Act decides about the work. Watch remembers both — and nothing can act without being watched.
<p align="center"> <picture> <source media="(prefers-color-scheme: dark)" srcset="docs/assets/loop-moments-dark.svg"> <source media="(prefers-color-scheme: light)" srcset="docs/assets/loop-moments-light.svg"> <img alt="One agent turn drawn as a circle. The message enters through the INPUT gate; the loop runs clockwise past the WINDOW gate (what the live context keeps), the context slots and the model call, the BEFORE-TOOL gate (every call, before dispatch), the tool actually running, the AFTER-TOOL gate (every result, before the model reads it) and the end of the iteration; the answer leaves through the OUTPUT gate. Five amber gates are the moments .act() can change; purple watch-dots sit at every moment, including the ones with no gate, because watch attends all of them and cannot be switched off." src="docs/assets/loop-moments-light.svg" width="100%"/> </picture> </p>
const agent = Agent.create({ provider, model })
.act({
input: [scrubSSNs], // the message, before the run commits it
beforeTool: [refundCeiling, fourEyes], // every call, before it is dispatched
afterTool: [stripPII], // every result, before the model reads it
window: slidingWindow({ keepRecentTurns: 12 }), // what the live window keeps
output: [noCodenames], // the answer, before the caller gets it
})
.build();
Five keys, one per moment, in the order the loop reaches them — so autocomplete on an empty {} teaches the loop. Every rule answers allow(), allow(value, why) or deny(reason) (and ask({ question }) where a person can still change the outcome), and none of them can answer for the tool: the outcome union has no result arm, so what the model finally reads is the real tool's output or a refusal. Every decision files a ledger row stamped with its moment.
It is pure sugar over the five individual doors, pinned byte-equivalent per key — and the bundle's keys are locked against LoopMoment at compile time, so a sixth moment cannot ship without a key for it.
npm run example examples/features/38-act.ts
Two scales — same alphabet. Four control flows are the entire vocabulary.
|
|
</td> </tr> <tr> <td width="50%" align="center"> <picture> <source media="(prefers-color-scheme: dark)" srcset="docs/assets/parallel-dark.svg"> <source media="(prefers-color-scheme: light)" srcset="docs/assets/parallel-light.svg"> <img alt="Parallel — fan-out then fan-in across N agents." src="docs/assets/parallel-light.svg" width="100%"/> </picture> </td> <td width="50%">
</td> </tr> <tr> <td width="50%" align="center"> <picture> <source media="(prefers-color-scheme: dark)" srcset="docs/assets/conditional-dark.svg"> <source media="(prefers-color-scheme: light)" srcset="docs/assets/conditional-light.svg"> <img alt="Conditional — diamond gate routes to one of N branches based on a predicate." src="docs/assets/conditional-light.svg" width="100%"/> </picture> </td> <td width="50%">
</td> </tr> <tr> <td width="50%" align="center"> <picture> <source media="(prefers-color-scheme: dark)" srcset="docs/assets/loop-dark.svg"> <source media="(prefers-color-scheme: light)" srcset="docs/assets/loop-light.svg"> <img alt="Loop — body cycles back from end to start until a condition is met." src="docs/assets/loop-light.svg" width="100%"/> </picture> </td> <td width="50%">
</td> </tr> </table> Quick start — runs offline, no API key
For production, import a real provider from Inside one agent — Dynamic vs Classic ReAct<p align="center"> <picture> <source media="(prefers-color-scheme: dark)" srcset="docs/assets/dynamic-vs-classic-dark.svg"> <source media="(prefers-color-scheme: light)" srcset="docs/assets/dynamic-vs-classic-light.svg"> <img alt="Classic ReAct vs Dynamic ReAct loop topology — same 5 stages (SystemPrompt, Messages, Tools, CallLLM, Route → ExecuteTools/Finalize), but the loop edge differs: Classic returns to CallLLM only (slots frozen at 12 tools every iteration), Dynamic returns to SystemPrompt (slots recompose, tools shrink from 1 to 5 as skills activate)." src="docs/assets/dynamic-vs-classic-light.svg" width="100%"/> </picture> </p> <p align="center"> <sub><em>Same five stages; only the loop edge differs. Classic returns to <code>CallLLM</code> with slots frozen; Dynamic (agentfootprint) returns to <code>SystemPrompt</code>, so injections recompose the next prompt — also the prerequisite for per-iteration caching.</em></sub> </p>
📖 Dynamic ReAct guide · Key concepts
🎯 aiskill88 AI 点评
A 级
2026-06-08
高质量的AI工作流项目 📚 实用指南(长尾问题)
适合谁
最佳实践
常见错误
部署方案
⚡ 核心功能
👥 适合谁
⭐ 最佳实践
⚠️ 常见错误
👥 适合人群🎯 使用场景
⚖️ 优点与不足✅ 优点
⚠️ 不足
⚠️ 使用须知
AI Skill Hub 为第三方内容聚合平台,本页面信息基于公开数据整理,不对工具功能和质量作任何法律背书。 建议在沙箱或测试环境中充分验证后,再部署至生产环境,并做好必要的安全评估。 📄 License 说明
✅ MIT 协议 — 最宽松的开源协议之一,可自由商用、修改、分发,仅需保留版权声明。 🔗 相关工具推荐📰 相关 AI 新闻
🍿 AI 圈相关吃瓜
🗺️ 相关解决方案
🧩 你可能还需要
基于当前 Skill 的能力图谱,自动补全的工具组合
❓ 常见问题 FAQagentfootprint 是一款TypeScript开发的AI辅助工具。开源AI工作流:Context engineering, abstracted. Build AI agents whose every LLM call traces bac。⭐9 · TypeScript 主要应用场景包括:构建AI代理。
💡 AI Skill Hub 点评
经综合评估,智能代理脚本 在Agent工作流赛道中表现稳健,质量优秀。如果你已有明确的使用需求,可以直接上手体验;如果还在评估阶段,建议对比同类工具后再做决策。 🌐 原始信息
🔗 原始来源
🐙 GitHub 仓库 https://github.com/footprintjs/agentfootprint
🌐 官方网站 https://footprintjs.github.io/agentfootprint/
收录时间:2026-06-08 · 更新时间:2026-06-11 · License:MIT · AI Skill Hub 不对第三方内容的准确性作法律背书。 🤖 交给 Agent 安装 · 智能代理脚本选择 Agent 类型,复制安装指令后粘贴到对应客户端 claude skill install https://github.com/footprintjs/agentfootprint
|