|
1 | 1 | # IntuneCommander |
2 | 2 |
|
| 3 | + |
| 4 | + |
3 | 5 | > A Windows-native control plane for **Microsoft Intune / Entra device management** — a Rust + |
4 | 6 | > WinUI 3 client over a hard-forked .NET Graph engine, with a persistent, searchable **audit / drift |
5 | 7 | > time-machine** and a human-gated automation layer on top. **MIT licensed.** |
6 | 8 |
|
7 | | -**Version 1.0 is a ground-up rewrite.** IntuneCommander started as a .NET 10 + React desktop app + |
8 | | -`ic.exe` CLI (the `v0.x` releases). v1.0 replaces that shell with a **native Rust/WinUI 3 client** and |
9 | | -a **.NET sidecar** — same brand, same Graph engine (hard-forked into [`service/Core/`](./service/Core/)), |
10 | | -plus the time-machine, diagnostics suite, and automation layers the old app never had. The legacy |
11 | | -.NET/React app is preserved in the `v0.x` tags and this repo's history. |
12 | | - |
13 | | -> **Status:** first public beta, **`v1.0.0-beta.1`**. It's a working application — full CRUD across |
14 | | -> ~42 surfaces, the time-machine, the diagnostics suite, and most of the platform layer (device |
15 | | -> actions, GitOps, simulator, twin, posture, fleet, ecosystem) are implemented. Grab a signed build |
16 | | -> from **[Releases](../../releases)**. |
17 | | -
|
18 | | -> **Codename:** some build files and internal docs still use the codename **`cmProjectX`** (the repo |
19 | | -> directory, `CmProjectX.*` .NET namespaces, `*.slnx`). The product name is **IntuneCommander**. |
| 9 | +**[intunecommander.com](https://intunecommander.com)** · **[Download the beta](https://github.com/adamgell/IntuneCommander/releases)** |
20 | 10 |
|
21 | 11 | --- |
22 | 12 |
|
23 | | -## Download & install |
| 13 | +## v1.0 is a ground-up rewrite |
24 | 14 |
|
25 | | -Signed installers (Windows 11, **ARM64** primary + **x64**) are on the |
26 | | -**[Releases](../../releases)** page — MSI + MSIX, code-signed with **Azure Trusted Signing**, built |
27 | | -with **[Master Packager Dev](https://www.masterpackager.com/)**: |
| 15 | +IntuneCommander started as a **.NET 10 + React** desktop app plus an `ic.exe` CLI (the **`v0.x`** |
| 16 | +releases). **v1.0** replaces that shell with a **native Rust / WinUI 3 client** and a **.NET |
| 17 | +sidecar** — same brand, same Graph engine — plus a time-machine, a diagnostics suite, and automation |
| 18 | +layers the old app never had. |
28 | 19 |
|
29 | | -- `IntuneCommander-<version>-<arch>.msi` — recommended (Program Files + Start-Menu shortcut) |
30 | | -- `IntuneCommander-<version>-<arch>.msix` — MSIX / App-Installer / managed deployment |
31 | | -- `IntuneCommander-<version>-win-<arch>.zip` — portable (run `Start-IntuneCommander.cmd`) |
| 20 | +> **Where the code lives:** v1 is being finalized on the |
| 21 | +> **[`v1` branch](https://github.com/adamgell/IntuneCommander/tree/v1)** and will become the default |
| 22 | +> branch shortly. This `main` branch still holds the legacy v0.x .NET/React app, preserved in the |
| 23 | +> `v0.x` tags and this repo's history. |
32 | 24 |
|
33 | | -Requires the **[Windows App SDK runtime](https://learn.microsoft.com/windows/apps/windows-app-sdk/downloads)**; |
34 | | -the .NET runtime is bundled. Prereqs + a smoke test are in [`docs/RUNBOOK.md`](./docs/RUNBOOK.md). |
35 | | - |
36 | | -> ⚠️ **Writes hit your live tenant — there is no sandbox.** A diff-preview → confirm gate protects |
37 | | -> every change, but a confirmed change is real. Start on low-risk surfaces (Scope Tags, Device |
38 | | -> Categories). Conditional Access is read-only by design. |
| 25 | +> **Status:** first public beta — **`v1.0.0-beta.1`**. Full CRUD across ~42 surfaces, the |
| 26 | +> time-machine, and the diagnostics suite are implemented. Grab a signed build from |
| 27 | +> **[Releases](https://github.com/adamgell/IntuneCommander/releases)**. |
39 | 28 |
|
40 | 29 | --- |
41 | 30 |
|
42 | | -## Architecture |
43 | | - |
44 | | -A **two-process desktop app**: a thin Rust/WinUI client talks to a local .NET sidecar over loopback. |
45 | | -All Graph/Intune coverage lives in the sidecar; the client is data-driven. |
46 | | - |
47 | | -``` |
48 | | - app/ Rust + WinUI 3 (Windows Reactor) ──HTTP/REST──▶ service/ .NET 10 sidecar |
49 | | - • Reactor reactive UI (hooks model) 127.0.0.1:5099 • Api/ minimal-API host (~280 routes) |
50 | | - • api_client.rs (blocking reqwest) • Core/ hard-forked Graph engine (~60 services) |
51 | | - • crates/api-types (shared DTOs) • Sync/ Graph delta sync + autonomy watcher |
52 | | - contract/openapi.yaml ────────────• Store/ SQLite + Lucene time-machine |
53 | | - (one schema → both sides) |
54 | | -``` |
55 | | - |
56 | | -- **The client owns the sidecar** — `app/src/sidecar.rs::ensure_running()` spawns (or borrows) it on |
57 | | - launch; `cargo run -p app` boots the whole stack. |
58 | | -- **`contract/openapi.yaml` is the single source of truth** for shared DTOs/endpoints (Rust + C# |
59 | | - types mirror it byte-for-byte over JSON). |
60 | | -- **Two storage layers:** an append-only **audit/drift time-machine** (`service/Store/`, SQLite + |
61 | | - Lucene) and a read-through **blob cache** (`service/Api/Endpoints/CachedReader.cs`, LiteDB). |
62 | | -- Loopback-only, single-instance mutex; no inbound HTTP auth — "auth" is per-tenant Entra sign-in |
63 | | - applied to the outbound Graph client. |
64 | | - |
65 | | -See [`AGENTS.md`](./AGENTS.md) (canonical operating guide) and [`CLAUDE.md`](./CLAUDE.md). |
66 | | - |
67 | 31 | ## What it does |
68 | 32 |
|
69 | | -- **~42 Intune/Entra surfaces** with a consistent view → edit → clone → delete → assign flow |
70 | | - (diff-preview + confirm before every write; full CRUD on ~29 writable surfaces). |
| 33 | +- **~42 Intune/Entra surfaces** — a consistent view → edit → clone → delete → |
| 34 | + assign flow, with a diff-preview + confirm gate before every write (full CRUD on ~29 writable |
| 35 | + surfaces). |
71 | 36 | - **A time-machine** — audit timeline, field-level drift, full-text search, point-in-time restore. |
72 | 37 | - **Bulk & lifecycle** — backup/export, gated import/restore, bulk app assignment, CIS/OIB baseline |
73 | | - compare, Conditional Access → PowerPoint. |
74 | | -- **Diagnostics** — CMTrace/IME logs, dsregcmd, Event Log, Sysmon, Secure Boot, timeline correlation, |
75 | | - one-click collector. All local, no sign-in. |
| 38 | + compare, Conditional Access → PowerPoint. |
| 39 | +- **Diagnostics** — CMTrace/IME logs, dsregcmd, Event Log, Sysmon, Secure Boot, timeline |
| 40 | + correlation, one-click collector. All local, no sign-in. |
76 | 41 | - **Platform layer** — GitOps plan/apply, a blast-radius simulator, a queryable tenant digital twin, |
77 | | - continuous posture scoring, multi-tenant fleet, a policy-pack/playbook ecosystem, and Maester |
78 | | - (CIS/SCuBA/EIDSCA) checks. |
| 42 | + continuous posture scoring, multi-tenant fleet, and Maester (CIS/SCuBA/EIDSCA) checks. |
79 | 43 | - **Human-gated automation** — proposals land in an approval inbox with the diff + blast-radius; |
80 | | - nothing auto-applies. (Cross-MDM is an experimental spike.) |
| 44 | + nothing auto-applies. |
81 | 45 |
|
82 | | -## Build & run |
| 46 | +> ⚠️ **Writes hit your live tenant — there is no sandbox.** A diff-preview → confirm gate |
| 47 | +> protects every change, but a confirmed change is real. Start on low-risk surfaces (Scope Tags, |
| 48 | +> Device Categories). Conditional Access is read-only by design. |
83 | 49 |
|
84 | | -Prereqs (see [`docs/RUNBOOK.md`](./docs/RUNBOOK.md)): **Windows 11 on ARM64** (primary), the **.NET 10 |
85 | | -SDK**, **Rust stable**, the **Windows App SDK runtime**, and the two sibling checkouts the client's |
86 | | -path-deps need — `../windows-rs` (Windows Reactor fork) and `../cmtraceopen` (parser). |
87 | | - |
88 | | -```powershell |
89 | | -cargo build --workspace |
90 | | -dotnet build service/CmProjectX.slnx --configuration Release |
91 | | -cargo run -p app # client spawns the sidecar |
92 | | -``` |
| 50 | +## Architecture |
93 | 51 |
|
94 | | -## Releasing |
| 52 | +A two-process desktop app: a thin **Rust / WinUI 3** client talks to a local **.NET 10 sidecar** over |
| 53 | +loopback. All Graph/Intune coverage lives in the sidecar; the client is data-driven. A single |
| 54 | +`contract/openapi.yaml` is the source of truth for the DTOs both sides share, and two storage layers |
| 55 | +back it — an append-only audit/drift time-machine (SQLite + Lucene) and a read-through blob cache. |
95 | 56 |
|
96 | | -Push a `v<semver>` tag → the **[signed-release workflow](./.github/workflows/cmprojectx-codesign.yml)** |
97 | | -builds the client + self-contained sidecar (+ bundled Maester), packages a **signed MSI + MSIX** per |
98 | | -arch with mpdev (Azure Trusted Signing), and publishes a draft release here: |
| 57 | +Full architecture, build, and release detail lives in the |
| 58 | +[**`v1` branch README**](https://github.com/adamgell/IntuneCommander/tree/v1#architecture). |
99 | 59 |
|
100 | | -```powershell |
101 | | -git tag v1.0.0-beta.1 && git push origin v1.0.0-beta.1 |
102 | | -``` |
| 60 | +## Install |
103 | 61 |
|
104 | | -Signing config lives in the `codesigning` environment secrets. Packaging is defined by |
105 | | -[`packaging/installer.mpdev.json`](./packaging/installer.mpdev.json) (see |
106 | | -[`packaging/README.md`](./packaging/README.md)). `scripts/release.ps1` is a local unsigned dev build. |
| 62 | +Signed installers for **Windows 11** (**ARM64** primary + **x64**) — MSI + MSIX, code-signed with |
| 63 | +Azure Trusted Signing — are on the **[Releases](https://github.com/adamgell/IntuneCommander/releases)** |
| 64 | +page. Requires the |
| 65 | +[Windows App SDK runtime](https://learn.microsoft.com/windows/apps/windows-app-sdk/downloads); the |
| 66 | +.NET runtime is bundled. |
107 | 67 |
|
108 | 68 | ## License |
109 | 69 |
|
110 | | -**MIT** — see [`LICENSE`](./LICENSE). Bundled third-party components are listed in |
111 | | -[`THIRD-PARTY-NOTICES.md`](./THIRD-PARTY-NOTICES.md). The forked `service/Core/` derives from the |
112 | | -MIT-licensed original IntuneCommander. |
| 70 | +**MIT** — see [`LICENSE`](./LICENSE). The forked Graph engine derives from the MIT-licensed |
| 71 | +[IntuneManagement](https://github.com/Micke-K/IntuneManagement) by Micke-K. |
0 commit comments