greprag 5.40.1 → 5.41.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -114,8 +114,15 @@ const EMAIL_HELP = `greprag email — the agent's real mailbox: drain inbound, s
114
114
 
115
115
  greprag email List pending front-desk email (envelope only).
116
116
  greprag email pending Same — explicit list.
117
+ [--box <addr|domain|default>] Only one mailbox: a full address matches
118
+ exactly, a bare domain matches every box
119
+ on it, "default" = your greprag.com box
120
+ (incl. mail from before mailboxes).
121
+ greprag email boxes List your mailboxes with pending counts.
122
+ greprag email domains List your custom domains + verified status.
117
123
  greprag email pull --id <record> Pull ONE record's attachments to disk.
118
124
  greprag email pull --all-pending Pull EVERY pending record's attachments.
125
+ [--box <addr|domain|default>] Drain only one mailbox (with --all-pending).
119
126
  [--to <dir>] Save directory. Default resolution:
120
127
  --to > $GREPRAG_EMAIL_DIR > per-project
121
128
  anchor (email_dir) > ~/.greprag/email/<project>
@@ -126,6 +133,8 @@ const EMAIL_HELP = `greprag email — the agent's real mailbox: drain inbound, s
126
133
  [--attach <path>] Attach a local file (repeatable).
127
134
  [--cc <addr>] [--bcc <addr>] Extra recipients (repeatable / comma-sep).
128
135
  [--reply-to <addr>] Reply-To header.
136
+ [--from-name "<name>"] Display name on the From ("Travis Steward").
137
+ Falls back to the domain default.
129
138
  [--from <handle>] Send AS one of YOUR OWN greprag handles
130
139
  (default: your tenant's address). The
131
140
  server rejects any address that isn't
@@ -133,6 +142,12 @@ const EMAIL_HELP = `greprag email — the agent's real mailbox: drain inbound, s
133
142
  Send a real email FROM your travis@greprag.com address TO any recipient.
134
143
  --body-file - reads the body from stdin.
135
144
 
145
+ greprag email domain add <domain> Register a custom sending domain;
146
+ prints the DNS records to set.
147
+ greprag email domain verify <domain> Check the records are live; flips the
148
+ domain verified when all resolve.
149
+ greprag email domain remove <domain> Release the domain.
150
+
136
151
  Attachments (pull) are saved as <subject-slug>-<index>.<ext>. Re-pulls are
137
152
  idempotent. Tier-3 junk images triage dropped are not fetchable.
138
153
 
@@ -150,8 +165,18 @@ async function runEmail(args) {
150
165
  console.error('Not configured. Run: greprag init');
151
166
  process.exit(1);
152
167
  }
153
- if (!sub || sub === 'pending') {
154
- await listPending(cfg);
168
+ // Bare `greprag email --box x` is the pending list too — flags imply it.
169
+ if (!sub || sub === 'pending' || sub.startsWith('--')) {
170
+ const rest = sub === 'pending' ? args.slice(1) : args;
171
+ await listPending(cfg, getFlag(rest, '--box') || null);
172
+ return;
173
+ }
174
+ if (sub === 'boxes') {
175
+ await listBoxes(cfg);
176
+ return;
177
+ }
178
+ if (sub === 'domains') {
179
+ await listDomains(cfg);
155
180
  return;
156
181
  }
157
182
  if (sub === 'pull') {
@@ -162,16 +187,25 @@ async function runEmail(args) {
162
187
  await runSend(args.slice(1), cfg);
163
188
  return;
164
189
  }
190
+ if (sub === 'domain') {
191
+ await runDomain(args.slice(1), cfg);
192
+ return;
193
+ }
165
194
  console.error(`Unknown "email ${sub}". Run \`greprag email --help\`.`);
166
195
  process.exit(1);
167
196
  }
168
- async function listPending(cfg) {
169
- const pending = await (0, email_pull_1.fetchPending)(cfg.apiUrl, cfg.apiKey);
197
+ async function listPending(cfg, box) {
198
+ const pending = await (0, email_pull_1.fetchPending)(cfg.apiUrl, cfg.apiKey, 50, box);
170
199
  if (pending.length === 0) {
171
- console.log('No pending email.');
200
+ console.log(box ? `No pending email in box "${box}".` : 'No pending email.');
172
201
  return;
173
202
  }
174
- console.log(`${pending.length} pending email message(s):\n`);
203
+ // Show the mailbox column only when it disambiguates — more than one
204
+ // distinct box in the listing (legacy NULL counts as its own).
205
+ const distinctBoxes = new Set(pending.map(p => p.mailbox || '(default)'));
206
+ const showBox = distinctBoxes.size > 1;
207
+ const scope = box ? ` in box "${box}"` : '';
208
+ console.log(`${pending.length} pending email message(s)${scope}:\n`);
175
209
  for (const p of pending) {
176
210
  const from = p.from || '(unknown sender)';
177
211
  const subject = p.subject || '(no subject)';
@@ -179,18 +213,50 @@ async function listPending(cfg) {
179
213
  ? ` · ${p.attachment_count} attachment${p.attachment_count === 1 ? '' : 's'}`
180
214
  : '';
181
215
  const verdict = p.trust_verdict ? ` · trust: ${p.trust_verdict}` : '';
216
+ const boxCol = showBox ? ` · box: ${p.mailbox || '(default)'}` : '';
182
217
  const date = new Date(p.created_at).toLocaleString();
183
218
  console.log(`[${from}] ${date} ${p.id.slice(0, 8)}`);
184
- console.log(` "${subject}"${att}${verdict}`);
219
+ console.log(` "${subject}"${att}${verdict}${boxCol}`);
185
220
  }
186
221
  console.log(`\nPull attachments: greprag email pull --all-pending (or --id <record>)`);
187
222
  }
223
+ async function listBoxes(cfg) {
224
+ const boxes = await (0, email_pull_1.fetchBoxes)(cfg.apiUrl, cfg.apiKey);
225
+ if (boxes.length === 0) {
226
+ console.log('No pending email in any mailbox.');
227
+ return;
228
+ }
229
+ console.log(`${boxes.length} mailbox(es) with pending email:\n`);
230
+ for (const b of boxes) {
231
+ const def = b.is_default ? ' · default' : '';
232
+ console.log(` ${b.mailbox} ${b.pending} pending${def}`);
233
+ }
234
+ console.log(`\nRead one box: greprag email pending --box <addr|domain|default>`);
235
+ }
236
+ async function listDomains(cfg) {
237
+ const domains = await (0, email_pull_1.fetchDomains)(cfg.apiUrl, cfg.apiKey);
238
+ if (domains.length === 0) {
239
+ console.log('No custom domains registered.');
240
+ return;
241
+ }
242
+ console.log(`${domains.length} custom domain(s):\n`);
243
+ for (const d of domains) {
244
+ const status = d.verified ? 'verified' : 'pending verification';
245
+ const fwd = d.forward_to ? ` · mirrors to ${d.forward_to}` : '';
246
+ console.log(` ${d.domain} · ${status}${fwd}`);
247
+ }
248
+ }
188
249
  async function runPull(args, cfg) {
189
250
  const id = getFlag(args, '--id');
190
251
  const allPending = args.includes('--all-pending');
191
252
  const quiet = args.includes('--quiet');
253
+ const box = getFlag(args, '--box') || null;
192
254
  if (!id && !allPending) {
193
- console.error('Usage: greprag email pull (--id <record> | --all-pending) [--to <dir>] [--quiet]');
255
+ console.error('Usage: greprag email pull (--id <record> | --all-pending) [--box <addr|domain|default>] [--to <dir>] [--quiet]');
256
+ process.exit(1);
257
+ }
258
+ if (box && !allPending) {
259
+ console.error('--box composes with --all-pending (a single --id record is already one mailbox).');
194
260
  process.exit(1);
195
261
  }
196
262
  const anchor = (0, project_anchor_1.readAnchor)(process.cwd());
@@ -203,7 +269,7 @@ async function runPull(args, cfg) {
203
269
  let saved;
204
270
  let recordCount;
205
271
  if (allPending) {
206
- const r = await (0, email_pull_1.pullAllPending)(cfg.apiUrl, cfg.apiKey, dir);
272
+ const r = await (0, email_pull_1.pullAllPending)(cfg.apiUrl, cfg.apiKey, dir, box);
207
273
  saved = r.saved;
208
274
  recordCount = r.records;
209
275
  }
@@ -283,6 +349,7 @@ async function runSend(args, cfg) {
283
349
  bcc: getAll(args, '--bcc'),
284
350
  replyTo: getFlag(args, '--reply-to') || null,
285
351
  from: getFlag(args, '--from') || null,
352
+ fromName: getFlag(args, '--from-name') || null,
286
353
  attachPaths,
287
354
  };
288
355
  let payload;
@@ -307,4 +374,86 @@ async function runSend(args, cfg) {
307
374
  process.exit(1);
308
375
  }
309
376
  }
377
+ async function domainApi(cfg, method, path, body) {
378
+ const res = await fetch(`${cfg.apiUrl}${path}`, {
379
+ method,
380
+ headers: {
381
+ Authorization: `Bearer ${cfg.apiKey}`,
382
+ ...(body ? { 'Content-Type': 'application/json' } : {}),
383
+ },
384
+ body: body ? JSON.stringify(body) : undefined,
385
+ });
386
+ let json = {};
387
+ try {
388
+ json = await res.json();
389
+ }
390
+ catch { /* non-JSON error body */ }
391
+ return { status: res.status, json };
392
+ }
393
+ /** Print DNS records as an aligned type / name / value table. */
394
+ function printRecordsTable(records) {
395
+ const rows = [
396
+ ['TYPE', 'NAME', 'VALUE'],
397
+ ...records.map(r => [r.type, r.name, r.value]),
398
+ ];
399
+ const w0 = Math.max(...rows.map(r => r[0].length));
400
+ const w1 = Math.max(...rows.map(r => r[1].length));
401
+ for (const [t, n, v] of rows) {
402
+ console.log(` ${t.padEnd(w0)} ${n.padEnd(w1)} ${v}`);
403
+ }
404
+ }
405
+ async function runDomain(args, cfg) {
406
+ const verb = args[0];
407
+ const domain = args[1];
408
+ if (!verb || ['--help', '-h', 'help'].includes(verb)) {
409
+ console.log(EMAIL_HELP);
410
+ return;
411
+ }
412
+ if (!domain) {
413
+ console.error(`Usage: greprag email domain <add|verify|remove> <domain>`);
414
+ process.exit(1);
415
+ }
416
+ if (verb === 'add') {
417
+ const { status, json } = await domainApi(cfg, 'POST', '/v1/email/domains', { domain });
418
+ if (status === 200 || status === 201) {
419
+ const records = json.records || [];
420
+ console.log(json.existing
421
+ ? `${domain} is already registered to you (verified: ${json.verified ? 'yes' : 'no'}).`
422
+ : `Registered ${domain}. Add these DNS records at your DNS host:`);
423
+ if (records.length > 0)
424
+ printRecordsTable(records);
425
+ console.log(`\nThen run: greprag email domain verify ${domain}`);
426
+ return;
427
+ }
428
+ console.error(`Add failed (${status}): ${json.error || 'unknown error'}`);
429
+ process.exit(1);
430
+ }
431
+ if (verb === 'verify') {
432
+ const { status, json } = await domainApi(cfg, 'POST', `/v1/email/domains/${encodeURIComponent(domain)}/verify`);
433
+ if (status === 200 && json.verified) {
434
+ console.log(`${domain} is verified. Send with: greprag email send --from <you>@${domain} ...`);
435
+ return;
436
+ }
437
+ if (status === 200) {
438
+ const missing = json.missing || [];
439
+ console.log(`${domain} is NOT verified yet — ${missing.length} record(s) not live:`);
440
+ printRecordsTable(missing);
441
+ console.log(`\nDNS can take a while to propagate; re-run verify after it settles.`);
442
+ return;
443
+ }
444
+ console.error(`Verify failed (${status}): ${json.error || 'unknown error'}`);
445
+ process.exit(1);
446
+ }
447
+ if (verb === 'remove') {
448
+ const { status, json } = await domainApi(cfg, 'DELETE', `/v1/email/domains/${encodeURIComponent(domain)}`);
449
+ if (status === 200) {
450
+ console.log(`Released ${domain}.`);
451
+ return;
452
+ }
453
+ console.error(`Remove failed (${status}): ${json.error || 'unknown error'}`);
454
+ process.exit(1);
455
+ }
456
+ console.error(`Unknown "email domain ${verb}". Use add | verify | remove.`);
457
+ process.exit(1);
458
+ }
310
459
  //# sourceMappingURL=email.js.map
@@ -1 +1 @@
1
- {"version":3,"file":"email.js","sourceRoot":"","sources":["../../src/commands/email.ts"],"names":[],"mappings":";AAAA;;;;;;;;;;;;;;;GAeG;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AA+FH,4BA4BC;AAzHD,uCAAyB;AACzB,2CAA6B;AAC7B,sDAA+C;AAC/C,8CAGuB;AACvB,8CAEuB;AAEvB,MAAM,eAAe,GAAG,yBAAyB,CAAC;AAElD,SAAS,WAAW,CAAC,QAAgB;IACnC,IAAI,CAAC;QACH,MAAM,OAAO,GAAG,EAAE,CAAC,YAAY,CAAC,QAAQ,EAAE,OAAO,CAAC,CAAC;QACnD,KAAK,MAAM,IAAI,IAAI,OAAO,CAAC,KAAK,CAAC,IAAI,CAAC,EAAE,CAAC;YACvC,MAAM,OAAO,GAAG,IAAI,CAAC,IAAI,EAAE,CAAC;YAC5B,IAAI,CAAC,OAAO,IAAI,OAAO,CAAC,UAAU,CAAC,GAAG,CAAC;gBAAE,SAAS;YAClD,MAAM,KAAK,GAAG,OAAO,CAAC,OAAO,CAAC,GAAG,CAAC,CAAC;YACnC,IAAI,KAAK,GAAG,CAAC;gBAAE,SAAS;YACxB,MAAM,GAAG,GAAG,OAAO,CAAC,KAAK,CAAC,CAAC,EAAE,KAAK,CAAC,CAAC,IAAI,EAAE,CAAC;YAC3C,IAAI,KAAK,GAAG,OAAO,CAAC,KAAK,CAAC,KAAK,GAAG,CAAC,CAAC,CAAC,IAAI,EAAE,CAAC;YAC5C,IAAI,CAAC,KAAK,CAAC,UAAU,CAAC,GAAG,CAAC,IAAI,KAAK,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC;gBAC9C,CAAC,KAAK,CAAC,UAAU,CAAC,GAAG,CAAC,IAAI,KAAK,CAAC,QAAQ,CAAC,GAAG,CAAC,CAAC,EAAE,CAAC;gBACnD,KAAK,GAAG,KAAK,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC;YAC7B,CAAC;YACD,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC;gBAAE,OAAO,CAAC,GAAG,CAAC,GAAG,CAAC,GAAG,KAAK,CAAC;QAClD,CAAC;IACH,CAAC;IAAC,MAAM,CAAC,CAAC,yBAAyB,CAAC,CAAC;AACvC,CAAC;AAED,SAAS,SAAS;IAChB,MAAM,OAAO,GAAG,OAAO,CAAC,GAAG,CAAC,IAAI,IAAI,OAAO,CAAC,GAAG,CAAC,WAAW,IAAI,EAAE,CAAC;IAClE,IAAI,OAAO;QAAE,WAAW,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,EAAE,UAAU,EAAE,MAAM,CAAC,CAAC,CAAC;IACjE,IAAI,CAAC,OAAO,CAAC,GAAG,CAAC,eAAe;QAAE,WAAW,CAAC,IAAI,CAAC,IAAI,CAAC,OAAO,CAAC,GAAG,EAAE,EAAE,MAAM,CAAC,CAAC,CAAC;IAChF,OAAO;QACL,MAAM,EAAE,OAAO,CAAC,GAAG,CAAC,eAAe,IAAI,eAAe;QACtD,MAAM,EAAE,OAAO,CAAC,GAAG,CAAC,eAAe,IAAI,EAAE;KAC1C,CAAC;AACJ,CAAC;AAED,SAAS,OAAO,CAAC,IAAc,EAAE,IAAY;IAC3C,MAAM,GAAG,GAAG,IAAI,CAAC,OAAO,CAAC,IAAI,CAAC,CAAC;IAC/B,IAAI,GAAG,KAAK,CAAC,CAAC,IAAI,GAAG,GAAG,CAAC,IAAI,IAAI,CAAC,MAAM;QAAE,OAAO,SAAS,CAAC;IAC3D,OAAO,IAAI,CAAC,GAAG,GAAG,CAAC,CAAC,CAAC;AACvB,CAAC;AAED;gEACgE;AAChE,SAAS,MAAM,CAAC,IAAc,EAAE,IAAY;IAC1C,MAAM,GAAG,GAAa,EAAE,CAAC;IACzB,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;QACrC,IAAI,IAAI,CAAC,CAAC,CAAC,KAAK,IAAI,IAAI,CAAC,GAAG,CAAC,GAAG,IAAI,CAAC,MAAM,EAAE,CAAC;YAC5C,KAAK,MAAM,IAAI,IAAI,IAAI,CAAC,CAAC,GAAG,CAAC,CAAC,CAAC,KAAK,CAAC,GAAG,CAAC,EAAE,CAAC;gBAC1C,MAAM,CAAC,GAAG,IAAI,CAAC,IAAI,EAAE,CAAC;gBACtB,IAAI,CAAC;oBAAE,GAAG,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;YACrB,CAAC;QACH,CAAC;IACH,CAAC;IACD,OAAO,GAAG,CAAC;AACb,CAAC;AAED,MAAM,UAAU,GAAG;;;;;;;;;;;;;;;;;;;;;;;;;;;iFA2B8D,CAAC;AAElF,mCAAmC;AAC5B,KAAK,UAAU,QAAQ,CAAC,IAAc;IAC3C,MAAM,GAAG,GAAG,IAAI,CAAC,CAAC,CAAC,CAAC;IAEpB,IAAI,GAAG,KAAK,QAAQ,IAAI,GAAG,KAAK,IAAI,IAAI,GAAG,KAAK,MAAM,EAAE,CAAC;QACvD,OAAO,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC;QACxB,OAAO;IACT,CAAC;IAED,MAAM,GAAG,GAAG,SAAS,EAAE,CAAC;IACxB,IAAI,CAAC,GAAG,CAAC,MAAM,EAAE,CAAC;QAAC,OAAO,CAAC,KAAK,CAAC,mCAAmC,CAAC,CAAC;QAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAAC,CAAC;IAEzF,IAAI,CAAC,GAAG,IAAI,GAAG,KAAK,SAAS,EAAE,CAAC;QAC9B,MAAM,WAAW,CAAC,GAAG,CAAC,CAAC;QACvB,OAAO;IACT,CAAC;IAED,IAAI,GAAG,KAAK,MAAM,EAAE,CAAC;QACnB,MAAM,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC;QAClC,OAAO;IACT,CAAC;IAED,IAAI,GAAG,KAAK,MAAM,EAAE,CAAC;QACnB,MAAM,OAAO,CAAC,IAAI,CAAC,KAAK,CAAC,CAAC,CAAC,EAAE,GAAG,CAAC,CAAC;QAClC,OAAO;IACT,CAAC;IAED,OAAO,CAAC,KAAK,CAAC,kBAAkB,GAAG,kCAAkC,CAAC,CAAC;IACvE,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;AAClB,CAAC;AAED,KAAK,UAAU,WAAW,CAAC,GAAuC;IAChE,MAAM,OAAO,GAAG,MAAM,IAAA,yBAAY,EAAC,GAAG,CAAC,MAAM,EAAE,GAAG,CAAC,MAAM,CAAC,CAAC;IAC3D,IAAI,OAAO,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACzB,OAAO,CAAC,GAAG,CAAC,mBAAmB,CAAC,CAAC;QACjC,OAAO;IACT,CAAC;IACD,OAAO,CAAC,GAAG,CAAC,GAAG,OAAO,CAAC,MAAM,8BAA8B,CAAC,CAAC;IAC7D,KAAK,MAAM,CAAC,IAAI,OAAO,EAAE,CAAC;QACxB,MAAM,IAAI,GAAG,CAAC,CAAC,IAAI,IAAI,kBAAkB,CAAC;QAC1C,MAAM,OAAO,GAAG,CAAC,CAAC,OAAO,IAAI,cAAc,CAAC;QAC5C,MAAM,GAAG,GAAG,CAAC,CAAC,gBAAgB,GAAG,CAAC;YAChC,CAAC,CAAC,OAAO,CAAC,CAAC,gBAAgB,cAAc,CAAC,CAAC,gBAAgB,KAAK,CAAC,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,GAAG,EAAE;YAC9E,CAAC,CAAC,EAAE,CAAC;QACP,MAAM,OAAO,GAAG,CAAC,CAAC,aAAa,CAAC,CAAC,CAAC,cAAc,CAAC,CAAC,aAAa,EAAE,CAAC,CAAC,CAAC,EAAE,CAAC;QACvE,MAAM,IAAI,GAAG,IAAI,IAAI,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,cAAc,EAAE,CAAC;QACrD,OAAO,CAAC,GAAG,CAAC,IAAI,IAAI,KAAK,IAAI,KAAK,CAAC,CAAC,EAAE,CAAC,KAAK,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE,CAAC,CAAC;QACtD,OAAO,CAAC,GAAG,CAAC,MAAM,OAAO,IAAI,GAAG,GAAG,OAAO,EAAE,CAAC,CAAC;IAChD,CAAC;IACD,OAAO,CAAC,GAAG,CAAC,2EAA2E,CAAC,CAAC;AAC3F,CAAC;AAED,KAAK,UAAU,OAAO,CAAC,IAAc,EAAE,GAAuC;IAC5E,MAAM,EAAE,GAAG,OAAO,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC;IACjC,MAAM,UAAU,GAAG,IAAI,CAAC,QAAQ,CAAC,eAAe,CAAC,CAAC;IAClD,MAAM,KAAK,GAAG,IAAI,CAAC,QAAQ,CAAC,SAAS,CAAC,CAAC;IAEvC,IAAI,CAAC,EAAE,IAAI,CAAC,UAAU,EAAE,CAAC;QACvB,OAAO,CAAC,KAAK,CAAC,kFAAkF,CAAC,CAAC;QAClG,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;IAED,MAAM,MAAM,GAAG,IAAA,2BAAU,EAAC,OAAO,CAAC,GAAG,EAAE,CAAC,CAAC;IACzC,MAAM,GAAG,GAAG,IAAA,4BAAe,EAAC;QAC1B,QAAQ,EAAE,OAAO,CAAC,IAAI,EAAE,MAAM,CAAC;QAC/B,GAAG,EAAE,OAAO,CAAC,GAAG,CAAC,iBAAiB;QAClC,SAAS,EAAE,MAAM,CAAC,QAAQ;QAC1B,WAAW,EAAE,MAAM,CAAC,WAAW;KAChC,CAAC,CAAC;IAEH,IAAI,KAAkB,CAAC;IACvB,IAAI,WAAmB,CAAC;IACxB,IAAI,UAAU,EAAE,CAAC;QACf,MAAM,CAAC,GAAG,MAAM,IAAA,2BAAc,EAAC,GAAG,CAAC,MAAM,EAAE,GAAG,CAAC,MAAM,EAAE,GAAG,CAAC,CAAC;QAC5D,KAAK,GAAG,CAAC,CAAC,KAAK,CAAC;QAChB,WAAW,GAAG,CAAC,CAAC,OAAO,CAAC;IAC1B,CAAC;SAAM,CAAC;QACN,KAAK,GAAG,MAAM,IAAA,uBAAU,EAAC,GAAG,CAAC,MAAM,EAAE,GAAG,CAAC,MAAM,EAAE,EAAG,EAAE,GAAG,CAAC,CAAC;QAC3D,WAAW,GAAG,CAAC,CAAC;IAClB,CAAC;IAED,MAAM,KAAK,GAAG,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC;IAC5C,MAAM,OAAO,GAAG,KAAK,CAAC,MAAM,CAAC,CAAC,CAAC,EAAE,CAAC,CAAC,CAAC,OAAO,CAAC,CAAC;IAE7C,IAAI,CAAC,KAAK,EAAE,CAAC;QACX,KAAK,MAAM,CAAC,IAAI,KAAK;YAAE,OAAO,CAAC,GAAG,CAAC,YAAY,CAAC,CAAC,IAAI,MAAM,CAAC,CAAC,KAAK,SAAS,CAAC,CAAC;QAC7E,KAAK,MAAM,CAAC,IAAI,OAAO;YAAE,OAAO,CAAC,GAAG,CAAC,YAAY,CAAC,CAAC,IAAI,mBAAmB,CAAC,CAAC;IAC9E,CAAC;IAED,IAAI,KAAK,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACvB,OAAO,CAAC,GAAG,CAAC,UAAU;YACpB,CAAC,CAAC,mCAAmC,WAAW,qBAAqB;YACrE,CAAC,CAAC,0CAA0C,CAAC,CAAC;QAChD,OAAO;IACT,CAAC;IACD,OAAO,CAAC,GAAG,CAAC,WAAW,KAAK,CAAC,MAAM,SAAS,OAAO,CAAC,MAAM,sBAAsB,GAAG,EAAE,CAAC,CAAC;AACzF,CAAC;AAED,wEAAwE;AACxE,KAAK,UAAU,OAAO,CAAC,IAAc,EAAE,GAAuC;IAC5E,IAAI,IAAI,CAAC,QAAQ,CAAC,QAAQ,CAAC,IAAI,IAAI,CAAC,QAAQ,CAAC,IAAI,CAAC,EAAE,CAAC;QAAC,OAAO,CAAC,GAAG,CAAC,UAAU,CAAC,CAAC;QAAC,OAAO;IAAC,CAAC;IAExF,MAAM,EAAE,GAAG,MAAM,CAAC,IAAI,EAAE,MAAM,CAAC,CAAC;IAChC,IAAI,EAAE,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACpB,OAAO,CAAC,KAAK,CAAC,0FAA0F,CAAC,CAAC;QAC1G,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;IAED,8EAA8E;IAC9E,6CAA6C;IAC7C,MAAM,UAAU,GAAG,OAAO,CAAC,IAAI,EAAE,QAAQ,CAAC,CAAC;IAC3C,MAAM,QAAQ,GAAG,OAAO,CAAC,IAAI,EAAE,aAAa,CAAC,CAAC;IAC9C,MAAM,QAAQ,GAAG,OAAO,CAAC,IAAI,EAAE,aAAa,CAAC,CAAC;IAE9C,IAAI,QAAQ,GAAkB,UAAU,IAAI,IAAI,CAAC;IACjD,IAAI,QAAQ,IAAI,IAAI,IAAI,QAAQ,EAAE,CAAC;QACjC,IAAI,CAAC;YAAC,QAAQ,GAAG,IAAA,2BAAc,EAAC,QAAQ,CAAC,CAAC;QAAC,CAAC;QAC5C,OAAO,CAAC,EAAE,CAAC;YAAC,OAAO,CAAC,KAAK,CAAC,2BAA2B,QAAQ,KAAM,CAAW,CAAC,OAAO,EAAE,CAAC,CAAC;YAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAAC,CAAC;IAC/G,CAAC;IACD,IAAI,QAAQ,GAAkB,IAAI,CAAC;IACnC,IAAI,QAAQ,EAAE,CAAC;QACb,IAAI,CAAC;YAAC,QAAQ,GAAG,IAAA,2BAAc,EAAC,QAAQ,CAAC,CAAC;QAAC,CAAC;QAC5C,OAAO,CAAC,EAAE,CAAC;YAAC,OAAO,CAAC,KAAK,CAAC,2BAA2B,QAAQ,KAAM,CAAW,CAAC,OAAO,EAAE,CAAC,CAAC;YAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAAC,CAAC;IAC/G,CAAC;IACD,IAAI,CAAC,QAAQ,IAAI,CAAC,QAAQ,EAAE,CAAC;QAC3B,OAAO,CAAC,KAAK,CAAC,kFAAkF,CAAC,CAAC;QAClG,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;IAED,MAAM,WAAW,GAAG,MAAM,CAAC,IAAI,EAAE,UAAU,CAAC,CAAC;IAC7C,KAAK,MAAM,CAAC,IAAI,WAAW,EAAE,CAAC;QAC5B,IAAI,CAAC,EAAE,CAAC,UAAU,CAAC,CAAC,CAAC,EAAE,CAAC;YAAC,OAAO,CAAC,KAAK,CAAC,4BAA4B,CAAC,EAAE,CAAC,CAAC;YAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;QAAC,CAAC;IAC7F,CAAC;IAED,MAAM,IAAI,GAAgB;QACxB,EAAE;QACF,OAAO,EAAE,OAAO,CAAC,IAAI,EAAE,WAAW,CAAC,IAAI,EAAE;QACzC,QAAQ;QACR,QAAQ;QACR,EAAE,EAAE,MAAM,CAAC,IAAI,EAAE,MAAM,CAAC;QACxB,GAAG,EAAE,MAAM,CAAC,IAAI,EAAE,OAAO,CAAC;QAC1B,OAAO,EAAE,OAAO,CAAC,IAAI,EAAE,YAAY,CAAC,IAAI,IAAI;QAC5C,IAAI,EAAE,OAAO,CAAC,IAAI,EAAE,QAAQ,CAAC,IAAI,IAAI;QACrC,WAAW;KACZ,CAAC;IAEF,IAAI,OAAO,CAAC;IACZ,IAAI,CAAC;QAAC,OAAO,GAAG,IAAA,6BAAgB,EAAC,IAAI,CAAC,CAAC;IAAC,CAAC;IACzC,OAAO,CAAC,EAAE,CAAC;QAAC,OAAO,CAAC,KAAK,CAAC,4BAA6B,CAAW,CAAC,OAAO,EAAE,CAAC,CAAC;QAAC,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAAC,CAAC;IAEjG,IAAI,CAAC;QACH,MAAM,MAAM,GAAG,MAAM,IAAA,qBAAQ,EAAC,GAAG,CAAC,MAAM,EAAE,GAAG,CAAC,MAAM,EAAE,OAAO,CAAC,CAAC;QAC/D,MAAM,IAAI,GAAG,MAAM,CAAC,WAAW,CAAC,CAAC,CAAC,KAAK,MAAM,CAAC,WAAW,gBAAgB,CAAC,CAAC,CAAC,EAAE,CAAC;QAC/E,OAAO,CAAC,GAAG,CAAC,aAAa,MAAM,CAAC,IAAI,MAAM,CAAC,MAAM,CAAC,EAAE,IAAI,EAAE,CAAC,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,IAAI,EAAE,CAAC,CAAC;QACjF,IAAI,MAAM,CAAC,UAAU;YAAE,OAAO,CAAC,GAAG,CAAC,iBAAiB,MAAM,CAAC,UAAU,EAAE,CAAC,CAAC;QACzE,IAAI,MAAM,CAAC,UAAU;YAAE,OAAO,CAAC,GAAG,CAAC,mBAAmB,MAAM,CAAC,UAAU,EAAE,CAAC,CAAC;IAC7E,CAAC;IAAC,OAAO,CAAC,EAAE,CAAC;QACX,OAAO,CAAC,KAAK,CAAC,gBAAiB,CAAW,CAAC,OAAO,EAAE,CAAC,CAAC;QACtD,OAAO,CAAC,IAAI,CAAC,CAAC,CAAC,CAAC;IAClB,CAAC;AACH,CAAC"}
1
+ {"version":3,"file":"email.js","sourceRoot":"","sources":["../../src/commands/email.ts"],"names":[],"mappings":"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"}
@@ -40,6 +40,9 @@ export interface PendingRow {
40
40
  subject: string | null;
41
41
  trust_verdict: string | null;
42
42
  attachment_count: number;
43
+ /** The address this mail arrived on (custom-domain mailboxes). NULL on
44
+ * legacy rows that predate the stamp — the tenant's default box. */
45
+ mailbox: string | null;
43
46
  created_at: string;
44
47
  }
45
48
  /** One attachment's outcome from a pull. `skipped` = already on disk. */
@@ -68,14 +71,33 @@ export declare function resolveEmailDir(opts: {
68
71
  anchorDir?: string | null;
69
72
  projectName?: string | null;
70
73
  }): string;
71
- export declare function fetchPending(apiUrl: string, apiKey: string, limit?: number): Promise<PendingRow[]>;
74
+ /** Build the /pending URL pure, exported for unit tests. `box` narrows to
75
+ * one mailbox (address), a whole domain, or the literal `default`. */
76
+ export declare function pendingUrl(apiUrl: string, limit: number, box?: string | null): string;
77
+ export declare function fetchPending(apiUrl: string, apiKey: string, limit?: number, box?: string | null): Promise<PendingRow[]>;
78
+ export interface BoxRow {
79
+ mailbox: string;
80
+ pending: number;
81
+ is_default: boolean;
82
+ }
83
+ /** GET /v1/email/boxes — distinct mailboxes with pending counts. */
84
+ export declare function fetchBoxes(apiUrl: string, apiKey: string): Promise<BoxRow[]>;
85
+ export interface DomainRow {
86
+ domain: string;
87
+ verified: boolean;
88
+ forward_to: string | null;
89
+ created_at: string;
90
+ }
91
+ /** GET /v1/email/domains — the tenant's custom domains + verified status. */
92
+ export declare function fetchDomains(apiUrl: string, apiKey: string): Promise<DomainRow[]>;
72
93
  export declare function fetchManifest(apiUrl: string, apiKey: string, recordId: string): Promise<RecordManifest>;
73
94
  /** Pull one record's attachments into `dir`. Idempotent: already-saved
74
95
  * attachments are reported `skipped`, never re-downloaded. Non-downloadable
75
96
  * (dropped / no original) attachments are omitted from the result. */
76
97
  export declare function pullRecord(apiUrl: string, apiKey: string, recordId: string, dir: string): Promise<SavedFile[]>;
77
- /** Pull every pending record that carries attachments. */
78
- export declare function pullAllPending(apiUrl: string, apiKey: string, dir: string): Promise<{
98
+ /** Pull every pending record that carries attachments — optionally only one
99
+ * mailbox/domain (`box`, same grammar as fetchPending). */
100
+ export declare function pullAllPending(apiUrl: string, apiKey: string, dir: string, box?: string | null): Promise<{
79
101
  records: number;
80
102
  saved: SavedFile[];
81
103
  }>;
@@ -50,7 +50,10 @@ exports.slugifySubject = slugifySubject;
50
50
  exports.attachmentFilename = attachmentFilename;
51
51
  exports.shouldPull = shouldPull;
52
52
  exports.resolveEmailDir = resolveEmailDir;
53
+ exports.pendingUrl = pendingUrl;
53
54
  exports.fetchPending = fetchPending;
55
+ exports.fetchBoxes = fetchBoxes;
56
+ exports.fetchDomains = fetchDomains;
54
57
  exports.fetchManifest = fetchManifest;
55
58
  exports.pullRecord = pullRecord;
56
59
  exports.pullAllPending = pullAllPending;
@@ -110,10 +113,26 @@ async function getJson(url, apiKey) {
110
113
  function base(apiUrl) {
111
114
  return apiUrl.replace(/\/+$/, '');
112
115
  }
113
- async function fetchPending(apiUrl, apiKey, limit = 50) {
114
- const data = await getJson(`${base(apiUrl)}/v1/email/pending?limit=${limit}`, apiKey);
116
+ /** Build the /pending URL — pure, exported for unit tests. `box` narrows to
117
+ * one mailbox (address), a whole domain, or the literal `default`. */
118
+ function pendingUrl(apiUrl, limit, box) {
119
+ const boxParam = box && box.trim() ? `&box=${encodeURIComponent(box.trim())}` : '';
120
+ return `${base(apiUrl)}/v1/email/pending?limit=${limit}${boxParam}`;
121
+ }
122
+ async function fetchPending(apiUrl, apiKey, limit = 50, box) {
123
+ const data = await getJson(pendingUrl(apiUrl, limit, box), apiKey);
115
124
  return data.pending || [];
116
125
  }
126
+ /** GET /v1/email/boxes — distinct mailboxes with pending counts. */
127
+ async function fetchBoxes(apiUrl, apiKey) {
128
+ const data = await getJson(`${base(apiUrl)}/v1/email/boxes`, apiKey);
129
+ return data.boxes || [];
130
+ }
131
+ /** GET /v1/email/domains — the tenant's custom domains + verified status. */
132
+ async function fetchDomains(apiUrl, apiKey) {
133
+ const data = await getJson(`${base(apiUrl)}/v1/email/domains`, apiKey);
134
+ return data.domains || [];
135
+ }
117
136
  async function fetchManifest(apiUrl, apiKey, recordId) {
118
137
  const data = await getJson(`${base(apiUrl)}/v1/email/${encodeURIComponent(recordId)}/manifest`, apiKey);
119
138
  return { id: data.id, subject: data.subject ?? null, attachments: data.attachments || [] };
@@ -176,9 +195,10 @@ async function pullRecord(apiUrl, apiKey, recordId, dir) {
176
195
  }
177
196
  return out;
178
197
  }
179
- /** Pull every pending record that carries attachments. */
180
- async function pullAllPending(apiUrl, apiKey, dir) {
181
- const pending = (await fetchPending(apiUrl, apiKey)).filter(r => r.attachment_count > 0);
198
+ /** Pull every pending record that carries attachments — optionally only one
199
+ * mailbox/domain (`box`, same grammar as fetchPending). */
200
+ async function pullAllPending(apiUrl, apiKey, dir, box) {
201
+ const pending = (await fetchPending(apiUrl, apiKey, 50, box)).filter(r => r.attachment_count > 0);
182
202
  const saved = [];
183
203
  for (const row of pending) {
184
204
  try {
@@ -1 +1 @@
1
- {"version":3,"file":"email-pull.js","sourceRoot":"","sources":["../src/email-pull.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"email-pull.js","sourceRoot":"","sources":["../src/email-pull.ts"],"names":[],"mappings":"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"}
@@ -25,6 +25,7 @@ export interface SendPayload {
25
25
  bcc?: string[];
26
26
  reply_to?: string;
27
27
  from?: string;
28
+ from_name?: string;
28
29
  attachments?: SendAttachmentInput[];
29
30
  }
30
31
  export interface SendOptions {
@@ -36,6 +37,9 @@ export interface SendOptions {
36
37
  bcc?: string[];
37
38
  replyTo?: string | null;
38
39
  from?: string | null;
40
+ /** Display name for the From header ("Travis Steward"). Overrides the
41
+ * domain default; null falls back to it server-side. */
42
+ fromName?: string | null;
39
43
  /** Local file paths to attach — read + base64'd by buildSendPayload. */
40
44
  attachPaths?: string[];
41
45
  }
@@ -98,6 +98,8 @@ function buildSendPayload(opts) {
98
98
  payload.reply_to = opts.replyTo;
99
99
  if (opts.from)
100
100
  payload.from = opts.from;
101
+ if (opts.fromName)
102
+ payload.from_name = opts.fromName;
101
103
  const atts = (opts.attachPaths || []).map(fileToAttachment);
102
104
  if (atts.length)
103
105
  payload.attachments = atts;
@@ -1 +1 @@
1
- {"version":3,"file":"email-send.js","sourceRoot":"","sources":["../src/email-send.ts"],"names":[],"mappings":"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"}
1
+ {"version":3,"file":"email-send.js","sourceRoot":"","sources":["../src/email-send.ts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "greprag",
3
- "version": "5.40.1",
3
+ "version": "5.41.0",
4
4
  "description": "GrepRAG — agent memory for Claude Code, Codex, and OpenCode.",
5
5
  "main": "dist/index.js",
6
6
  "bin": {
@@ -127,7 +127,7 @@ Aliases (silent back-compat): `greprag memory briefing` → `recap` (renamed v5.
127
127
 
128
128
  **ABOUT TO `greprag send` TO A `@gmail.com` / `@anthropic.com` / REAL EMAIL ADDRESS? STOP — for `inbox`/`send` (internal cross-session messaging), `users.email` IS NEVER A ROUTING ADDRESS.** Use the numeric handle (`1834729@greprag.com`) or claimed vanity alias (`travis@greprag.com`). If you don't know the recipient's handle, ASK — don't guess from their email. adr: adr/numeric-handles.md. Full grammar: `docs/inbox.md § address`.
129
129
 
130
- **BUT IF THE USER SAYS "EMAIL X" / "SEND A REAL EMAIL" — USE `greprag email send`, NOT `greprag send`.** `greprag email send --to <real-addr> --from <handle>@greprag.com --subject "s" (--body "t" | --body-file <f|->)` is the agent's REAL outbound SMTP mailbox — it delivers to actual inboxes (gmail, etc.), with `--attach`/`--cc`/`--bcc`/`--html-file`. `greprag send` is internal-only and never leaves greprag. The two read identically — this collision is a known trap. `email pending`/`email pull` drains inbound. Full reference: `docs/email.md`.
130
+ **BUT IF THE USER SAYS "EMAIL X" / "SEND A REAL EMAIL" — USE `greprag email send`, NOT `greprag send`.** `greprag email send --to <real-addr> --from <addr> --subject "s" (--body "t" | --body-file <f|->)` is the agent's REAL outbound SMTP mailbox — it delivers to actual inboxes (gmail, etc.), with `--attach`/`--cc`/`--bcc`/`--html-file`. `--from` accepts your greprag handle OR any address on a custom domain your tenant has verified (`greprag email domains`). `greprag send` is internal-only and never leaves greprag. The two read identically — this collision is a known trap. Inbound is SEGREGATED INTO MAILBOXES: `email boxes` lists them, `email pending --box <addr|domain|default>` reads one; reply FROM the box the mail arrived in. Attach a domain: `email domain add/verify`. Full reference: `docs/email.md`.
131
131
 
132
132
  ## Reference index
133
133
 
@@ -135,7 +135,7 @@ Aliases (silent back-compat): `greprag memory briefing` → `recap` (renamed v5.
135
135
  - `docs/platforms.md` — exact platform paths for Claude Code · Codex · OpenCode
136
136
  - `docs/per-project-flags.md` — flip `memory_capture` / `session_start_recap` / `inbox_notify`
137
137
  - `docs/inbox.md` — `greprag send`, `greprag inbox`, address grammar, retract (internal messaging)
138
- - `docs/email.md` — `greprag email send`/`pending`/`pull` — REAL outbound + inbound SMTP (distinct from `send`)
138
+ - `docs/email.md` — `greprag email send`/`pending`/`pull`/`boxes`/`domain` — REAL SMTP: send-as custom domains, segregated mailboxes (distinct from `send`)
139
139
  - `docs/inbox-watch.md` — SSE watcher patterns, liveness model, parent-side / post-send patterns
140
140
  - `docs/doctor.md` — `greprag doctor` (identity drift, orphan consolidation)
141
141
  - `docs/corpus.md` — upload + search arbitrary text (books, codebases, voice samples)
@@ -1,6 +1,6 @@
1
1
  # greprag email — the agent's real SMTP mailbox
2
2
 
3
- `greprag email` is **real outbound + inbound email** from your greprag address (e.g. `travis@greprag.com`). This is distinct from `greprag send` / `greprag inbox`, which is internal cross-session messaging that never leaves greprag.
3
+ `greprag email` is **real outbound + inbound email** from your greprag address (e.g. `travis@greprag.com`) — and, once attached, from **your own custom domain** (e.g. `travis@suppliersift.com`). This is distinct from `greprag send` / `greprag inbox`, which is internal cross-session messaging that never leaves greprag.
4
4
 
5
5
  **The trap:** "email me" and "send X" sound identical. Only `greprag email send` produces an actual email in a real inbox. `greprag send --to travis@greprag.com` lands on a greprag front desk, NOT in gmail.
6
6
 
@@ -14,7 +14,8 @@ greprag email send --to <real-addr> \
14
14
  ```
15
15
 
16
16
  Flags:
17
- - `--from <handle>@greprag.com` — send AS one of YOUR OWN greprag handles. The server rejects any address that isn't yours — you cannot forge a From. Defaults to your tenant address if omitted.
17
+ - `--from <addr>` — send AS one of YOUR OWN addresses: a greprag handle (`<handle>@greprag.com`) or **any local-part on a custom domain your tenant has verified** (`anyone@yourdomain.com`). The server rejects any address that isn't yours — you cannot forge a From. Defaults to your tenant address if omitted.
18
+ - `--from-name "<name>"` — display name on the From header (`Travis Steward <travis@suppliersift.com>`). A bare address reads as machine-sent; a name reads as a person. Falls back to the domain's default display name (set per custom domain) when omitted.
18
19
  - `--body-file <f>` — read body from a file; `--body-file -` reads from stdin (best for long/multiline bodies — avoids shell-quoting pain).
19
20
  - `--html-file <f>` — HTML alternative body.
20
21
  - `--attach <path>` — attach a local file (repeatable). Gmail's combined limit is 25 MB; larger → Drive link.
@@ -23,6 +24,8 @@ Flags:
23
24
 
24
25
  Returns a `message-id` and writes an egress audit `.eml` on success.
25
26
 
27
+ **Body rendering:** the body is plain text or lightweight markdown. When you don't pass `--html-file`, an HTML version is auto-rendered so the email shows real paragraph spacing (blank line = new paragraph, single newline = line break) plus `**bold**`, `*italic*`, `[text](url)`, and `-`/`1.` lists. Write the body the way it should read — blank lines BETWEEN paragraphs — and it renders correctly. Don't cram everything line-by-line.
28
+
26
29
  ### Long body via heredoc (the reliable pattern)
27
30
 
28
31
  ```bash
@@ -34,13 +37,34 @@ greprag email send --to someone@gmail.com --from travis@greprag.com \
34
37
  --subject "Subject" --body-file /tmp/body.txt
35
38
  ```
36
39
 
37
- ## Inbound
40
+ ## Inbound + mailboxes (segregated boxes, one front desk)
41
+
42
+ Every inbound email carries a **mailbox label** — the address it was FOR. Mail to your greprag handle and mail to each custom-domain address stay segregated as separate boxes you read independently. A box is a filter, not a separate inbox: trust gate, attachments, and pull all work identically in every box.
38
43
 
39
44
  - `greprag email` or `greprag email pending` — list pending front-desk email (envelope only).
45
+ - `greprag email boxes` — list mailboxes that have pending email, with counts.
46
+ - `greprag email pending --box <addr|domain|default>` — read ONE box (exact address, whole domain, or `default` for your greprag.com box).
40
47
  - `greprag email pull --id <record>` — pull ONE record's attachments to disk.
41
- - `greprag email pull --all-pending [--to <dir>]` — pull every pending record's attachments. Save dir resolves: `--to` > `$GREPRAG_EMAIL_DIR` > per-project anchor `email_dir` > `~/.greprag/email/<project>`.
48
+ - `greprag email pull --all-pending [--box <b>] [--to <dir>]` — pull pending attachments (optionally box-scoped). Save dir resolves: `--to` > `$GREPRAG_EMAIL_DIR` > per-project anchor `email_dir` > `~/.greprag/email/<project>`.
42
49
  - Auto-save: set `email_autosave=true` in `.greprag/project.json` (optionally `email_dir`) — the per-turn mail hook auto-pulls new attachments each turn.
43
50
 
51
+ **Reply discipline:** when replying to mail that arrived in a custom-domain box, send `--from` that same box address — the counterparty wrote to `you@yourdomain.com` and the reply should come from it, not your greprag handle.
52
+
53
+ ## Custom domains (send + receive as your own domain)
54
+
55
+ Attach a domain you own; once verified, you can send as ANY address on it and inbound mail to it lands in its own box.
56
+
57
+ ```
58
+ greprag email domain add <domain> → registers; prints the DNS records to set at your DNS host
59
+ greprag email domain verify <domain> → checks the records are live (DNS fact, not an assertion); flips the domain active
60
+ greprag email domain remove <domain> → releases it
61
+ greprag email domains → list your domains + verified status
62
+ ```
63
+
64
+ - A domain belongs to exactly ONE tenant — verification is what grants rights (send-as + box labels). A registered-but-unverified domain confers nothing.
65
+ - **Inbound ingress is forwarding-first:** at your email provider, forward `you@yourdomain.com` → your greprag address (`<handle>@greprag.com`). The worker recovers the original address from the message and stamps the box — only for domains you've verified, so labels can't be forged.
66
+ - Unverified/foreign domains in a forwarded To never block delivery — the mail still lands on your front desk, just without the custom box label.
67
+
44
68
  ## Sending rule
45
69
 
46
70
  Sending email is an outward-facing action — confirm with the user before sending unless they've explicitly asked for it in this turn. (Here they asked → send.)