A purely functional agent framework with immutable state and composable tools for building AI agents in Python
JAF-PY tools lack critical production-grade documentation. While all 14 tools have names and descriptions, and complete input schemas are visible, the descriptions are significantly below the 194-character baseline for A-grade tools. Most descriptions are terse (20-60 chars) and lack context about when to use each tool, prerequisites, state mutations, or recovery guidance. Parameter descriptions are present but generic. No output schemas are documented. Error handling lacks actionable recovery guidance. The framework demonstrates basic tool registration competency but falls short of patterns expected in production agent environments. Tool naming follows verb_noun conventions reasonably well, but composition lacks clarity on when tools chain together.
Calculate tax for a given amount.
A custom greeting tool with enhanced features
Execute database query with appropriate timeout.
Delete a file (requires approval)
Edit or create a file with new content (requires approval)
Fetch the weather for a given location.
Get weather forecast for multiple days.
Output schemas not documented. Tools return results but LLMs have no structured schema to reason about downstream chaining or field extraction.
Descriptions lack actionable guidance. No indication of WHEN to use each tool, prerequisites, or how tools compose. Average description ~45 chars vs baseline 194 chars. Example: 'Fetch the weather for a given location.' does not explain what data structure is returned, when to call vs get_forecast, or expected latency.
| Scored | Grade | Overall | Spec posture | Rubric |
|---|---|---|---|---|
| 2026-09-22 | D | 59 | 2026-07-28+ | v2 |
| 2026-03-09 | D | 56 | - | v1 |
Perform heavy computational task.
Interactive tool that waits for user input.
List files and directories in the specified directory
Process data with various parameter types.
Read the contents of a file
Translate the user's message to French
Translate the user's message to Spanish
No error recovery guidance. Tools like deleteFile and editFile perform state mutations but descriptions do not warn about irreversibility or offer dry-run/confirmation patterns. No error responses documented.
Parameter descriptions are generic and lack format/constraint details. Example: 'directory' and 'filepath' lack guidance on relative vs absolute paths, allowed characters, max length, or whether wildcards are supported.
No tool annotations (readOnlyHint, destructiveHint, idempotentHint) present in schemas. LLMs cannot determine which tools are safe to retry, which modify state, or which require confirmation.
Tool composition gaps. No documentation of how tools chain (e.g., does listFiles output filenames that readFile accepts? Does database_query return a total_count for pagination?). Response field naming likely mismatches parameter names, forcing unnecessary lookups.
No pagination support documented. Tools like listFiles and database_query that return collections do not describe limit/offset/cursor parameters or total counts, risking context window exhaustion.
Ambiguous tool naming. 'custom_greet' is vague, is it for user onboarding, testing, or something else? 'process_data' is a generic verb that could apply to many tools.
No secrets injection pattern visible. If database_query, fetch_weather, or other external-call tools require API keys, they are likely exposed as parameters or baked into code rather than injected from environment.
No permission gates or audit trails visible. Destructive tools (deleteFile, editFile) and sensitive tools (database_query) do not declare required permissions or log invocation context.