Send a fax from Pi

Updated

Pi, the coding agent, can send and read faxes for you through the Fax for Agents package on npm. You describe the fax in plain words. Pi prepares the page, gets a quote, sends it and checks the delivery state in one turn. By default it sends inside the limits your organization set, with no approval per fax. This guide was recorded in Sandbox mode, so nothing reached a real fax line.

Screenshots taken on .

Before you start

  • A Fax for Agents account and an API key. Create the key in the dashboard at app.faxforagents.com. Use an ffa_test_ key for the free sandbox.
  • Pi with the package installed. Run pi install npm:@faxforagents/fax-for-agents. Export FAXFORAGENTS_API_KEY in the shell that starts Pi. Pi's bash tool inherits it.
  • A model provider signed in to Pi, for example OPENAI_API_KEY in the same shell or /login inside Pi. The guide used gpt-5-mini.
  • An AGENTS.md in the project folder with two lines. The key is set in FAXFORAGENTS_API_KEY and must never be printed. Every id comes from an API response. Pi reads the file on start and lists it under [Context].
  • The Connected apps switch in Settings is on by default. The default limits are $5.00 per fax and 20 faxes a day.

1.Check the package

Open a terminal and list the installed packages.

A terminal after pi list: User packages shows npm:@faxforagents/fax-for-agents@1.0.0 and its path.
Run pi list. The package npm:@faxforagents/fax-for-agents@1.0.0 is listed under User packages.

2.Open Pi

Start Pi in any project folder.

The Pi startup card: version, keyboard shortcuts, AGENTS.md under Context, fax-for-agents under Skills, the empty prompt and the model row.
Run pi. The startup card lists AGENTS.md under [Context] and fax-for-agents under [Skills], and the prompt waits for your message.

3.Describe the fax

Type what the fax should say and where it goes. Name Fax for Agents so the skill is used.

The prompt typed into Pi: With Fax for Agents, prepare a one page fax that says: Invoice 7731 is paid. Thank you. Send it to +1 555 000 0001 and tell me when it is delivered.
Type what the fax should say and where it goes, then press Enter.

4.Send it

Pi does the whole routine itself with the REST calls from the skill. The bash rows show each curl call.

Pi runs the REST calls with curl and reports the fax to +1 555 000 0001 as delivered with the fax id.
Pi prepares the page, quotes it, sends it and polls the state. It reports delivered with the fax id.

5.Check the evidence

Ask for the delivery evidence when you want the full record.

Pi lists the delivery evidence: sandbox provider, pages sent, the attempt, remote station SBX-OK, the completion time.
Ask for the delivery evidence. Pi lists the pages sent, the attempt, the remote station SBX-OK and the completion time.

6.Read the inbox

Received faxes work the same way. Ask for your inbox.

Pi lists the inbox and prints the text of the newest received fax from +15550000042, two pages.
Ask for your inbox. Pi lists the received faxes and reads the newest one as text.

What the limits mean

Open Settings in the dashboard. The Connected apps card holds the switch "Let connected apps send without asking". Under it are two fields, "Amount per fax, at most" ($5.00) and "Faxes per day" (20). Apps like Pi send inside these limits with no approval per fax. Turn the switch off and every send waits for a person. Finer limits, such as destinations or one app only, live under Policies. See the guide Your assistant sends within limits by default.

Approve every fax instead

  1. In Settings, turn off "Let connected apps send without asking" and choose Save.
  2. Ask Pi to quote the fax. The quote says approval is required.
  3. Say "Ask a person to approve it." A person approves in the dashboard or with the ffa command line, then you tell Pi to send.

The routine is the same as in Approve every fax from Claude Code.

Troubleshooting

  • Pi prints the value of FAXFORAGENTS_API_KEY while it checks the environment. Add the AGENTS.md line from "Before you start" and rotate the key in the dashboard.
  • Pi reports a fax id that does not exist, such as fax_01H7K2Z1, without a bash row above it. The model wrote a summary instead of running the calls. Say "Run the REST calls from the skill now and report the fax id and its state." Keep the AGENTS.md rule against invented ids.
  • Pi prints "No models available. Use /login to log into a provider". No provider key is set. Export one, for example OPENAI_API_KEY, or run /login inside Pi.
  • Pi prints the curl commands and asks "sandbox or live" instead of running them. Say that the key is already configured, or answer "sandbox". The skill then runs the calls.
  • Pi writes a draft file in the project instead of sending. A small model skipped the skill. Name Fax for Agents in the prompt and use a model such as gpt-5-mini or larger.
  • Pi says the quote requires approval although you expect a plain send. An owner turned the Connected apps switch off, or the fax is above a limit. Check Settings, Connected apps for your environment.

Next