pi-tool-duration

Append model-visible durations to slow Pi tool results

Packages

Package details

extension

Install pi-tool-duration from npm and Pi will load the resources declared by the package manifest.

$ pi install npm:pi-tool-duration
Package
pi-tool-duration
Version
0.1.4
Published
Jul 16, 2026
Downloads
648/mo · 196/wk
Author
fitchmultz
License
MIT
Types
extension
Size
7.6 KB
Dependencies
0 dependencies · 1 peer
Pi manifest JSON
{
  "extensions": [
    "./extensions/tool-duration"
  ]
}

Security note

Pi packages can execute code and influence agent behavior. Review the source before installing third-party packages.

README

pi-tool-duration

Appends [duration: Xs] to slow Pi tool results so the model can tell when a tool actually took time.

hi
[duration: 5.0s]

Why

Pi already shows tool timing in the TUI (Took Xs), but that timing is UI-only. This extension adds the elapsed time to the model-visible tool result for slow calls.

How it works

The extension matches Pi tool_execution_start and tool_result events by toolCallId. When elapsed time is at or above the configured threshold, or a result reports a non-zero exit code, it appends one text block:

[duration: 5.0s]

Scope: Pi tools that emit tool_result events, including built-ins and extension tools. Direct ! / !! shell commands and RPC bash command messages are not tool results and are not annotated.

Install

pi install .                         # local, global settings
pi install -l --approve .            # local, project settings
pi install npm:pi-tool-duration      # after npm publish

Try without installing

From this repo:

pi -e .
# or
pi -e ./extensions/tool-duration/index.ts

Configure

Default threshold: 1000 ms.

PI_TOOL_DURATION_THRESHOLD_MS=0 pi -e .        # annotate every tool result
pi -e . --tool-duration-threshold-ms 500       # annotate tools taking >= 500ms

Invalid threshold values fall back to the default.

Verify

In a session running the extension, ask Pi to use bash:

Use bash to run: sleep 5; echo hi

The model sees:

hi
[duration: 5.0s]

A fast successful command below the threshold stays unchanged. A non-zero exit code is always annotated, even below the threshold.

License

MIT