Feature: Inline Tool Executor As a developer I want to execute inline tool code with safety constraints So that skills can run embedded Python code safely and reliably # ---- Successful Execution ---- Scenario: Execute simple inline tool successfully Given an inline tool with code that prints "hello inline" And a writable skill context with sandbox "/tmp/inline-sandbox" When I execute the inline tool Then the inline result should be successful And the inline result output should contain "hello inline" Scenario: Inline tool returns output data Given an inline tool with code that prints "result: 42" And a writable skill context with sandbox "/tmp/inline-sandbox" When I execute the inline tool Then the inline result should be successful And the inline result output should contain "result: 42" # ---- Timeout ---- Scenario: Inline tool times out and returns structured error Given an inline tool with code that sleeps for 5 seconds And a writable skill context with sandbox "/tmp/inline-sandbox" And an inline executor with max runtime 0.1 seconds When I execute the inline tool Then the inline result should not be successful And the inline result error message should contain "timed out" # ---- Output Truncation ---- Scenario: Inline tool output exceeds max size and is truncated Given an inline tool with code that prints 2000 bytes of output And a writable skill context with sandbox "/tmp/inline-sandbox" And an inline executor with max output 100 bytes When I execute the inline tool Then the inline result should be successful And the inline result should be truncated # ---- Write Guard ---- Scenario: Read-only context blocks inline tool with writes capability Given an inline tool with writes capability and code that prints "write op" And a read-only skill context with sandbox "/tmp/inline-sandbox" When I execute the inline tool Then the inline result should not be successful And the inline result error message should contain "denied" Scenario: Writable context allows inline tool with writes capability Given an inline tool with writes capability and code that prints "write op" And a writable skill context with sandbox "/tmp/inline-sandbox" When I execute the inline tool Then the inline result should be successful # ---- Validation ---- Scenario: Validate inline tool with missing code Given an inline tool with no code When I validate the inline tool Then the inline validation errors should contain "non-empty code" Scenario: Validate inline tool with unsupported language Given an inline tool with unsupported source type When I validate the inline tool Then the inline validation errors should contain "Unsupported source" # ---- Change Tracking ---- Scenario: Tool invocation is recorded in change tracker Given an inline tool with code that prints "tracked" And a writable skill context with sandbox "/tmp/inline-sandbox" When I execute the inline tool Then the skill context change tracker should have 1 inline records And the last inline tracker record tool_name should be "inline_tool" # ---- Error Handling ---- Scenario: Inline tool execution error returns structured result Given an inline tool with code that raises an exception And a writable skill context with sandbox "/tmp/inline-sandbox" When I execute the inline tool Then the inline result should not be successful And the inline result error message should contain "intentional error"