Changelog

February 26, 2026 · View on GitHub

All notable changes to this project will be documented in this file.

The format is based on Keep a Changelog, and this project adheres to Semantic Versioning.

[Unreleased] — Canonical Terminology Refactor

(See below for details — this will ship in a future version.)

[0.3.1] - 2026-02-26

Added

  • Bundled type stubs: 255 connector .pyi stubs ship in the wheel — pip install fastn-ai gives full IDE autocomplete with zero extra setup
  • Concurrent tool-schema fetching: fastn connector sync fetches tool schemas for all connectors in parallel (10 workers)
  • __getattr__ fallback stubs: Connectors without tool schemas get a fallback stub so fastn.<connector>.<anything>() still works at runtime
  • .gitattributes: Generated stubs collapse in GitHub PR diffs

Changed

  • fastn connector sync is now the single command that does everything: fetch registry, fetch tool schemas, save snapshot, generate stubs
  • fastn connector add now described as "fetch full tool schemas" (stubs already bundled)
  • Removed _install_stubs_to_package() — stubs ship in the wheel, no runtime copy needed
  • Removed generator/fetch_and_generate.py — merged into fastn connector sync
  • Updated all docs and templates to use canonical fastn connector commands

Breaking Changes — Terminology

The SDK now uses the canonical Fastn architecture terminology:

Connectors provide tools. Flows compose tools. Agents run flows and tools with reasoning.

ConceptOld term (v0.3.0)New term (canonical)
Service integration (Slack, Jira)ToolConnector
Callable function (send_message)ActionTool

Renamed Classes

  • DynamicToolDynamicConnector
  • AsyncDynamicToolAsyncDynamicConnector
  • ToolNotFoundErrorConnectorNotFoundError (connector not in registry)
  • ActionNotFoundErrorToolNotFoundError (tool not found in connector)

Renamed Methods

  • fastn.tools.list()fastn.connectors.list()
  • fastn.tools.get(name)fastn.connectors.get(name)
  • fastn.get_actions(name)fastn.get_tools(name)
  • fastn.get_action(connector, tool)fastn.get_tool(connector, tool)
  • fastn.execute(action_id=...)fastn.execute(tool=...)
  • get_tools_for(..., tool=)get_tools_for(..., connector=)

Renamed CLI Flags

  • --tool--connector (scope to a connector)
  • --action--tool (scope to a tool)

Renamed Files

  • fastn/tool.pyfastn/connector.py
  • tests/sdk/test_tool.pytests/sdk/test_connector.py

Renamed Config Functions

  • add_tool_to_manifest()add_connector_to_manifest()
  • remove_tool_from_manifest()remove_connector_from_manifest()
  • get_installed_tools()get_installed_connectors()

Migration Guide

# Before (v0.3.0)
from fastn import ToolNotFoundError, ActionNotFoundError
tools = client.tools.list()
actions = client.get_actions("slack")
result = client.execute(action_id="send_message", params={...})
tools = client.get_tools_for("message", tool="slack", format="openai")

# After (canonical)
from fastn import ConnectorNotFoundError, ToolNotFoundError
connectors = client.connectors.list()
tools = client.get_tools("slack")
result = client.execute(tool="send_message", params={...})
tools = client.get_tools_for("message", connector="slack", format="openai")

[0.3.0] - 2026-02-21

Breaking Changes

  • Terminology refactor: "Connector" is now "Tool", "Tool" (action) is now "Action" throughout the SDK
  • Namespace restructure:
    • fastn.admin.connectors.list()fastn.tools.list()
    • fastn.admin.connectors.get(name)fastn.tools.get(name)
    • fastn.get_tools(connector_name)fastn.get_actions(tool_name)
    • fastn.get_tool(connector_name, tool_name)fastn.get_action(tool_name, action_name)
    • fastn.connections.initiate()fastn.auth.connect()
    • fastn.connections.status()fastn.auth.status()
    • fastn.configure_custom_auth()fastn.auth.configure_custom()
    • get_tools_for(..., connector="slack")get_tools_for(..., tool="slack")
  • Exception renames:
    • ConnectorNotFoundErrorToolNotFoundError (with .tool_name attribute)
    • ToolNotFoundErrorActionNotFoundError (with .tool_name and .action_name attributes)
  • File rename: fastn/connector.pyfastn/tool.py
    • DynamicConnectorDynamicTool
    • AsyncDynamicConnectorAsyncDynamicTool
  • CLI option rename: fastn agent --connectorfastn agent --tool

Added

  • fastn.auth.configure_custom(userinfo_url) — register custom auth provider via GraphQL updateResolverStep mutation
  • Comprehensive documentation with terminology glossary, full feature examples (flows, auth, multi-tenant)
  • Platform benefits documentation (performance, governance, security, observability)

Changed

  • auth.configure_custom() now uses GraphQL updateResolverStep mutation instead of REST endpoint
  • _ToolsAdmin.get() returns "actions" key instead of "tools" for consistency
  • All user-facing CLI strings updated to use "tool" and "action" terminology
  • All examples and documentation updated to match new API surface

[0.2.3] - 2026-02-20

Added

  • get_tools_for() is now prompt-first: describe what you need in plain English and Fastn discovers the right tools
  • get_tools_for() accepts connector= for direct registry lookup (single or list of connectors)
  • get_tools_for() has a limit parameter (default 5) to control how many tools are returned
  • "Platform Benefits" section in Python README documenting centralized gateway, monitoring, auth management

Changed

  • Root README LLM section now shows complete working code with all variables defined
  • Python README LLM section rewritten with prompt-first examples for all 4 LLM providers
  • LLM agent example updated to use prompt-first tool discovery

[0.2.2] - 2026-02-20

Fixed

  • Default tenant_id changed from "organization" to "" (empty) — backend handles defaults
  • Updated tagline from "Pre-built tools" to accurate description of the integration platform

[0.2.1] - 2026-02-20

Changed

  • Smart stub generation: only generates stubs for detected SDK languages (Python and/or TypeScript)
  • Reorganized tests into tests/sdk/ and tests/cli/ for selective test runs
  • Reorganized examples into examples/sdk/ and examples/cli/
  • Added pytest markers (sdk, cli) and Makefile for development workflow
  • Updated documentation with AI-friendly API reference and LLM provider examples

[0.2.0] - 2026-02-19

Added

  • fastn agent command: AI-powered agentic tool execution with native function calling
    • OpenAI function-calling integration with automatic tool discovery
    • Prompt-based tool routing via getTools(prompt, limit) — sends only top-N tools to LLM
    • Configurable tool limit (--max-tools, default 5) to reduce hallucination
    • Benchmark summary table with token counts, cost estimation ($), and timing
    • Error recovery with consecutive error tracking (--max-errors, default 2)
    • Evaluation mode (--eval) — LLM judge assesses if agent called correct tools
    • Confirmation gates for tool calls (default on, -y to skip)
    • LLM diagnosis on persistent failures with debug context dump
    • Schema unwrapping for LLM consumption, re-wrapping for API execution
  • fastn connector run command for direct tool execution from CLI
    • Interactive parameter prompting when no args provided
    • Inline parameters via --key value
    • Tenant ID as positional argument: fastn connector run slack send_message <tenant_id>
  • --tenant option on fastn connector run and fastn agent for multi-tenant testing
  • fastn connector ls --active to show only enabled tools in project and org
  • Generic error detection (_detect_api_error) for diverse API response formats
    • Handles Slack, GitHub, Stripe, GraphQL, generic REST, HTTP status codes in body
    • Preserves original error messages for LLM diagnosis
  • Interactive LLM provider setup (OpenAI, Anthropic, Gemini) on first fastn agent run
  • Project selection during fastn login
  • CLI split into cli/ package for maintainability

Changed

  • Registry sync fetches from three scopes: project, organization, community
  • fastn connector ls groups connectors by source category
  • Tenant header corrected to x-fastn-space-tenantid
  • Tool schemas unwrapped for LLM (flat params) and re-wrapped for API execution

Fixed

  • Version alignment between pyproject.toml and init.py
  • Error value preservation in API responses (Slack channel_not_found no longer overwritten)
  • Agent summary table totals now include the final LLM response turn

[0.1.0] - 2025-02-19

Added

  • FastnClient and AsyncFastnClient for sync and async workflows
  • Dynamic connector proxy with attribute-based tool access (fastn.slack.send_message())
  • Multi-connection support via connect() and per-call connection_id
  • LLM agent integration:
    • get_tools_for(connector, format) — returns tools in OpenAI, Anthropic, Gemini, Bedrock, or raw format
    • execute(action_id, params) — execute tools by action ID with LLM-generated parameters
  • AI-powered mode via run(prompt) for natural language tool discovery
  • Control plane: admin.connectors.list(), admin.connectors.get(), get_tools(), get_tool()
  • Schema-aware migrations with deprecation warnings for smooth upgrades
  • OAuth device authorization flow (fastn login) with automatic token refresh
  • CLI commands: init, login, logout, whoami, sync, add, remove, list, schema, version
  • IDE autocomplete via generated .pyi type stubs
  • Automatic retry with exponential backoff for transient failures
  • Config file security (owner-only permissions)
  • PEP 561 py.typed marker for type checker support
  • 9 typed exceptions for granular error handling