Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
42 commits
Select commit Hold shift + click to select a range
8cb8578
Add AgentCard RFC and samples
iqdoctor Dec 30, 2025
ac749a1
Add AgentCard reload/watch and workflow dumps
iqdoctor Dec 31, 2025
e1bfcc7
Add CLI agent-cards loading
iqdoctor Dec 31, 2025
4bcd42d
Replace workflows-md symlinks with files
iqdoctor Dec 31, 2025
b1d827b
Fix typecheck issues in examples and Azure auth
iqdoctor Dec 31, 2025
ce57998
Adjust Azure import ignore for typecheck
iqdoctor Dec 31, 2025
957a8ff
Skip null agent-as-tools fields in dumps
iqdoctor Dec 31, 2025
c8ef812
Merge branch 'main' into feat/agent-card
evalstate Dec 31, 2025
36ad41a
(unrelated to PR) fix uvloop tty blocking
evalstate Jan 1, 2026
90fac12
tool example
evalstate Jan 1, 2026
9ce3d60
example agent with functions
evalstate Jan 1, 2026
ed4ded3
lint
evalstate Jan 1, 2026
f238ede
(markdown render change) improve error handling for Agent Cards
evalstate Jan 2, 2026
f282c34
agent card default type "agent". update test signature
evalstate Jan 2, 2026
952b87b
Update AgentCard and hook-tool specs
iqdoctor Jan 2, 2026
92f2b7b
Make --card the primary AgentCard flag
iqdoctor Jan 2, 2026
c7a3d4f
Add --dump alias for AgentCard export
iqdoctor Jan 2, 2026
98cf14c
Merge hook-tool declarative specs
iqdoctor Jan 2, 2026
2679e6c
Refine hook-tool AgentCard example
iqdoctor Jan 2, 2026
871ea00
Align hook-tool declarative spec examples
iqdoctor Jan 2, 2026
d90eea5
Update hook-tool examples plan
iqdoctor Jan 2, 2026
e6f33f1
add /card and /card <foo> --tool
evalstate Jan 2, 2026
cf11dbc
Merge branch 'feat/agent-card' of https://github.com/strato-space/fas…
evalstate Jan 2, 2026
ddba4f4
update rfc, add description to hf api tool
evalstate Jan 2, 2026
959208b
Docs: clarify history controls and next-stage work
iqdoctor Jan 2, 2026
143eb74
Docs: simplify history controls
iqdoctor Jan 2, 2026
2e20696
Docs: clarify orchestrator-owned history fields
iqdoctor Jan 2, 2026
c9e628a
Docs: reorder history options
iqdoctor Jan 2, 2026
e1e3b61
Docs: describe history option semantics
iqdoctor Jan 2, 2026
16c2eaa
Docs: note stateless /card --tool MVP
iqdoctor Jan 2, 2026
3d15d50
Docs: align history defaults and CLI order
iqdoctor Jan 2, 2026
6c12ab0
ToolAgent: spawn stateless clones for agent tools
iqdoctor Jan 2, 2026
cebc9fc
ToolAgent: tighten add_agent_tool type
iqdoctor Jan 2, 2026
0225843
ToolAgent: drop unused AgentProtocol import
iqdoctor Jan 2, 2026
eee6d06
Fix typing in elicitation example
iqdoctor Jan 2, 2026
b0412f4
Fix ruff typing.cast quoting
iqdoctor Jan 2, 2026
c72eecd
Add stateless add_agent_tool test
iqdoctor Jan 2, 2026
32b9a31
Refine AGENTS guidance and test override
iqdoctor Jan 2, 2026
37b3f1e
add progress notifications; fix tool definitions for detached agents.
evalstate Jan 2, 2026
330ce29
Merge branch 'feat/agent-card' of https://github.com/strato-space/fas…
evalstate Jan 2, 2026
6f06842
use model in card as precedent
evalstate Jan 2, 2026
48e6a75
typecheck/lint
evalstate Jan 2, 2026
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
7 changes: 6 additions & 1 deletion AGENTS.md
Original file line number Diff line number Diff line change
@@ -1,2 +1,7 @@
Present links to images and other content in Markdown links -- for example: ![Image](https://link.to.image)
## fast-agent contributor notes

- Use `uv run` for repo scripts and examples.
- Always run `uv run scripts/lint.py` and `uv run scripts/typecheck.py` after code changes.
- Keep examples under `examples/` in sync with packaged resources when relevant.
- Prefer small, focused diffs; avoid reformatting unrelated code.
- Use Markdown links for images and other content (example: `![Image](https://link.to.image)`).
7 changes: 5 additions & 2 deletions examples/mcp/elicitations/elicitation_forms_server.py
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,7 @@

import logging
import sys
from typing import Optional, TypedDict
from typing import Optional, TypedDict, cast

from mcp import ReadResourceResult
from mcp.server.elicitation import (
Expand Down Expand Up @@ -51,7 +51,10 @@ def _create_enum_schema_options(data: dict[str, str]) -> list[TitledEnumOption]:
>>> _create_enum_schema_options({"dark": "Dark Mode", "light": "Light Mode"})
[{"const": "dark", "title": "Dark Mode"}, {"const": "light", "title": "Light Mode"}]
"""
return [{"const": k, "title": v} for k, v in data.items()]
options: list[TitledEnumOption] = [
cast("TitledEnumOption", {"const": k, "title": v}) for k, v in data.items()
]
return options


@mcp.resource(uri="elicitation://event-registration")
Expand Down
5 changes: 3 additions & 2 deletions examples/mcp/elicitations/game_character_handler.py
Original file line number Diff line number Diff line change
Expand Up @@ -33,8 +33,9 @@ async def game_character_elicitation_handler(
"""Custom handler that creates an interactive character creation experience."""
logger.info(f"Game character elicitation handler called: {params.message}")

if params.requestedSchema:
properties = params.requestedSchema.get("properties", {})
requested_schema = getattr(params, "requestedSchema", None)
if requested_schema:
properties = requested_schema.get("properties", {})
content: dict[str, Any] = {}

console.print("\n[bold magenta]🎮 Character Creation Studio 🎮[/bold magenta]\n")
Expand Down
2 changes: 1 addition & 1 deletion examples/tensorzero/simple_agent.py
Original file line number Diff line number Diff line change
Expand Up @@ -18,7 +18,7 @@ async def main():
async with fast.run() as agent_app:
agent_name = "default"
print("\nStarting interactive session with template_vars set via decorator...")
await agent_app.interactive(agent=agent_name)
await agent_app.interactive(agent_name=agent_name)


if __name__ == "__main__":
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
---
type: agent
name: London-Project-Manager
servers:
- time
- fetch
---
You are a London project manager. For each given topic, get the current local time in London and a brief, project-relevant news summary using the 'time' and 'fetch' MCP servers. If a source returns HTTP 403 or is blocked by robots.txt, try up to five alternative public sources before giving up and clearly state any remaining access limits. Hint: BBC: https://www.bbc.com/ and FT: https://www.ft.com/
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
---
type: agent
name: NY-Project-Manager
servers:
- time
- fetch
---
You are a New York project manager. For each given topic, get the current local time in New York and a brief, project-relevant news summary using the 'time' and 'fetch' MCP servers. If a source returns HTTP 403 or is blocked by robots.txt, try up to five alternative public sources before giving up and clearly state any remaining access limits. Hint: Fast-Agent site: https://fast-agent.ai
13 changes: 13 additions & 0 deletions examples/workflows-md/agents_as_tools_extended/PMO-orchestrator.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,13 @@
---
type: agent
name: PMO-orchestrator
default: true
agents:
- NY-Project-Manager
- London-Project-Manager
history_mode: scratch
max_parallel: 128
child_timeout_sec: 120
max_display_instances: 20
---
Get project updates from the New York and London project managers. Ask NY-Project-Manager three times about different projects: Anthropic, evalstate/fast-agent, and OpenAI, and London-Project-Manager for economics review. Return a brief, concise combined summary with clear city/time/topic labels.
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
---
type: agent
name: London-Project-Manager
servers:
- time
---
Return London time + timezone, plus a one-line news update.
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
---
type: agent
name: NY-Project-Manager
servers:
- time
---
Return NY time + timezone, plus a one-line project status.
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
---
type: agent
name: PMO-orchestrator
default: true
agents:
- NY-Project-Manager
- London-Project-Manager
---
Get reports. Always use one tool call per project/news. Responsibilities: NY projects: [OpenAI, Fast-Agent, Anthropic]. London news: [Economics, Art, Culture]. Aggregate results and add a one-line PMO summary.
9 changes: 9 additions & 0 deletions examples/workflows-md/chaining/post_writer.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,9 @@
---
type: chain
name: post_writer
default: true
sequence:
- url_fetcher
- social_media
---
Chain processes requests through a series of agents in sequence, the output of each agent is passed to the next.
7 changes: 7 additions & 0 deletions examples/workflows-md/chaining/social_media.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
---
type: agent
name: social_media
---

Write a 280 character social media post for any given text.
Respond only with the post, never use hashtags.
7 changes: 7 additions & 0 deletions examples/workflows-md/chaining/url_fetcher.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,7 @@
---
type: agent
name: url_fetcher
servers:
- fetch
---
Given a URL, provide a complete and comprehensive summary
13 changes: 13 additions & 0 deletions examples/workflows-md/evaluator/cover_letter_writer.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,13 @@
---
type: evaluator_optimizer
name: cover_letter_writer
generator: generator
evaluator: evaluator
min_rating: EXCELLENT
max_refinements: 3
refinement_instruction: null
---

You implement an iterative refinement process where content is generated,
evaluated for quality, and then refined based on specific feedback until
it reaches an acceptable quality standard.
21 changes: 21 additions & 0 deletions examples/workflows-md/evaluator/evaluator.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,21 @@
---
type: agent
name: evaluator
model: o3-mini.medium
---
Evaluate the following response based on the criteria below:
1. Clarity: Is the language clear, concise, and grammatically correct?
2. Specificity: Does the response include relevant and concrete details tailored to the job description?
3. Relevance: Does the response align with the prompt and avoid unnecessary information?
4. Tone and Style: Is the tone professional and appropriate for the context?
5. Persuasiveness: Does the response effectively highlight the candidate's value?
6. Grammar and Mechanics: Are there any spelling or grammatical issues?
7. Feedback Alignment: Has the response addressed feedback from previous iterations?

For each criterion:
- Provide a rating (EXCELLENT, GOOD, FAIR, or POOR).
- Offer specific feedback or suggestions for improvement.

Summarize your evaluation as a structured response with:
- Overall quality rating.
- Specific feedback and areas for improvement.
10 changes: 10 additions & 0 deletions examples/workflows-md/evaluator/generator.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,10 @@
---
type: agent
name: generator
model: gpt-5-nano.low
servers:
- fetch
---
You are a career coach specializing in cover letter writing.
You are tasked with generating a compelling cover letter given the job posting,
candidate details, and company information. Tailor the response to the company and job requirements.
26 changes: 26 additions & 0 deletions examples/workflows-md/fastagent.config.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,26 @@
# Please edit this configuration file to match your environment (on Windows).
# Examples in comments below - check/change the paths.
#
#

logger:
type: file
level: error
truncate_tools: true

mcp:
servers:
filesystem:
# On windows update the command and arguments to use `node` and the absolute path to the server.
# Use `npm i -g @modelcontextprotocol/server-filesystem` to install the server globally.
# Use `npm -g root` to find the global node_modules path.`
# command: "node"
# args: ["c:/Program Files/nodejs/node_modules/@modelcontextprotocol/server-filesystem/dist/index.js","."]
command: "npx"
args: ["-y", "@modelcontextprotocol/server-filesystem", "."]
fetch:
command: "uvx"
args: ["mcp-server-fetch"]
time:
command: "uvx"
args: ["mcp-server-time"]
Loading
Loading