You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
Align msgraph-stdlib with the template's two-tier layout. The shippable
payload now lives under plugin/ and the repo root is the build/distribution
repo. This adds the previously-missing .claude-plugin/marketplace.json, which
is what makes `/plugin install msgraph-stdlib@neilgfoster/msgraph-stdlib`
resolvable.
- Move payload under plugin/: .claude-plugin/plugin.json, hooks/, skills/,
src/{example,msgraph}/ (CLAUDE_PLUGIN_ROOT resolves to plugin/, so internal
references are unchanged).
- Add root build layer: marketplace.json (source ./plugin), pyproject.toml,
CI + release workflows, PR template, CHANGELOG, CONTRIBUTING.
- Add tests: marketplace->plugin manifest resolution; client describe smoke.
- Update README / CLAUDE.md / DEFINITION_OF_DONE paths; ignore uv/ruff/pytest
dev artifacts.
Layout-only; no runtime behaviour change. Tests pass (3/3). Pre-existing ruff
findings in the in-progress kernel are left for /speckit-implement.
Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
"description": "Stdlib-only, zero-backend Claude Code plugin for Microsoft Graph: read Outlook mail and author/verify native Outlook message rules. Read-only by default, with a least-privilege scope ratchet and read-only catch-set verification before any rule is installed."
Copy file name to clipboardExpand all lines: CLAUDE.md
+25-13Lines changed: 25 additions & 13 deletions
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -10,8 +10,8 @@ to "done" is in this repo. The target is `DEFINITION_OF_DONE.md`; read it first.
10
10
`msgraph-stdlib` — a Claude Code plugin that lets an agent **read Outlook mail** and **author native
11
11
Outlook message rules** via Microsoft Graph, with no third-party dependencies and no backend.
12
12
13
-
The `src/example/` package and `skills/example-subject-verb/` skill are the **inert template
14
-
reference pattern**. Your first build step is to replace them (see "Build plan" below). Keep them as
13
+
The `plugin/src/example/` package and `plugin/skills/example-subject-verb/` skill are the **inert
14
+
template reference pattern**. Your first build step is to replace them (see "Build plan" below). Keep them as
15
15
a reference while you work; delete them once the real skills exist.
16
16
17
17
## Non-negotiable conventions (inherited from the template — do not relax)
@@ -46,13 +46,13 @@ This is the heart of the plugin; do not weaken it for convenience.
46
46
47
47
## Capabilities to build (the verbs)
48
48
49
-
Group into skills under `skills/<subject>-<verb>/`, all backed by the `src/msgraph/` kernel:
49
+
Group into skills under `plugin/skills/<subject>-<verb>/`, all backed by the `plugin/src/msgraph/` kernel:
50
50
51
51
| Skill | Scope | Notes |
52
52
|---|---|---|
53
-
|`auth-login`|`Mail.Read` (default) or `+MailboxSettings.ReadWrite` (opt-in) | device-code flow; cache token at the XDG path; refresh via refresh-token |
53
+
|`auth-login`|`Mail.Read + MailboxSettings.Read` (default read-only) or `Mail.Read + MailboxSettings.ReadWrite` (opt-in) | device-code flow; cache token at the XDG path; refresh via refresh-token |
|`rule-list`|`Mail.Read`*(rules are mailbox settings — confirm exact read scope during `plan`)*| enumerate existing `messageRule`s, agent-legible |
55
+
|`rule-list`|`MailboxSettings.Read`*(rules are mailbox settings; included in read-only mode — resolved during `plan`)*| enumerate existing `messageRule`s, agent-legible |
56
56
|`rule-verify`|`Mail.Read`| given candidate predicates (e.g. `headerContains: ["List-Unsubscribe"]`), compute and return the **read-only catch-set** — no write |
57
57
|`rule-create`|`MailboxSettings.ReadWrite`| install a verified rule (predicate → move-to-folder action). Refuse unless a catch-set was verified |
58
58
|`rule-remove`|`MailboxSettings.ReadWrite`| delete a rule by id (the reversibility primitive) |
@@ -63,10 +63,10 @@ Graph endpoints are simple REST over `urllib`; `messageRule` lives under
63
63
## Prerequisite the human must do once (free)
64
64
65
65
Azure AD **app registration**: public client, device-code/public-client flow enabled, delegated
66
-
permission`Mail.Read`(+ `MailboxSettings.ReadWrite` for rule authoring). Personal accounts need no
67
-
admin consent. The session should read `MSGRAPH_CLIENT_ID` / `MSGRAPH_TENANT_ID` (default tenant
66
+
permissions`Mail.Read` + `MailboxSettings.Read` (read-only: read mail and list rules) (+
67
+
`MailboxSettings.ReadWrite` for rule authoring). Personal accounts need no admin consent. The session should read `MSGRAPH_CLIENT_ID` / `MSGRAPH_TENANT_ID` (default tenant
68
68
`consumers` or `common`) from the environment — never hardcode them. Document this in
69
-
`skills/auth-login` and the README. **This is not blocking** for `specify`/`clarify`/`plan`/`tasks`
69
+
`plugin/skills/auth-login` and the README. **This is not blocking** for `specify`/`clarify`/`plan`/`tasks`
70
70
or for offline-testable code; only live auth/integration testing needs it.
71
71
72
72
## Build plan (spec-first; this is the work)
@@ -80,16 +80,28 @@ or advertise it.
80
80
2.`/speckit-specify` — one feature: **Graph device-code auth + Outlook mail read + message-rule
81
81
CRUD with read-only catch-set verification.** Carry the safety model above as hard requirements.
0 commit comments