Prompt: manage domains other ird customers shared with you
Have an agent work on domains that other ird accounts delegated to you —
an agency running client domains, a contractor with scoped access — and
stay inside the granted scopes and the billing arrangement: it reads every
share first, does each client's checklist, and ends with a monthly report
of what it did on whose credits.
Needs: ird access (MCP server or the ird CLI, logged in); at least one share accepted in the ird web panel (grants_list non-empty)
Costs: whatever the per-client work itself costs, billed per each share's payer (owner / grantee / split); tunnels and servers bill hourly (credits_prices → recurring.tunnel-hourly, recurring.vps-hourly.<tier>), record edits are free; listing is free
Group: domains & dns
Paste everything below the line into a fresh conversation. Fill in the
FILL IN block first.
Task
Go through the domains shared with this account, do the work listed per
client, and report. Nothing that bills anyone runs before I confirm it,
and I am told each time whose credits it bills.
FILL IN
CLIENTS: # one line per shared domain, or "all" = everything in grants_list
example.ro: set www A 203.0.113.10; check the tunnel is active
example.com: add DMARC TXT; report only
REPORT_MONTH: 2026-09 # month the report covers
MY_ACCOUNT_LABEL: agency # how to name my side in the report
Non-negotiable rules
- Scopes are the law.
grants_list says which scopes (dns,
tunnel, ipfs, vps) each owner granted. Never attempt an action
outside a domain's scopes; report it as "not granted" instead.
- Say who pays, every time. Before any action that bills — creating
a tunnel, a server, attaching a gateway domain — restate the share's
payer (owner = their credits, the default; grantee = mine;
split = half each) and wait for my yes. On grantee/split also
check credits_balance first.
- Sensitive domains refuse delegates. If a call answers
sensitive-domain-delegate-blocked, stop for that domain and report
it; the owner has to act themselves. Don't retry.
- Nothing about the share itself happens here. Inviting, accepting
and revoking access happen in the ird web panel —
grants_list is
read-only (CLI: ird grants). Never ask me for the owner's login.
- Destroy is irreversible.
vps_destroy works on delegated servers
and stops the owner's billing; only on my explicit say, one at a time.
Steps
A. Inventory. grants_list (CLI: ird grants) → per domain: owner,
scopes, payer, state. Then the four lists, keeping only entries with
delegated=true: dns_list_zones (CLI: ird dns list), list_tunnels
(ird tunnels list), ipfs_domains (ird ipfs domains ls), vps_list
(ird vps list) — the CLI marks them "shared with you". Show one table:
domain, owner, scopes, payer, what already exists there.
B. Plan per client. For each CLIENTS line, map the requests to
tools and check scope:
- DNS (
dns scope): dns_get_zone(domain) first, then
dns_set_record(domain, name, type, data, ttl) — name fully
qualified with a trailing dot, typed data, the call replaces the
whole name+type set (CLI: ird dns set <domain> <name> <type> <values>,
short label or @);
dns_delete_record for removals. Free.
- Tunnels (
tunnel scope): create_tunnel(hostname, ssh_public_key) —
the tunnel belongs to the owner and bills hourly per payer;
delete_tunnel(tunnel_id) stops it; tunnel_set_offline for the
offline page (a path pins content that bills hourly).
- IPFS (
ipfs scope): ipfs_domain_add — the attachment belongs to the
owner, may only link the owner's IPNS names, per-request charges
follow payer but gateway traffic always bills the owner;
ipfs_domain_pins_update(domain, add, remove) — pins must be the
owner's.
- Servers (
vps scope): vps_create(zone, subdomain, tier_id,
image_ref, ssh_key_ids) creates the server on the owner's account,
billed per payer (CLI: ird vps create --zone … --subdomain …);
vps_power and vps_destroy on delegated servers.
Anything outside a scope, or outside the API (accepting shares,
registrations, renewals), goes in the report as "needs the owner".
C. Show the plan, wait. One numbered list: client, action, tool
call, bills whom (from payer), monthly cost for hourly items
(credits_prices rate × 730; tier rate from vps_tiers).
D. Apply approved items only, one at a time, each followed by the
read that proves it: dns_get_zone shows the record; list_tunnels
shows the tunnel active (or pending-dns — then say what's missing);
vps_list shows the server with delegated=true.
E. Monthly report. With the CLI, ird credits ledger --limit 200
--kind charge lists my account's charges; keep REPORT_MONTH's entries.
The ledger does not label shares: which entries are a grantee share
or my half of a split is inferred — match by resource and date; say
so. Charges booked to an owner's account are not in my ledger
(inferred, not documented): derive them from the plan (rate × hours
since creation) and mark them "estimated, on owner's credits".
Deliverable
Per client: domain, owner, scopes, payer, actions done with the proving
read, actions refused (scope, sensitive, or owner-only) and why. Then
the REPORT_MONTH table: action, date, resource, billed to (owner /
MY_ACCOUNT_LABEL / split), credits (ledger or estimated),
and a total per payer.