- Quantum (new client log): pulled Sheila's email via Graph, posted Intermedia->M365 migration update (emailed), set #32323 In Progress - Root: /mailbox skill (ACG M365 read + gated send-as) built, verified, distributed (f8c00d3); autotask.md gitignored (b22de6c) - Tohono: #32328 -> Waiting on Customer Co-Authored-By: Claude Opus 4.7 (1M context) <noreply@anthropic.com>
This commit is contained in:
@@ -210,3 +210,47 @@ Switched gears to **Autotask** (Mike: "get creds from Autotask API text file in
|
||||
- Vault commit `99510c7` (Autotask creds).
|
||||
- Coord: Howard msgs sent `4d1feeeb` (Phase 2 deployed); todos `9a1ed577` (done), `06c16144` (SSE), `54239760`/`58c3fcad`/`fd677411` (Phases 3-5).
|
||||
- `/autotask` skill: `.claude/commands/autotask.md` (local). Memory: `feedback_psa_default_syncro.md`.
|
||||
|
||||
---
|
||||
|
||||
## Update: 11:04 PT — /mailbox skill (ACG M365 read + gated send-as)
|
||||
|
||||
### Session Summary
|
||||
|
||||
Built a new `/mailbox` command (`.claude/commands/mailbox.md`) for reading and sending ACG's own M365 mail. Discovered while pulling a client email (Quantum/Sheila — see `clients/quantumwms/`) that the existing **Claude-MSP-Access Graph app (`fabb3421`)** can read ACG's own mailboxes: a `client_credentials` token against the **azcomputerguru.com** tenant + `GET /users/<mbx>/messages` works (the app holds tenant-wide Mail.ReadWrite + Mail.Send). Codified that into `/mailbox`: defaults to the running user's mailbox (`identity.json` → mike@/howard@), read ops (`inbox`/`unread`/`search`/`from`/`read`) plus **hard-gated** send/reply (full To/Cc/Subject/Body preview + explicit confirm, external recipients flagged, no retries/bulk, saved to Sent). Smoke-tested the read path live (HTTP 200, token cache). Committed + pushed (`f8c00d3`) — distributed to the fleet (per-user scoped, so Howard gets it for his own mailbox). Also gitignored `.claude/commands/autotask.md` (`b22de6c`) so `/save`/`/sync`'s `git add -A` can't push it — making the earlier "keep /autotask local" decision stick.
|
||||
|
||||
### Key Decisions
|
||||
|
||||
- **Distributed `/mailbox`** (committed + pushed) — it defaults to each user's own mailbox, so it's per-user scoped and safe to share; send is gated for everyone.
|
||||
- **Gitignored `autotask.md`** rather than relying on controlled commits each time — reliable way to keep `/autotask` local.
|
||||
- **`/mailbox` is for ACG's OWN mailboxes; client-tenant mailbox reads stay in `/remediation-tool`** (same Graph app, different purpose) — documented the boundary in the skill.
|
||||
|
||||
### Problems Encountered
|
||||
|
||||
- **OData query params with spaces broke Python urllib** (`$orderby=receivedDateTime desc` → `InvalidURL: control characters`). Caught by the read smoke test; fixed by URL-encoding spaces in the Graph helper (`url.replace(" ", "%20")`) and re-verified HTTP 200.
|
||||
|
||||
### Configuration Changes
|
||||
|
||||
- CREATED `.claude/commands/mailbox.md` — `/mailbox` skill (committed + pushed `f8c00d3`).
|
||||
- MODIFIED `.gitignore` — added `.claude/commands/autotask.md` (committed `b22de6c`).
|
||||
- `.claude/tmp/mailbox-token.json` — token cache (gitignored).
|
||||
|
||||
### Credentials & Secrets
|
||||
|
||||
- **ACG's own email is Microsoft 365** (tenant `azcomputerguru.com`). Read/send via **Claude-MSP-Access Graph app `fabb3421`** — vault `msp-tools/claude-msp-access-graph-api.sops.yaml` → `credentials.credential`. Token: `client_credentials`, scope `https://graph.microsoft.com/.default`, endpoint `https://login.microsoftonline.com/azcomputerguru.com/oauth2/v2.0/token`. App has tenant-wide Mail.ReadWrite + Mail.Send (can read/send ANY ACG mailbox).
|
||||
|
||||
### Infrastructure & Servers
|
||||
|
||||
- Graph: `https://graph.microsoft.com/v1.0/users/<mbx>/messages` (read; `$search`/`$filter` mutually exclusive), `/sendMail` (POST, returns **202 empty**), `/messages/{id}/reply`.
|
||||
|
||||
### Commands & Outputs
|
||||
|
||||
- Verified: token (client_credentials) → `GET /users/mike@azcomputerguru.com/mailFolders/inbox/messages?$top=4&$orderby=receivedDateTime%20desc` → HTTP 200.
|
||||
|
||||
### Pending / Incomplete Tasks
|
||||
|
||||
- None for the skill. `/mailbox send` is available but always gated — no message leaves without explicit per-send confirmation.
|
||||
|
||||
### Reference Information
|
||||
|
||||
- Commits: `b22de6c` (gitignore autotask), `f8c00d3` (add /mailbox). Skill: `.claude/commands/mailbox.md`. Graph app `fabb3421` (see also `feedback_365_remediation_tool.md`).
|
||||
|
||||
Reference in New Issue
Block a user