Tool Call
Which tool an agent ran, with what and what came back; tools that act outside wait for approval.
Arguments
{ "email": "ana@acme.com", "apiKey": "[redacted]"}Result
{ "name": "Ana", "plan": "Pro"}Arguments
{ "week": "2026-W43"}The client asked for four days. Check the calendar first, then draft the proposal with token=[redacted] redacted.
Installation
Once per app, set up Aedis UI. The CLI verifies the signed release before writing anything and pins every dependency:
npx @aedis/cli@0.1.0 initImport the theme once in your global CSS, after Tailwind:
app/globals.css
@import "tailwindcss";@import "./styles/aedis-theme.css";Then add the component:
npx @aedis/cli@0.1.0 add tool-call# pnpm dlx @aedis/cli@0.1.0 add tool-call · yarn dlx @aedis/cli@0.1.0 add tool-call · bunx @aedis/cli@0.1.0 add tool-callProps
| Prop | Type | Default | Description |
|---|---|---|---|
| name / status | string / "running" | "done" | "error" | "awaiting-approval" | — | What ran and where it is. |
| args / result | unknown | — | Shown as JSON text after redaction. |
| external + approval | boolean + { requester; onApprove; onRequestChanges } | — | A tool that acts outside waits in an ApprovalCard while awaiting approval. |
| redactKeys | string[] | — | Replaces the default keys: password, secret, token, authorization, api key, cookie, session, credential… |
| Reasoning | component | — | children (markdown), streaming, durationMs; starts collapsed, same redaction. |
| redact(value) / redactText(text) | lib | — | The same redaction for your own views and logs. |
Security
- Arguments and results are rendered as data (escaped JSON in a code block), never as markup.
- Values under secret-looking keys, bearer tokens, JWTs and key=value secrets are redacted before anything is shown; long values, arrays and depth are bounded.
- An external tool waiting for approval goes through ApprovalCard, which confirms through an AlertDialog that starts on Cancel.
- Reasoning starts collapsed and uses the same redaction.