Tool
ContactCTL for Codex CLI
Codex CLI executes shell commands; ContactCTL is a shell command. That is the whole integration — plus an AGENTS.md note so Codex knows when to reach for it and how to treat spend.
01 — The problem
Approval-mode automation needs predictable tools
Codex CLI is at its best when commands behave: terminate on their own, exit with meaningful codes, and never sit waiting for keyboard input. Most data tools fail all three — they are dashboards with an API bolted on.
ContactCTL was designed for exactly this harness. No command ever prompts. Exit codes are deterministic (0 found, 2 not found, 4 budget cap, 9 timeout with a resumable run-id). Output is stable JSON under --json. Rate limits are absorbed by automatic backoff, so Codex sees slow, not broken.
Cost control is structural: --estimate prices any action locally before Codex commits, and --max-cost is enforced server-side mid-run.
02 — The workflow
How it runs
A Codex task, end to end
“Enrich the new signups file and flag anything undeliverable.” Codex plans it as three shell calls.
Teach it in AGENTS.md
One section makes ContactCTL part of every Codex session in the repo.
## Contact data (contactctl) `ctc` is installed for B2B contact work: find work emails, verify deliverability, whois reverse lookup, scoped search, lookalikes. It never prompts; safe to run unattended. - Read `ctc instructions` before first use in a session. - Use --json for parsing, --estimate before any spend, --max-cost on every batch. - Exit codes: 0 found · 2 not found · 4 budget · 6 bad input.
03 — Commands and credits
What this workflow uses
Every command reports its credit cost in the output. Preview any spend with --estimate at zero cost.
| Command | Purpose | Credits |
|---|---|---|
| ctc instructions | Full tool guide for the session | free |
| ctc whois <in.csv> [out.csv] | Batch person + company resolution | 1 credit per row found |
| ctc verify <in.csv> [out.csv] | Batch deliverability | 0.02 credits per row |
Full datasheet: credit costs in the docs · plan pricing on /pricing