saving-codeacts
Save executed Python code as reusable tools in the gentools package. Use when preserving successful code executions for later…
Generate output parsers for mcptools with unstructured return types. Use when a tool returns raw strings or Result models with single str fields and needs structured ParseResult output. Covers testing tools, identifying parseable structures, extending modules with ParseResult
$ npx -y skills add gradion-ai/freeact --skill output-parsers --agent claude-codeHow it fires
How this skill gets triggered: by you, by Claude, or both.
/output-parsersContext preview
The summary Claude sees to decide when to auto-load this skill.
Generate output parsers for mcptools with unstructured return types. Use when a tool returns raw strings or Result models with single str fields and needs structured ParseResult output. Covers testing tools, identifying parseable structures, extending modules with ParseResult
name: output-parsers description: Generate output parsers for mcptools with unstructured return types. Use when a tool returns raw strings or Result models with single str fields and needs structured ParseResult output. Covers testing tools, identifying parseable structures, extending modules with ParseResult models, and creating parser implementations.
Generate output parsers for Python tools in the `mcptools` package that have unstructured return types.
A tool has an unstructured return type when its `run()` function returns:
A `Result` model with multiple fields (beyond `model_config`) has a structured return type and does not need a parser.
Run the Python tool with `ipybox_execute_ipython_cell` tool using 2-3 example inputs to observe return value patterns:
from mcptools.<category>.<tool> import run, Params result = run(Params(...)) print(result) # or print(result.result) for Result types
Examine the output for parseable structure (JSON, JSONL, XML, delimited text, etc.). If no consistent structure exists, a parser cannot be generated.
Preservation rules when extending tool modules:
Docstring guidelines:
Add to `{generated_rel_dir}/mcptools/<category>/<tool>.py`:
1. A `ParseResult` model:
class ParseResult(BaseModel):
"""<Describe parsed data, derived from run() docstring>."""
model_config = ConfigDict(
use_enum_values=True,
)
<field_name>: <field_type> = Field(..., title="<Title>", description="<What this field contains>")2. A `run_parsed()` function:
def run_parsed(params: Params) -> ParseResult:
"""<Copy exact docstring from run() function>."""
from mcpparse.<category>.<tool> import parse
result = run(params)
# For str return: return parse(result)
# For Result return: return parse(result.result)
return parse(result)Create `{generated_rel_dir}/mcpparse/<category>/<tool>.py` with:
from mcptools.<category>.<tool> import ParseResult
class <Tool>ParseError(Exception):
"""Exception raised when parsing <tool> results fails."""
pass
def parse(result: str) -> ParseResult:
"""Parse <tool> result into structured data.
Args:
result: Raw string result from the tool
Returns:
ParseResult with structured data
Raises:
<Tool>ParseError: If parsing fails
"""
# Implementation based on observed output structure
...
return ParseResult(...)Call the `ipybox_reset` tool to restart the IPython kernel so the next import loads the modified module.
Then test with `ipybox_execute_ipython_cell` using the same example inputs from step 1:
from mcptools.<category>.<tool> import run_parsed, Params result = run_parsed(Params(...)) print(result)
Verify that the `ParseResult` fields are correctly populated.
**Original:** `run(params: Params) -> str` returns JSONL
**Extended with:**
**Original:** `run(params: Params) -> Result` where `Result.result: str`
**Extended with:**
General-purpose AI agent that acts via code actions through a unified execution interface.
Save executed Python code as reusable tools in the gentools package. Use when preserving successful code executions for later…
Structured task planning workflow with user feedback loops. Use when the user explicitly requests planning (e.g., "make a plan",…