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.
- Combined auth: API key is the primary auth for all agents; valid Bearer tokens bypass x402 payment middleware, unauthenticated requests fall through to x402 payment flow
/chatauto-readsAGENT_API_KEYfrom the project.envfile, so authenticated agents work without manual key entry/chatin/buildmode reads.envfrom the build target directory (not just cwd)/chathandles 402 (Payment Required) in the auth retry flow, prompting for an API key instead of failing immediately
- Retry spinner in
/chatauth flow is properly stopped on error instead of leaking into subsequent output - Stdin drain after returning from
/chatto/buildmode prevents phantom input from triggering the build AI
- API key authentication for non-x402 agents: scaffolded agents generate a
wdn_-prefixed Bearer token, stored in.env, that protects both A2A and LangGraph POST endpoints viaauthenticateRequest()middleware /chathandles 401 responses by prompting for the API key, recreating the client with auth, and retrying the message
- Fixed build mode input freeze after
/chatprobe failure: stdin was left paused when the chat session exited early without creating its own readline
/newcommand now appears first in the available commands list- Echo template response prefix changed from "Echo:" to "Agent:"
- Multi-provider model switching: API keys for all configured providers are stored in
~/.warden/config.jsonso switching between OpenAI and Anthropic no longer requires re-entering keys - Two-step
/modelpicker: select provider first (with "current" and "configured" labels), then select model (with "current" or "configured" on the last-used model) - Escape key navigation in
/modelwizard: press Esc to go back to the previous step, with "esc back" hint in navigation cues - Conversation history preserved when switching models within the same provider; cleared only on provider change
- Silent config migration: legacy single-provider
~/.warden/config.jsonfiles are automatically upgraded to multi-provider format on first read
/chatnow shows actionable guidance when an agent returns HTTP 402 (payment required), directing the user to restart withX402=false- Generated x402 agents support
X402=falseruntime flag to bypass payment middleware for local testing without modifying.env
/registercommand: register agents on-chain via the ERC-8004 Identity Registry across 30 supported EVM chains (14 testnets, 16 mainnets). Handles NFT minting, agent URI setting, and local registration file updates./activateand/deactivatecommands: toggle agent active status on-chain across all registered chains simultaneously, with per-chain transaction reporting and partial failure handling.- Pre-registration validation: checks agent name, description, URL, and skills quality before on-chain registration. Missing fields block registration; quality warnings prompt for confirmation.
- Registration services: scaffolded
agent-registration.jsonnow includes A2A (witha2aSkills), Web, and OASF services. OASF skill paths are auto-populated from agent skills at scaffold time.
- Agent card template now includes
defaultInputModesanddefaultOutputModesas required by A2A v0.3.0 - Fixed A2A service version in registration template from
0.5.0to0.3.0 - Removed non-standard
multiTurnfield from agent card capabilities, type definitions, scaffolder, probe, and frontend - Smart agent URL suggestion in
/configserver editor: port 443 suggestshttps://without port, port 80 suggestshttp://without port, other ports include the port number
- Consolidated dual
agent-registration.jsonfiles into single canonical path at.well-known/agent-registration.json - Registration endpoint updates now iterate services by name (A2A, Web, OASF) instead of hardcoding array index
/configserver editor now suggestshttp://<host>:<port>as the Agent URL default when host or port changes
/configcommand: interactive viewer and editor for all agent configuration (identity, server, skills, payments) from the CLI, with/config showfor read-only display- Skills editing: add, edit, and remove agent skills via
/configwith automatic OASF tagging - All agents now scaffold with x402 payment infrastructure; payments are disabled by default and can be enabled later via
/configor.envwithout re-scaffolding
- Build mode no longer exits on API errors (401, 403, 500, etc.); the error is displayed and the user stays in the build loop with guidance to use
/model
- Renamed "Template" to "Provider" in the
/newwizard for clarity - Error messages for 401, 403, and 404 API errors now reference
/modelfor in-session recovery
- OpenAI Codex model support:
OpenAIProviderdetects Codex models and routes them through the Responses API (separateinstructionsparameter,response.output_text.deltastreaming events) while non-Codex models continue using Chat Completions - Codex-first model selection: OpenAI provider defaults to GPT-5.2 Codex in the model picker; other models (o3, gpt-4.1, o4-mini) remain accessible via "Other"
/rebuildcommand in build mode: manually triggernpm install+npm run buildwithout asking the AI
- Fixed pasted text remnants leaking into the next prompt by clearing readline's internal line buffer
/modelcommand reuses the stored API key when switching models within the same provider instead of re-prompting- Fixed OpenAI model choices using Codex models (Responses API only) instead of Chat Completions-compatible models (o3, GPT-4.1, o4-mini)
- Streaming responses in
/buildmode: AI responses stream token-by-token with real-time display instead of waiting for the full response - Auto-rebuild after code changes:
/buildautomatically runsnpm install(whenpackage.jsonchanged) andnpm run buildafter applying file changes, with build errors fed back to the AI for self-correction (up to 2 retries) - Agent-kit type awareness: the build mode coding agent now receives
@wardenprotocol/agent-kittype definitions fromnode_modulesas context, preventing hallucinated APIs - Persistent build config: LLM provider, model, and API key stored in
~/.warden/config.jsoninstead of per-project, shared across all agent projects /modelcommand in build mode: switch AI provider, model, and API key without leaving the session (clears conversation history for the new model)
- Fixed readline prompt showing stale text after spinner animations in
/buildmode - Fixed generated README template using
npm run agentinstead ofnpm start
- MetaMask deep link for mobile: on mobile browsers, "Connect MetaMask" becomes "Open in MetaMask" and redirects to MetaMask's in-app browser via universal link, where
window.ethereumis injected and all existing payment/reputation flows work unchanged - Responsive mobile layout for the scaffolded agent chat UI: reduced paddings, scaled typography, larger touch targets for wallet buttons and feedback stars, and proper wrapping on narrow screens
- Info bar (description, capabilities, reputation) now scrolls with the conversation instead of staying fixed, reclaiming vertical space on mobile
- Removed Solana/SVM support: Phantom wallet integration, Solana network choices in
/newwizard,@x402/svmdependency, Solana address validation, and Solana block explorer URLs have all been removed. x402 payments are now EVM-only (Base Sepolia and Base mainnet).
- Markdown rendering for agent responses: lazy-loads
markedfrom CDN, progressively upgrades plain text to rendered GFM with headings, code blocks, lists, tables, and links - Payment amount shown in system message when agent has x402 pricing configured
- ERC-8004 on-chain reputation display in scaffolded agent front-end: aggregated star rating, numeric score, and review count fetched from ReputationRegistry across all registered chains
- Feedback submission: 5-star rating row on every agent message, auto-switches wallet to cheapest L2 for minimal gas fees
- Pre-flight ownership check prevents MetaMask transaction popup when agent owner tries to self-rate
- Dynamic favicon from agent card
imagefield
- Payment transaction hash now always links to block explorer (fallback to wallet's current chain when
payment.networkdoesn't match directly) - Star rating hover fills all stars up to the hovered one with green color instead of highlighting individually
- Removed skills display from front-end (OASF tag paths were not user-friendly); example prompts still work
supportedTrust: ["reputation"]added to agent registration template- Shared
ensureViem()helper for lazy-loading viem (reused by x402 payments and reputation)
- Bundled front-end for scaffolded agents: every new agent gets a
public/index.htmlwith a chat UI that loads the agent card, displays capabilities, skills, provider info, and example prompts as conversation starters - Static file serving from
public/: custom HTTP server uses aserveStaticfunction with MIME type support; Express path usesexpress.static; any file inpublic/is automatically served - ERC-8004 agent registration: scaffolds
agent-registration.json(inpublic/.well-known/andpublic/root) with compliant structure including x402 support and network metadata - Agent card moved to
public/.well-known/agent-card.jsonwith a staticurlfield; startup logs a warning if it doesn't match the server'sAGENT_URL - x402 payment UX: eager wallet loading on page load, MetaMask chain detection via
eth_chainId, payment transaction hashes link to block explorers, wallet buttons conditionally shown based on configured networks (EVM-only agents hide Phantom, Solana-only agents hide MetaMask)
- Rebuild viem wallet client on MetaMask chain change instead of mutating via
Object.assign, fixing "chainId must match active chainId" errors - Auto-switch MetaMask to the required chain before signing x402 payments, resolving per-site chain permission mismatches
- Dockerfile copies
public/directory instead of singleagent-card.json - Deduplicated
listenBlockin scaffolder (single definition reused by both x402 and non-x402 paths)
- Auto-tag agent skills with OASF (Open Agentic Schema Framework) categories at scaffold time using static keyword matching against skill name and description
- 77 OASF categories across 11 domains covering natural language, coding, retrieval, security, data operations, agent orchestration, evaluation, infrastructure, governance, integration, and strategic reasoning
- Tags appear as
"oasf:<path>"strings in the generatedagent-card.json(e.g.,"oasf:natural_language/generation/dialogue_generation")
- Generated Dockerfile now copies
agent-card.jsoninto the production image, fixing a startup crash when running in containers - Renamed generated npm script from
agenttostartto follow Node.js conventions
- Extract x402 payment logic into separate
payments.tsmodule: generated agents get a dedicated file for all payment setup, keepingserver.tsfocused on server lifecycle - PayAI facilitator authentication: generated agents use
@payai/facilitatorfor automatic JWT-based auth when the facilitator URL points topayai.network - Single
X402_FACILITATOR_URLenv var replaces per-network facilitator URLs (the x402 middleware only supports one facilitator)
- Echo template A2A state machine: added missing
workingstate transition beforecompleted, fixing "Invalid task state transition" warnings from AgentServer
- Generated
.env.exampleuses empty placeholder values instead of leaking actual wallet addresses from the wizard - PayAI API credential hints only shown for mainnet configurations (testnet-only agents skip them)
- Consolidated
buildPaymentsModule()as an independently testable function for generating the payments module
- Multi-network x402 payment support: agents can accept payments on Base Sepolia, Base mainnet, Solana Devnet, and Solana mainnet
- Per-network facilitator URLs: testnet networks default to x402.org, mainnet networks default to PayAI facilitator
- Payment configuration via per-network environment variables (
X402_<PREFIX>_PAY_TO,_PRICE,_NETWORK,_FACILITATOR_URL) - Payments auto-disable when no pay-to address is configured (server falls back to standard listen)
- Wizard supports adding multiple payment networks with per-network wallet address validation (EVM and Solana)
.env.exampleincludes all network sections with disabled networks commented out for easy enabling- Facilitator URL validation at startup: all enabled networks must use the same facilitator
- Payment details no longer hardcoded in generated
server.ts; read from environment variables at runtime AgentConfig.x402type updated to support multiple networks viaacceptsarray
- x402 payments are now only active when
X402_PAY_TO_ADDRESSis set; unsetting the env var disables payments at runtime without re-scaffolding
- Optional x402 payment support in
/newwizard: generated agents can charge per request using USDC on Base via Coinbase's HTTP 402 protocol - When enabled, generated
server.tswraps AgentServer with Express +@x402/expressmiddleware - Wizard prompts for wallet address, price per request, and network (Base Sepolia or Base mainnet)
- Generated
.env,package.json, andREADME.mdinclude x402 configuration when enabled - CORS headers included in x402 Express wrapper for browser-based clients
- Fixed spinner not animating during
npm installin/new(switched from blockingexecSyncto asyncexec) - Fixed
oraspinner stealing stdin by settingdiscardStdin: false
- Aligned banner and help text indentation
- Added wallet address validation tests and x402 template integration tests (198 total tests)
- Bumped
@wardenprotocol/agent-kittemplate dependency from^0.3.1to^0.5.0
- Fixed inaccurate capability descriptions in
/newwizard — streaming and multi-turn descriptions now reflect actual template behaviour
- Clarified
/newwizard: "Select a model" renamed to "Select a template" with expanded descriptions - Clarified capability selection: "Select capability" renamed to "Select a communication style for your agent"
- Added explanation of what skills are before the skills prompt
- Configuration summary now shows "Template" instead of "Model"
- Added "What was created" section after scaffolding, listing key files and their purpose
- Expanded "Next steps" with numbered guidance and annotated manual commands
- Clarified Build Mode Setup: explains the AI provider is for the coding assistant, not the agent
- Build mode entry message now mentions
/chatsub-command /chatprobe failure now shows actionable instructions on how to start the agent/chatin build mode shows a tip to ensure the agent is running
/newnow always creates a.envfile with defaultHOST,PORT, andAGENT_URLvalues, not just for OpenAI templates — fixes/chatin build mode not finding the agent URL- Fixed
RequestInfotype errors in test files that brokepnpm build
- Extracted agent card from hardcoded
server.tsinto a separateagent-card.jsonfile that is loaded at runtime - Added
agent-card.jsonto build mode project context so the AI can see and modify it - Updated generated project structure in README
/chatsub-command inside/buildmode — chat with a running agent without leaving build context (build.ts, chat.ts)- Auto-resolve agent URL from the project
.env(AGENT_URL) when using/chatin build mode - Prompt for agent URL if no
.envand no argument provided /releaseClaude Code skill for automated release preparation (.claude/skills/release)
- Fixed
RequestInfotype errors in test files that brokepnpm build
- Extracted
runChatSession()as a reusable function fromchat.tsfor code reuse (6e67cc6) - Added tests for
readAgentUrlhelper (build.test.ts) - Added more tests for existing functionality (6e67cc6)