@knowttl/mg-axi 0.1.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.
Files changed (57) hide show
  1. package/README.md +1138 -0
  2. package/dist/api.js +953 -0
  3. package/dist/app-auth.js +47 -0
  4. package/dist/auth.js +59 -0
  5. package/dist/bin/mg-axi.js +7 -0
  6. package/dist/catalogue.js +2191 -0
  7. package/dist/cli.js +1314 -0
  8. package/dist/docs.js +559 -0
  9. package/dist/doctor.js +75 -0
  10. package/dist/entra-access-reviews.js +425 -0
  11. package/dist/entra-apps.js +374 -0
  12. package/dist/entra-audit-logs.js +381 -0
  13. package/dist/entra-auth-methods.js +296 -0
  14. package/dist/entra-ca-policy-update.js +353 -0
  15. package/dist/entra-certificate-auth.js +384 -0
  16. package/dist/entra-conditional-access.js +317 -0
  17. package/dist/entra-contacts.js +827 -0
  18. package/dist/entra-contracts.js +252 -0
  19. package/dist/entra-custom-security-attributes.js +464 -0
  20. package/dist/entra-data-policy-operations.js +274 -0
  21. package/dist/entra-delegated-admin.js +468 -0
  22. package/dist/entra-deleted-items.js +461 -0
  23. package/dist/entra-directory-objects.js +274 -0
  24. package/dist/entra-directory.js +411 -0
  25. package/dist/entra-domains.js +399 -0
  26. package/dist/entra-entitlement-management.js +645 -0
  27. package/dist/entra-federation-configurations.js +290 -0
  28. package/dist/entra-grants.js +272 -0
  29. package/dist/entra-group-lifecycle.js +349 -0
  30. package/dist/entra-group-member-add.js +278 -0
  31. package/dist/entra-groups.js +336 -0
  32. package/dist/entra-identity-providers.js +297 -0
  33. package/dist/entra-lifecycle-workflows.js +673 -0
  34. package/dist/entra-multi-tenant-organization.js +309 -0
  35. package/dist/entra-on-premises-synchronization.js +231 -0
  36. package/dist/entra-organization.js +398 -0
  37. package/dist/entra-risk-dismiss.js +191 -0
  38. package/dist/entra-risk.js +404 -0
  39. package/dist/entra-roles.js +310 -0
  40. package/dist/entra-subscriptions.js +289 -0
  41. package/dist/entra-tenant-information.js +152 -0
  42. package/dist/entra-terms-of-use.js +380 -0
  43. package/dist/entra-user-revoke-sessions.js +170 -0
  44. package/dist/entra-user-update.js +170 -0
  45. package/dist/entra-users.js +211 -0
  46. package/dist/graph-session.js +1034 -0
  47. package/dist/msal-app-provider.js +42 -0
  48. package/dist/msal-provider.js +82 -0
  49. package/dist/mutations.js +529 -0
  50. package/dist/profiles.js +139 -0
  51. package/dist/setup.js +116 -0
  52. package/dist/version.js +2 -0
  53. package/docs/coverage.md +1028 -0
  54. package/inventory/operations.json +4 -0
  55. package/inventory/schema.json +71 -0
  56. package/package.json +32 -0
  57. package/skills/mg-axi/SKILL.md +293 -0
@@ -0,0 +1,4 @@
1
+ [diffend] Oversized file quarantined before diffing.
2
+ name: package/inventory/operations.json
3
+ size: 75857800 bytes
4
+ sha256: bf8b0cdd323b9f6fbdd2803f7964e15545bbcc4b779e8e8d6cc6068b11324d95
@@ -0,0 +1,71 @@
1
+ {
2
+ "$schema": "https://json-schema.org/draft/2020-12/schema",
3
+ "title": "INV-01 Entra discovery inventory",
4
+ "type": "object",
5
+ "additionalProperties": false,
6
+ "required": ["schemaVersion", "repository", "revision", "checkedOn", "sources", "operations"],
7
+ "properties": {
8
+ "schemaVersion": {"const": 2},
9
+ "repository": {"const": "microsoftgraph/msgraph-metadata"},
10
+ "revision": {"type": "string", "pattern": "^[a-f0-9]{40}$"},
11
+ "checkedOn": {"type": "string", "pattern": "^\\d{4}-\\d{2}-\\d{2}$"},
12
+ "sources": {
13
+ "type": "array", "minItems": 2, "maxItems": 2,
14
+ "items": {
15
+ "type": "object", "additionalProperties": false,
16
+ "required": ["version", "path", "sha256", "bytes", "discoveredOperations", "excludedByRoot"],
17
+ "properties": {
18
+ "version": {"$ref": "#/$defs/version"},
19
+ "path": {"type": "string", "pattern": "^openapi/(v1\\.0|beta)/openapi\\.yaml$"},
20
+ "sha256": {"type": "string", "pattern": "^[a-f0-9]{64}$"},
21
+ "bytes": {"type": "integer", "minimum": 1},
22
+ "discoveredOperations": {"type": "integer", "minimum": 1},
23
+ "excludedByRoot": {"type": "object", "additionalProperties": {"type": "integer", "minimum": 1}}
24
+ }
25
+ }
26
+ },
27
+ "operations": {"type": "array", "minItems": 1, "items": {"$ref": "#/$defs/operation"}}
28
+ },
29
+ "$defs": {
30
+ "version": {"enum": ["v1.0", "beta"]},
31
+ "text": {"type": "string", "minLength": 1},
32
+ "source": {"type": "string", "pattern": "^https://learn\\.microsoft\\.com/"},
33
+ "evidence": {
34
+ "type": "object", "additionalProperties": false,
35
+ "required": ["status", "sources"],
36
+ "properties": {
37
+ "status": {"const": "not-reviewed"},
38
+ "sources": {"type": "array", "minItems": 1, "uniqueItems": true, "items": {"$ref": "#/$defs/source"}}
39
+ }
40
+ },
41
+ "operation": {
42
+ "type": "object", "additionalProperties": false,
43
+ "required": ["id", "operationId", "version", "method", "path", "cloud", "tenantType", "documentation", "authModes", "permissions", "roles", "licences", "cloudAvailability", "disposition", "reason", "owningSlice"],
44
+ "properties": {
45
+ "id": {"$ref": "#/$defs/text"},
46
+ "operationId": {"$ref": "#/$defs/text"},
47
+ "version": {"$ref": "#/$defs/version"},
48
+ "method": {"enum": ["GET", "POST", "PUT", "PATCH", "DELETE", "HEAD", "OPTIONS"]},
49
+ "path": {"type": "string", "pattern": "^/"},
50
+ "cloud": {"const": "commercial"},
51
+ "tenantType": {"const": "workforce"},
52
+ "documentation": {"anyOf": [{"$ref": "#/$defs/source"}, {"type": "null"}]},
53
+ "authModes": {
54
+ "type": "object", "additionalProperties": false,
55
+ "required": ["delegated", "application"],
56
+ "properties": {"delegated": {"$ref": "#/$defs/evidence"}, "application": {"$ref": "#/$defs/evidence"}}
57
+ },
58
+ "permissions": {"$ref": "#/$defs/evidence"},
59
+ "roles": {"$ref": "#/$defs/evidence"},
60
+ "licences": {"$ref": "#/$defs/evidence"},
61
+ "cloudAvailability": {"$ref": "#/$defs/evidence"},
62
+ "disposition": {"enum": ["named-command", "reviewed-raw-read", "scheduled", "intentionally-blocked", "deprecated", "unavailable", "excluded"]},
63
+ "reason": {"$ref": "#/$defs/text"},
64
+ "owningSlice": {"enum": [null, "READ-01", "READ-02", "READ-03", "READ-04", "READ-05", "READ-06", "READ-07", "READ-08", "READ-09", "READ-10", "EXT-01", "EXT-02", "EXT-02c", "EXT-03", "EXT-04", "WRITE-01", "WRITE-02", "WRITE-03", "WRITE-04", "WRITE-05", "WRITE-N"]}
65
+ },
66
+ "if": {"properties": {"disposition": {"const": "excluded"}}},
67
+ "then": {"properties": {"owningSlice": {"type": "null"}}},
68
+ "else": {"properties": {"owningSlice": {"type": "string"}}}
69
+ }
70
+ }
71
+ }
package/package.json ADDED
@@ -0,0 +1,32 @@
1
+ {
2
+ "name": "@knowttl/mg-axi",
3
+ "version": "0.1.0",
4
+ "description": "Agent-facing Microsoft Graph CLI, read-only by default",
5
+ "type": "module",
6
+ "bin": { "mg-axi": "dist/bin/mg-axi.js" },
7
+ "publishConfig": { "access": "public" },
8
+ "repository": { "type": "git", "url": "git+https://github.com/knowttl/mg-axi.git" },
9
+ "files": ["dist", "inventory/schema.json", "inventory/operations.json", "skills/mg-axi", "docs/coverage.md", "README.md"],
10
+ "engines": { "node": ">=22.12.0" },
11
+ "packageManager": "pnpm@10.34.6",
12
+ "scripts": {
13
+ "build": "tsc -p tsconfig.json",
14
+ "test": "node --test test/*.test.mjs",
15
+ "lint": "tsc --noEmit -p tsconfig.json",
16
+ "docs:generate": "node tools/generate-docs.mjs",
17
+ "docs:check": "node tools/generate-docs.mjs --check"
18
+ },
19
+ "dependencies": {
20
+ "@azure/msal-node": "^7.0.1",
21
+ "@toon-format/toon": "^2.3.0",
22
+ "axi-sdk-js": "^0.1.13",
23
+ "open": "^11.0.4"
24
+ },
25
+ "devDependencies": {
26
+ "@types/node": "^22.20.5",
27
+ "typescript": "^7.0.2"
28
+ },
29
+ "optionalDependencies": {
30
+ "keytar": "^7.9.0"
31
+ }
32
+ }
@@ -0,0 +1,293 @@
1
+ ---
2
+ name: mg-axi
3
+ description: >
4
+ Inspect Microsoft Entra users, authentication methods, groups, roles, devices, administrative units, organization and branding, domains and DNS records, certificate authentication, commercial subscriptions, on-premises synchronization, terms-of-use agreements and acceptances, directory objects, organizational contacts, group lifecycle policies, group setting templates, attribute sets and custom security attributes, partner contracts, delegated administration, multi-tenant organization, tenant information, sign-ins and audit logs, applications and consent grants, risk, Conditional Access, identity providers, federation configurations, deleted directory items, data policy operations, access reviews, entitlement catalogs and access packages, entitlement assignments and requests, lifecycle workflows, templates, task definitions, settings, runs, processing results and task reports, reviewed raw reads and run 5 gated writes (account enable/disable, session revocation, group-membership add, risky-user dismissal, CA policy update) through token-efficient TOON output.
5
+ user-invocable: false
6
+ ---
7
+
8
+ <!-- Generated by tools/generate-docs.mjs from src/catalogue.ts. Do not hand-edit. -->
9
+
10
+ # mg-axi
11
+
12
+ Agent-ergonomic CLI for Microsoft Graph. Inspect Microsoft Graph capabilities, read-only by default.
13
+ Entra SOC reads through token-efficient TOON output.
14
+ The generated [command table](#orientation) lists supported named writes through the gated mutation coordinator; raw API remains read-only and every other mutation is refused.
15
+ See [README.md](../../README.md) for write usage, execution gates, identity pinning, permissions, target-role hierarchy and write configuration.
16
+
17
+ Run commands non-interactively as `npx -y @knowttl/mg-axi ...`: no global install needed and no interactive prompts.
18
+ Version pinning is the installer's choice: use `npx -y @knowttl/mg-axi@<version> ...` to select a specific release.
19
+ Run `npx -y @knowttl/mg-axi doctor` first.
20
+ See [README.md](../../README.md#release) for doctor profile selection, checks and failure behavior.
21
+
22
+ ## Orientation
23
+
24
+ The exact current leaf registry is `src/catalogue.ts`.
25
+ Its capability label is `native` (implemented by an mg-axi handler).
26
+ Its effect is `read` for Graph read leaves and the doctor health check, `write` for the gated named writes, or `local` for home, profile, login and setup views.
27
+ Doctor acquires credentials silently and contacts Graph; only its help view stays offline.
28
+ The list below records current executable leaves; it makes no coverage claim for other Graph operations.
29
+ See `docs/coverage.md` for the per-operation disposition records.
30
+ `docs/coverage.md` and this file are generated from the same catalogue and inventory sources; `node tools/generate-docs.mjs --check` fails when they are stale.
31
+
32
+ <!-- command-registry:start -->
33
+ | Command | Capability | Effect |
34
+ |---|---|---|
35
+ | `mg-axi home` | native | local |
36
+ | `mg-axi profile create` | native | local |
37
+ | `mg-axi profile list` | native | local |
38
+ | `mg-axi profile show` | native | local |
39
+ | `mg-axi login` | native | local |
40
+ | `mg-axi setup` | native | local |
41
+ | `mg-axi doctor` | native | read |
42
+ | `mg-axi entra user list` | native | read |
43
+ | `mg-axi entra user show` | native | read |
44
+ | `mg-axi entra user update` | native | write |
45
+ | `mg-axi entra user revoke-sessions` | native | write |
46
+ | `mg-axi entra user authentication-method list` | native | read |
47
+ | `mg-axi entra registration list` | native | read |
48
+ | `mg-axi entra group list` | native | read |
49
+ | `mg-axi entra group show` | native | read |
50
+ | `mg-axi entra group member list` | native | read |
51
+ | `mg-axi entra group member-of list` | native | read |
52
+ | `mg-axi entra group member add` | native | write |
53
+ | `mg-axi entra directory-role list` | native | read |
54
+ | `mg-axi entra directory-role show` | native | read |
55
+ | `mg-axi entra role-assignment list` | native | read |
56
+ | `mg-axi entra pim eligible list` | native | read |
57
+ | `mg-axi entra pim active list` | native | read |
58
+ | `mg-axi entra device list` | native | read |
59
+ | `mg-axi entra device show` | native | read |
60
+ | `mg-axi entra administrative-unit list` | native | read |
61
+ | `mg-axi entra administrative-unit show` | native | read |
62
+ | `mg-axi entra administrative-unit member list` | native | read |
63
+ | `mg-axi entra organization list` | native | read |
64
+ | `mg-axi entra organization show` | native | read |
65
+ | `mg-axi entra organization branding show` | native | read |
66
+ | `mg-axi entra organization branding-localization list` | native | read |
67
+ | `mg-axi entra organization branding-localization show` | native | read |
68
+ | `mg-axi entra domain list` | native | read |
69
+ | `mg-axi entra domain show` | native | read |
70
+ | `mg-axi entra domain verification-dns-record list` | native | read |
71
+ | `mg-axi entra domain verification-dns-record show` | native | read |
72
+ | `mg-axi entra domain service-configuration-record list` | native | read |
73
+ | `mg-axi entra domain service-configuration-record show` | native | read |
74
+ | `mg-axi entra domain-dns-record list` | native | read |
75
+ | `mg-axi entra domain-dns-record show` | native | read |
76
+ | `mg-axi entra certificate-auth-pki list` | native | read |
77
+ | `mg-axi entra certificate-auth-pki show` | native | read |
78
+ | `mg-axi entra certificate-auth-pki count` | native | read |
79
+ | `mg-axi entra certificate-authority list` | native | read |
80
+ | `mg-axi entra certificate-authority show` | native | read |
81
+ | `mg-axi entra certificate-authority count` | native | read |
82
+ | `mg-axi entra subscription list` | native | read |
83
+ | `mg-axi entra subscription show` | native | read |
84
+ | `mg-axi entra subscription count` | native | read |
85
+ | `mg-axi entra on-premises-synchronization list` | native | read |
86
+ | `mg-axi entra on-premises-synchronization show` | native | read |
87
+ | `mg-axi entra agreement list` | native | read |
88
+ | `mg-axi entra agreement show` | native | read |
89
+ | `mg-axi entra agreement acceptance list` | native | read |
90
+ | `mg-axi entra agreement acceptance show` | native | read |
91
+ | `mg-axi entra agreement-acceptance list` | native | read |
92
+ | `mg-axi entra agreement-acceptance show` | native | read |
93
+ | `mg-axi entra directory-object list` | native | read |
94
+ | `mg-axi entra directory-object show` | native | read |
95
+ | `mg-axi entra directory-object count` | native | read |
96
+ | `mg-axi entra contact list` | native | read |
97
+ | `mg-axi entra contact show` | native | read |
98
+ | `mg-axi entra contact count` | native | read |
99
+ | `mg-axi entra contact show-manager` | native | read |
100
+ | `mg-axi entra contact list-direct-reports` | native | read |
101
+ | `mg-axi entra contact show-direct-report` | native | read |
102
+ | `mg-axi entra contact count-direct-reports` | native | read |
103
+ | `mg-axi entra contact list-member-of` | native | read |
104
+ | `mg-axi entra contact show-member-of` | native | read |
105
+ | `mg-axi entra contact count-member-of` | native | read |
106
+ | `mg-axi entra group-lifecycle-policy list` | native | read |
107
+ | `mg-axi entra group-lifecycle-policy show` | native | read |
108
+ | `mg-axi entra group-lifecycle-policy count` | native | read |
109
+ | `mg-axi entra group-setting-template list` | native | read |
110
+ | `mg-axi entra group-setting-template show` | native | read |
111
+ | `mg-axi entra group-setting-template count` | native | read |
112
+ | `mg-axi entra attribute-set list` | native | read |
113
+ | `mg-axi entra attribute-set show` | native | read |
114
+ | `mg-axi entra attribute-set count` | native | read |
115
+ | `mg-axi entra custom-security-attribute-definition list` | native | read |
116
+ | `mg-axi entra custom-security-attribute-definition show` | native | read |
117
+ | `mg-axi entra custom-security-attribute-definition count` | native | read |
118
+ | `mg-axi entra allowed-value list` | native | read |
119
+ | `mg-axi entra allowed-value show` | native | read |
120
+ | `mg-axi entra allowed-value count` | native | read |
121
+ | `mg-axi entra contract list` | native | read |
122
+ | `mg-axi entra contract show` | native | read |
123
+ | `mg-axi entra contract count` | native | read |
124
+ | `mg-axi entra delegated-admin-customer list` | native | read |
125
+ | `mg-axi entra delegated-admin-customer show` | native | read |
126
+ | `mg-axi entra delegated-admin-relationship list` | native | read |
127
+ | `mg-axi entra delegated-admin-relationship show` | native | read |
128
+ | `mg-axi entra delegated-admin-relationship list-access-assignments` | native | read |
129
+ | `mg-axi entra delegated-admin-relationship show-access-assignment` | native | read |
130
+ | `mg-axi entra delegated-admin-relationship list-operations` | native | read |
131
+ | `mg-axi entra delegated-admin-relationship show-operation` | native | read |
132
+ | `mg-axi entra delegated-admin-relationship list-requests` | native | read |
133
+ | `mg-axi entra delegated-admin-relationship show-request` | native | read |
134
+ | `mg-axi entra delegated-admin-customer list-service-management-details` | native | read |
135
+ | `mg-axi entra delegated-admin-customer show-service-management-detail` | native | read |
136
+ | `mg-axi entra multi-tenant-organization show` | native | read |
137
+ | `mg-axi entra multi-tenant-organization join-request show` | native | read |
138
+ | `mg-axi entra multi-tenant-organization tenant list` | native | read |
139
+ | `mg-axi entra multi-tenant-organization tenant count` | native | read |
140
+ | `mg-axi entra tenant-information show` | native | read |
141
+ | `mg-axi entra sign-in list` | native | read |
142
+ | `mg-axi entra sign-in show` | native | read |
143
+ | `mg-axi entra directory-audit list` | native | read |
144
+ | `mg-axi entra directory-audit show` | native | read |
145
+ | `mg-axi entra application list` | native | read |
146
+ | `mg-axi entra application show` | native | read |
147
+ | `mg-axi entra service-principal list` | native | read |
148
+ | `mg-axi entra service-principal show` | native | read |
149
+ | `mg-axi entra application owner list` | native | read |
150
+ | `mg-axi entra service-principal owner list` | native | read |
151
+ | `mg-axi entra service-principal oauth2-grant list` | native | read |
152
+ | `mg-axi entra service-principal app-role-assignment list` | native | read |
153
+ | `mg-axi entra risky-user list` | native | read |
154
+ | `mg-axi entra risky-user show` | native | read |
155
+ | `mg-axi entra risky-user dismiss` | native | write |
156
+ | `mg-axi entra risk-detection list` | native | read |
157
+ | `mg-axi entra risk-detection show` | native | read |
158
+ | `mg-axi entra conditional-access policy list` | native | read |
159
+ | `mg-axi entra conditional-access policy show` | native | read |
160
+ | `mg-axi entra conditional-access policy update` | native | write |
161
+ | `mg-axi entra conditional-access named-location list` | native | read |
162
+ | `mg-axi entra conditional-access named-location show` | native | read |
163
+ | `mg-axi entra identity-provider list` | native | read |
164
+ | `mg-axi entra identity-provider show` | native | read |
165
+ | `mg-axi entra identity-provider count` | native | read |
166
+ | `mg-axi entra identity-provider available-types` | native | read |
167
+ | `mg-axi entra federation-configuration list` | native | read |
168
+ | `mg-axi entra federation-configuration show` | native | read |
169
+ | `mg-axi entra federation-configuration count` | native | read |
170
+ | `mg-axi entra federation-configuration available-types` | native | read |
171
+ | `mg-axi entra deleted-user list` | native | read |
172
+ | `mg-axi entra deleted-user count` | native | read |
173
+ | `mg-axi entra deleted-group list` | native | read |
174
+ | `mg-axi entra deleted-group count` | native | read |
175
+ | `mg-axi entra deleted-application list` | native | read |
176
+ | `mg-axi entra deleted-application count` | native | read |
177
+ | `mg-axi entra deleted-service-principal list` | native | read |
178
+ | `mg-axi entra deleted-service-principal count` | native | read |
179
+ | `mg-axi entra deleted-administrative-unit list` | native | read |
180
+ | `mg-axi entra deleted-administrative-unit count` | native | read |
181
+ | `mg-axi entra deleted-item show` | native | read |
182
+ | `mg-axi entra data-policy-operation list` | native | read |
183
+ | `mg-axi entra data-policy-operation show` | native | read |
184
+ | `mg-axi entra data-policy-operation count` | native | read |
185
+ | `mg-axi entra access-review definition list` | native | read |
186
+ | `mg-axi entra access-review definition show` | native | read |
187
+ | `mg-axi entra access-review instance list` | native | read |
188
+ | `mg-axi entra access-review instance show` | native | read |
189
+ | `mg-axi entra access-review decision list` | native | read |
190
+ | `mg-axi entra access-review decision show` | native | read |
191
+ | `mg-axi entra access-review contacted-reviewer list` | native | read |
192
+ | `mg-axi entra access-review contacted-reviewer show` | native | read |
193
+ | `mg-axi entra access-review stage list` | native | read |
194
+ | `mg-axi entra access-review stage show` | native | read |
195
+ | `mg-axi entra entitlement catalog list` | native | read |
196
+ | `mg-axi entra entitlement catalog show` | native | read |
197
+ | `mg-axi entra entitlement catalog count` | native | read |
198
+ | `mg-axi entra entitlement access-package list` | native | read |
199
+ | `mg-axi entra entitlement access-package show` | native | read |
200
+ | `mg-axi entra entitlement access-package count` | native | read |
201
+ | `mg-axi entra entitlement assignment-policy list` | native | read |
202
+ | `mg-axi entra entitlement assignment-policy show` | native | read |
203
+ | `mg-axi entra entitlement assignment-policy count` | native | read |
204
+ | `mg-axi entra entitlement resource-role-scope list` | native | read |
205
+ | `mg-axi entra entitlement resource-role-scope show` | native | read |
206
+ | `mg-axi entra entitlement resource-role-scope count` | native | read |
207
+ | `mg-axi entra entitlement assignment list` | native | read |
208
+ | `mg-axi entra entitlement assignment show` | native | read |
209
+ | `mg-axi entra entitlement assignment count` | native | read |
210
+ | `mg-axi entra entitlement assignment-request list` | native | read |
211
+ | `mg-axi entra entitlement assignment-request show` | native | read |
212
+ | `mg-axi entra entitlement assignment-request count` | native | read |
213
+ | `mg-axi entra lifecycle workflow list` | native | read |
214
+ | `mg-axi entra lifecycle workflow show` | native | read |
215
+ | `mg-axi entra lifecycle workflow count` | native | read |
216
+ | `mg-axi entra lifecycle workflow-template list` | native | read |
217
+ | `mg-axi entra lifecycle workflow-template show` | native | read |
218
+ | `mg-axi entra lifecycle workflow-template count` | native | read |
219
+ | `mg-axi entra lifecycle task-definition list` | native | read |
220
+ | `mg-axi entra lifecycle task-definition show` | native | read |
221
+ | `mg-axi entra lifecycle task-definition count` | native | read |
222
+ | `mg-axi entra lifecycle settings show` | native | read |
223
+ | `mg-axi entra lifecycle run list` | native | read |
224
+ | `mg-axi entra lifecycle run show` | native | read |
225
+ | `mg-axi entra lifecycle run count` | native | read |
226
+ | `mg-axi entra lifecycle user-processing-result list` | native | read |
227
+ | `mg-axi entra lifecycle user-processing-result show` | native | read |
228
+ | `mg-axi entra lifecycle user-processing-result count` | native | read |
229
+ | `mg-axi entra lifecycle subject-processing-result list` | native | read |
230
+ | `mg-axi entra lifecycle subject-processing-result show` | native | read |
231
+ | `mg-axi entra lifecycle subject-processing-result count` | native | read |
232
+ | `mg-axi entra lifecycle task-report list` | native | read |
233
+ | `mg-axi entra lifecycle task-report show` | native | read |
234
+ | `mg-axi entra lifecycle task-report count` | native | read |
235
+ | `mg-axi entra lifecycle task-report task show` | native | read |
236
+ | `mg-axi entra lifecycle task-report task-definition show` | native | read |
237
+ | `mg-axi api get` | native | read |
238
+ <!-- command-registry:end -->
239
+
240
+ Run `npx -y @knowttl/mg-axi <leaf-path> --help` for that leaf's accepted flags and reference.
241
+ Unknown flags fail before any credential or HTTP work.
242
+
243
+ ## Next steps
244
+
245
+ The no-args home view prints these hints alongside live profile status:
246
+
247
+ ```sh
248
+ npx -y @knowttl/mg-axi profile list
249
+ npx -y @knowttl/mg-axi login --help
250
+ npx -y @knowttl/mg-axi setup
251
+ npx -y @knowttl/mg-axi doctor
252
+ npx -y @knowttl/mg-axi entra user list --help
253
+ npx -y @knowttl/mg-axi entra user show --help
254
+ npx -y @knowttl/mg-axi entra group list --help
255
+ npx -y @knowttl/mg-axi entra group member list --help
256
+ npx -y @knowttl/mg-axi entra application list --help
257
+ npx -y @knowttl/mg-axi entra service-principal list --help
258
+ npx -y @knowttl/mg-axi entra conditional-access policy list --help
259
+ npx -y @knowttl/mg-axi api get --help
260
+ ```
261
+
262
+ ## Setup (explicit only)
263
+
264
+ Follow [release guidance](../../README.md#release) for npm installation and explicit skill installation; [README.md](../../README.md#mg-axi) also documents checkout builds.
265
+ Create profiles explicitly and keep secrets out of argv and config files:
266
+
267
+ ```sh
268
+ npx -y @knowttl/mg-axi setup # build steps, config path and capabilities; writes nothing
269
+ npx -y @knowttl/mg-axi profile create --name soc --tenant <tenant-id> --client <client-id> --cloud commercial
270
+ npx -y @knowttl/mg-axi login --profile soc --scopes https://graph.microsoft.com/User.Read.All
271
+ npx -y @knowttl/mg-axi doctor # one bounded read per selected profile
272
+ npx -y @knowttl/mg-axi entra user list --profile soc --limit 10
273
+ ```
274
+
275
+ Configuration defaults to `~/.mg-axi/config.json`; `MG_AXI_CONFIG` selects a separate file.
276
+ `mg-axi setup` shows the selected path and writes nothing.
277
+
278
+ ## Selecting a profile
279
+
280
+ Read leaves accept `--profile <name>`.
281
+ Selection uses `--profile` or the configured default.
282
+ Without either, read leaves report `AUTH_REQUIRED`, even if only one profile exists.
283
+ Doctor selection is documented in [README.md](../../README.md#release).
284
+ Without profiles, home, setup and profile list show unconfigured state; Graph read leaves report `AUTH_REQUIRED`.
285
+
286
+ ## Safety
287
+
288
+ Reads run through a session that authorizes only catalogued operations before silent credential acquisition; only explicit `login` opens a browser or prints a device-code challenge.
289
+ Writes preview before sending and need `--execute` plus a typed `--confirm` repeating the target; an already-desired value is a no-op with exit 0, never an error.
290
+ Output is TOON on stdout; diagnostics use stderr.
291
+ Text truncates at 500 characters (`--full` restores text, never redaction); row caps resume through opaque cursors.
292
+ Secrets stay in protected storage references, never in argv, config files or output; credential fields carry expiry metadata only.
293
+ Tests run offline with fixture credentials; never point tests at a real tenant.