원클릭으로
fax-send
Send outbound faxes through a guarded provider adapter and route inbound fax-to-email attachments into downstream document workflows.
Codex 또는 Claude로 설치 이 Prompt를 복사해 Codex, Claude 또는 다른 어시스턴트에 붙여 넣으면 Skill 페이지를 검토하고 설치를 진행할 수 있습니다.
메뉴
Send outbound faxes through a guarded provider adapter and route inbound fax-to-email attachments into downstream document workflows.
Codex 또는 Claude로 설치 이 Prompt를 복사해 Codex, Claude 또는 다른 어시스턴트에 붙여 넣으면 Skill 페이지를 검토하고 설치를 진행할 수 있습니다.
SOC 직업 분류 기준
Work with Lexware Office contacts, products, invoices, quotations, bookkeeping vouchers, receipts, payment status, and guarded invoice, quotation, or expense writes through the Public API.
Search Airtable bases and tables, read records and computed fields, and prepare guarded record CRUD requests with schema-based field validation.
Expose HybridClaw as a custom Alexa skill and prepare guarded Alexa smart-home/device control payloads without exposing Amazon credentials.
Read Blink camera and video-doorbell state, list motion clips, and prepare guarded home-security control requests without exposing Blink credentials.
Read BYD Battery-Box HVS/HVM/LVS/LVL home-storage telemetry through local Modbus or paired-inverter delegation, with read-only safety boundaries.
Harvest monthly SaaS billing invoices into normalized records and official PDF files.
| name | fax-send |
| description | Send outbound faxes through a guarded provider adapter and route inbound fax-to-email attachments into downstream document workflows. |
| user-invocable | true |
| requires | {"bins":["node"]} |
| credentials | [{"id":"sinch-fax-basic-auth","kind":"header","required":false,"secret_ref":{"source":"store","id":"SINCH_FAX_BASIC_AUTH"},"scope":"fax.api.sinch.com","how_to_obtain":"Create Sinch Fax API credentials for the target EU project/service and base64-encode username:password. Set `SINCH_FAX_BASIC_AUTH` through browser admin at the active `/admin/secrets` route; if browser admin is unavailable, use `/secret set SINCH_FAX_BASIC_AUTH \"<base64>\"` in browser `/chat` or TUI; local console fallback: `hybridclaw secret set SINCH_FAX_BASIC_AUTH \"<base64>\"`."},{"id":"sinch-fax-oauth-token","kind":"bearer","required":false,"secret_ref":{"source":"store","id":"SINCH_FAX_OAUTH_TOKEN"},"scope":"fax.api.sinch.com","how_to_obtain":"Use only when the operator has an OAuth token minting path for Sinch Fax. Set `SINCH_FAX_OAUTH_TOKEN` through browser admin at the active `/admin/secrets` route; if browser admin is unavailable, use `/secret set SINCH_FAX_OAUTH_TOKEN \"<access-token>\"` in browser `/chat` or TUI; local console fallback: `hybridclaw secret set SINCH_FAX_OAUTH_TOKEN \"<access-token>\"`."}] |
| metadata | {"hybridclaw":{"category":"communication","short_description":"Guarded outbound fax sending for DACH PDF workflows.","tags":["fax","dach","sinch","healthcare","legal","steuerberater"],"related_roadmap":["R26"],"issue":659,"stakes_tiers":{"green":["fax.status","fax.classify-status","fax.plan"],"amber":["fax.send"]},"escalation":{"writes":"confirm-each","route":"f8"},"cost_measurement":{"system":"UsageTotals","sub_limit_key":"fax-pages","unit":"fax-page"}}} |
Use this skill when a user asks to fax a supported file, web page, text note, or PDF to an external fax number, or when an inbound fax arrives as an email PDF and needs routing to a document workflow such as DATEV Belegtransfer, file storage, or client records.
SINCH_FAX_PROJECT_ID plus either
SINCH_FAX_BASIC_AUTH or SINCH_FAX_OAUTH_TOKEN. Never claim a Sinch
service ID secret is required for normal outbound sending.from when the user wants to use the Sinch Fax service default sender. Do
not ask the user for a service ID for a normal outbound send; Sinch uses the
product's default Fax service when serviceId is omitted.http_request to Sinch is terminal for that send attempt. After it
returns, stop and report the provider result. Do not use web_search,
web_fetch, the PDF skill, local PDF scripts, helper source inspection, or
ad hoc replacement requests, and do not ask to retry in the same response,
unless the user explicitly asks for debugging in a new turn.src/fax/accounting.tsUsageTotalsDirect modem control, T.38/SIP live transmission, binary local file upload, and cover-page templating are outside this skill slice.
Store credentials in HybridClaw encrypted runtime secrets. Never paste them into chat or helper arguments.
For Sinch Basic auth, set the base64 value of username:password in this
order:
/admin/secrets and set
SINCH_FAX_BASIC_AUTH./chat or TUI fallback:
/secret set SINCH_FAX_BASIC_AUTH "<base64-username-password>".hybridclaw secret set SINCH_FAX_BASIC_AUTH "<base64-username-password>"
For Sinch OAuth, set a bearer token only if the operator has a token minting process, using the same setup order:
/admin/secrets and set
SINCH_FAX_OAUTH_TOKEN./chat or TUI fallback:
/secret set SINCH_FAX_OAUTH_TOKEN "<access-token>".hybridclaw secret set SINCH_FAX_OAUTH_TOKEN "<access-token>"
The helper emits either secretHeaders: [{ name: "Authorization", secretName: "SINCH_FAX_BASIC_AUTH", prefix: "Basic" }] or bearerSecretName: "SINCH_FAX_OAUTH_TOKEN" so the gateway injects the secret server-side.
Set the Sinch project default once so normal sends do not need provider account arguments:
/admin/secrets and set
SINCH_FAX_PROJECT_ID./chat or TUI fallback:
/secret set SINCH_FAX_PROJECT_ID "<sinch-project-id>".hybridclaw secret set SINCH_FAX_PROJECT_ID "<sinch-project-id>"
SINCH_FAX_PROJECT_ID by default. Include
--from only when the user explicitly supplies a sender fax number;
otherwise omit it so Sinch uses the Fax service default sender. Omit
serviceId unless the user explicitly provides a non-default Fax service ID
in the same request.plan for natural-language requests when details are incomplete.fax.send; faxing is an external
document delivery action and can incur per-page cost.fax_send.cjs http-request send. Do not hand-author
Sinch API JSON or secret references.httpRequest object to http_request for live sends.http_request returns, stop tool use for that send attempt and
summarize the returned status/body. If Sinch returns 4xx/5xx, report it as
the provider response; do not search the web, inspect PDF tooling, or retry
with a different payload shape in the same turn.fax.send.start before dispatchfax.send.delivered when status is COMPLETEDfax.send.failed when status is FAILUREclassify-status after status polling or webhook payloads to turn
provider states into the expected audit event and retry decision.Run the helper:
node skills/fax-send/fax_send.cjs --help
Plan a request without contacting a provider:
node skills/fax-send/fax_send.cjs --format json plan "Fax the signed contract to +49 89 1234567"
Build a guarded Sinch outbound request:
node skills/fax-send/fax_send.cjs --format json http-request send \
--provider sinch \
--auth basic \
--content-url https://example.com/signed-contract.pdf \
--to +49891234567 \
--page-count 3 \
--label costCenter=legal \
--operator-grant
Look up delivery status:
node skills/fax-send/fax_send.cjs --format json http-request status \
--fax-id 01F3J0G1M4WQR6HGY6HCF6JA0K
Classify a provider status into audit and retry handling:
node skills/fax-send/fax_send.cjs --format json classify-status \
--fax-id 01F3J0G1M4WQR6HGY6HCF6JA0K \
--provider sinch \
--status FAILURE \
--error-type CALL_ERROR \
--error-message "BUSY"
List provider reference support:
node skills/fax-send/fax_send.cjs --format json providers
List eval scenarios:
node skills/fax-send/fax_send.cjs --format json eval-scenarios
Inbound fax is handled by the existing email channel. Configure the fax provider or telco portal to forward inbound faxes as PDF attachments to a dedicated mailbox, then configure HybridClaw email polling for that mailbox.
Use a narrow sender allowlist when the provider uses stable sender domains, and
route attachment PDFs with normal document skills. See
docs/content/channels/fax.md for the operator recipe and reference YAML.
Build a guarded Sinch generated-PDF text upload request:
node skills/fax-send/fax_send.cjs --format json http-request send \
--provider sinch \
--auth basic \
--text "Hallo Welt" \
--filename hallo-welt.pdf \
--to +498920931098 \
--page-count 1 \
--operator-grant
For generated PDFs, including requests that combine text with an image, first create the PDF with the bundled PDF script and then send that file. Do not write ad hoc PDF or multipart scripts.
node skills/pdf/scripts/create_pdf.mjs fax.pdf \
--image-url https://github.com/HybridAIOne/hybridclaw/blob/main/docs/hero.png?raw=true \
--text "Hello World! This Claw can fax!"
node skills/fax-send/fax_send.cjs --format json http-request send \
--provider sinch \
--auth basic \
--file fax.pdf \
--to +498920931098 \
--page-count 1 \
--operator-grant
contentUrl for a Sinch-supported
file type or web page. Do not send local paths or private intranet URLs to a
fax provider.--file path/to/file.pdf so the helper emits a
secret-backed multipart/form-data request with the PDF as the file part.
Do not write custom multipart builders.--text so the helper emits a
secret-backed multipart/form-data request with a generated PDF file upload.
Do not invoke skills/pdf, create_pdf.mjs, web_search, or web_fetch to
convert or verify this path; the fax helper owns the PDF payload shape.plan responses, give one concise no-send summary only. Do not repeat
the same plan in a second format, do not mirror raw helper JSON after a
human summary, and do not add decorative emoji, sign-off text, or readiness
filler.+49 89 1234567 becomes +49891234567.SUPERFINE as higher cost/risk than the default FINE; use it only
when the user needs small text or detailed scans.costMeasurement.system = "UsageTotals" plus unit = "fax-page" and the
provided pageCount so evals can verify the accounting contract.recordFaxUsageEvent() after provider
acceptance or final delivery so UsageTotals.billable_units includes
fax-page quantity and provider cost.recordFaxSendStart(),
recordFaxSendDelivered(), and recordFaxSendFailed() from
src/fax/accounting.ts so the structured audit table contains real
fax.send.* rows with provider message IDs.