Decrypt File (decrypt_file)
This document covers decrypt_file (display name “Decrypt File (PGP)”), the agent tool that decrypts a PGP/GPG-encrypted file with the private key stored in a workspace PGP integration.
Typical use: partner SFTP drops of *.zip.pgp / *.zip.gpg archives picked up by the SFTP File Import Trigger — decrypt first, then unzip with file_utils and route the contents.
Authentication and enablement
The tool uses a workspace PGP credential integration (integrations.service_name = 'pgp'), which stores an ASCII-armored private key, an optional passphrase, and optionally the ASCII-armored public key of the exchange partner. The hidden integration_id is resolved from the configured tool binding with first_active; key material is loaded inside the Go worker only after verifying that the integration belongs to the task workspace and is active. Keys never appear in persisted tool args and are never sent to external services (in particular, never to the Python sandbox).
The integration validates key material at save time: supplied keys must parse as armored OpenPGP blocks, and a passphrase-protected private key must actually unlock with the given passphrase.
DefaultEnabled is false — enable and configure the tool for each agent that receives encrypted files. It is billed at the same flat per-call rate as the other file utilities.
Inputs
Required:file_url: URL of the encrypted file — a task file URL or the output variable of a previous step.
BEGIN PGP MESSAGE); both are detected automatically. The .pgp and .gpg extensions are both accepted throughout the platform import path.
Behavior
- Resolve and verify the PGP integration (workspace scope, service, active status).
- Parse the private key and unlock it with the passphrase if needed.
- Download the encrypted file.
- Decrypt. The plaintext is treated as an opaque blob — the tool makes no assumption about what was encrypted (an archive, a PDF, anything).
- Upload the decrypted file to platform storage and return its URL and variable reference.
.pgp/.gpg stripped (archive.zip.pgp → archive.zip). A source without either suffix keeps its name prefixed with decrypted_.
Limits
- Encrypted input: 200 MB maximum.
- Decrypted output: 200 MB maximum.
Expected errors
All failures return a clear tool error (never a partial or empty output file):- integration missing, inactive, or belonging to another workspace
- integration has no private key (public-key-only integrations cannot decrypt)
- private key unusable (bad armor, missing or wrong passphrase)
- file encrypted for a different key than the integration holds
- input that is not a valid PGP message, or corrupt/truncated ciphertext
- input or output exceeding the size caps
Output
The structured result containstool_name and result.file with filename, file_id, and file_url (the decrypted file), plus result.size_bytes.