awguard 1.5.0 → 1.6.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.
package/CHANGELOG.md CHANGED
@@ -1,5 +1,13 @@
1
1
  # Changelog
2
2
 
3
+ ## 1.6.0
4
+
5
+ - Add `awguard init` to print starter GitHub Action, strict config, baseline, report, and badge setup snippets.
6
+ - Add `--format inventory-json` for machine-readable agentic surface inventories.
7
+ - Add `--compare previous.json current.json` for introduced/resolved finding and file drift reports.
8
+ - Add policy allowlists with `AWG015` for unapproved files, MCP servers, packages, or commands.
9
+ - Add Docker, GitLab CI, pre-commit, VS Code task, Marketplace, comparison, demo, and vulnerable lab assets.
10
+
3
11
  ## 1.5.0
4
12
 
5
13
  - Add `--format inventory` to map agentic repository surfaces by workflows, agent context files, and MCP configs.
package/Dockerfile ADDED
@@ -0,0 +1,8 @@
1
+ FROM node:20-alpine
2
+
3
+ WORKDIR /app
4
+ COPY package.json README.md LICENSE action.yml ./
5
+ COPY bin ./bin
6
+ COPY src ./src
7
+
8
+ ENTRYPOINT ["node", "/app/bin/awguard.js"]
package/README.md CHANGED
@@ -5,8 +5,11 @@
5
5
  [![GitHub release](https://img.shields.io/github/v/release/Mughal-Baig/agentic-workflow-guard)](https://github.com/Mughal-Baig/agentic-workflow-guard/releases)
6
6
  [![npm](https://img.shields.io/npm/v/awguard)](https://www.npmjs.com/package/awguard)
7
7
  [![AWI risk](https://img.shields.io/endpoint?url=https://raw.githubusercontent.com/Mughal-Baig/agentic-workflow-guard/main/docs/awguard-badge.json)](docs/awguard-badge.json)
8
+ [![Project site](https://img.shields.io/badge/site-live-0f766e)](https://mughal-baig.github.io/agentic-workflow-guard/)
8
9
  [![License: MIT](https://img.shields.io/badge/License-MIT-green.svg)](LICENSE)
9
10
 
11
+ ![Agentic Workflow Guard terminal demo](docs/assets/terminal-demo.svg)
12
+
10
13
  `agentic-workflow-guard` is a small, zero-dependency scanner for GitHub Actions workflows, persistent agent instruction files, and MCP configs used by AI coding agents, LLMs, or automated review bots.
11
14
 
12
15
  It looks for a new class of CI/CD risk: untrusted issue, pull request, comment, or branch text flowing into an AI agent prompt, then into write-capable tools, secrets, shell scripts, persistent instructions that weaken review boundaries, or MCP servers that expand agent authority.
@@ -42,6 +45,12 @@ Install from npm:
42
45
  npx awguard .
43
46
  ```
44
47
 
48
+ Generate a starter config, GitHub Action, baseline command, and badge snippet:
49
+
50
+ ```bash
51
+ npx awguard init
52
+ ```
53
+
45
54
  ## Use In GitHub Actions
46
55
 
47
56
  After you upload this repository to GitHub, users can add:
@@ -113,7 +122,9 @@ jobs:
113
122
  ## CLI
114
123
 
115
124
  ```bash
116
- awguard [path] [--config file] [--preset name] [--format text|json|markdown|github|sarif|graph|html|migration|score|badge|inventory] [--output file] [--baseline file] [--write-baseline file] [--fix-dry-run] [--fail-on none|low|medium|high|critical]
125
+ awguard [path] [--config file] [--preset name] [--format text|json|markdown|github|sarif|graph|html|migration|score|badge|inventory|inventory-json] [--output file] [--baseline file] [--write-baseline file] [--fix-dry-run] [--fail-on none|low|medium|high|critical]
126
+ awguard init
127
+ awguard --compare previous.json current.json
117
128
  ```
118
129
 
119
130
  Examples:
@@ -125,6 +136,7 @@ node ./bin/awguard.js . --preset strict --format graph
125
136
  node ./bin/awguard.js . --format html --output awguard-report.html
126
137
  node ./bin/awguard.js . --format migration --output awguard-migration.md
127
138
  node ./bin/awguard.js . --format inventory
139
+ node ./bin/awguard.js . --format inventory-json --output awguard-inventory.json
128
140
  node ./bin/awguard.js . --format score
129
141
  node ./bin/awguard.js . --format badge --output awguard-badge.json
130
142
  node ./bin/awguard.js . --fix-dry-run
@@ -132,6 +144,7 @@ node ./bin/awguard.js . --format markdown --fail-on medium
132
144
  node ./bin/awguard.js . --format sarif --output awguard.sarif --fail-on none
133
145
  node ./bin/awguard.js . --write-baseline awguard.baseline.json
134
146
  node ./bin/awguard.js . --baseline awguard.baseline.json --fail-on high
147
+ node ./bin/awguard.js --compare old-awguard.json new-awguard.json
135
148
  node ./bin/awguard.js . --format github --fail-on high
136
149
  ```
137
150
 
@@ -252,6 +265,40 @@ node ./bin/awguard.js . --format inventory
252
265
 
253
266
  The inventory groups scanned files into GitHub Actions workflows, persistent agent context files, and MCP configs. It shows which surfaces exist, which rules fired, and what to review next. This is useful before a team enables new coding agents because it answers: "Where can agents read instructions, get tools, or act in CI?"
254
267
 
268
+ For dashboards, use JSON:
269
+
270
+ ```bash
271
+ node ./bin/awguard.js . --format inventory-json --output awguard-inventory.json
272
+ ```
273
+
274
+ ## Compare Reports
275
+
276
+ Track newly introduced agentic risk across branches or releases:
277
+
278
+ ```bash
279
+ node ./bin/awguard.js . --format json --output current-awguard.json
280
+ node ./bin/awguard.js --compare previous-awguard.json current-awguard.json
281
+ ```
282
+
283
+ The comparison report shows introduced findings, resolved findings, added scanned files, and removed scanned files.
284
+
285
+ ## Policy Mode
286
+
287
+ Policy mode makes new agent surfaces visible during review. Add allowlists to `awguard.config.json`:
288
+
289
+ ```json
290
+ {
291
+ "policy": {
292
+ "approvedFiles": ["AGENTS.md", ".github/workflows/*"],
293
+ "approvedMcpServers": ["github"],
294
+ "approvedMcpPackages": ["@modelcontextprotocol/server-github@1.2.3"],
295
+ "approvedMcpCommands": ["npx", "node"]
296
+ }
297
+ }
298
+ ```
299
+
300
+ Anything outside the policy is reported as `AWG015`.
301
+
255
302
  ## Agent Context Guard
256
303
 
257
304
  AWGuard also scans persistent agent instruction files:
@@ -327,6 +374,11 @@ If you omit rule ids, the suppression applies to all findings on the target line
327
374
  | AWG012 | High/Critical | Agent instruction files that weaken approval, permission, or secret boundaries |
328
375
  | AWG013 | High | MCP configs that start mutable packages, unpinned containers, or shell wrappers |
329
376
  | AWG014 | Critical | MCP configs that hardcode secrets, tokens, passwords, or auth headers |
377
+ | AWG015 | Medium | Agentic surfaces, MCP servers, packages, or commands not approved by policy |
378
+
379
+ ## How It Compares
380
+
381
+ See [docs/comparison.md](docs/comparison.md) for how AWGuard fits beside `zizmor`, `actionlint`, OpenSSF Scorecard, secret scanners, and MCP runtime scanners.
330
382
 
331
383
  ## Example Finding
332
384
 
@@ -351,6 +403,10 @@ If you omit rule ids, the suppression applies to all findings on the target line
351
403
  - Rule packs for Claude Code, Codex, Gemini, Copilot, Aider, and custom agents.
352
404
  - Public vulnerable workflow lab with attack and fix walkthroughs.
353
405
 
406
+ ## Contributing And Security
407
+
408
+ Contributions are welcome. Start with [CONTRIBUTING.md](CONTRIBUTING.md), and report sensitive security issues using [SECURITY.md](SECURITY.md).
409
+
354
410
  ## Research Backing
355
411
 
356
412
  See [docs/market-analysis.md](docs/market-analysis.md) for the demand analysis, gap, audience, and launch plan.
package/action.yml CHANGED
@@ -7,7 +7,7 @@ inputs:
7
7
  required: false
8
8
  default: .
9
9
  format:
10
- description: Output format: github, text, json, markdown, sarif, graph, html, migration, score, badge, or inventory.
10
+ description: Output format: github, text, json, markdown, sarif, graph, html, migration, score, badge, inventory, or inventory-json.
11
11
  required: false
12
12
  default: github
13
13
  fail-on:
@@ -15,7 +15,7 @@ inputs:
15
15
  required: false
16
16
  default: high
17
17
  output:
18
- description: Optional file path for json, markdown, sarif, graph, html, migration, score, or badge output.
18
+ description: Optional file path for json, markdown, sarif, graph, html, migration, score, badge, inventory, or inventory-json output.
19
19
  required: false
20
20
  default: ''
21
21
  baseline:
@@ -0,0 +1,19 @@
1
+ <svg xmlns="http://www.w3.org/2000/svg" width="920" height="430" viewBox="0 0 920 430" role="img" aria-labelledby="title desc">
2
+ <title id="title">Agentic Workflow Guard terminal demo</title>
3
+ <desc id="desc">A terminal-style screenshot showing AWGuard inventory and MCP findings.</desc>
4
+ <rect width="920" height="430" rx="10" fill="#101820"/>
5
+ <rect x="0" y="0" width="920" height="42" rx="10" fill="#17242f"/>
6
+ <circle cx="24" cy="21" r="6" fill="#ff5f57"/>
7
+ <circle cx="44" cy="21" r="6" fill="#ffbd2e"/>
8
+ <circle cx="64" cy="21" r="6" fill="#28c840"/>
9
+ <text x="88" y="27" fill="#d8e6ee" font-family="Menlo, Consolas, monospace" font-size="14">awguard demo</text>
10
+ <text x="28" y="78" fill="#7dd3fc" font-family="Menlo, Consolas, monospace" font-size="16">$ npx awguard . --format inventory</text>
11
+ <text x="28" y="118" fill="#e7f4f2" font-family="Menlo, Consolas, monospace" font-size="16">Agentic Surface Inventory</text>
12
+ <text x="28" y="154" fill="#a7f3d0" font-family="Menlo, Consolas, monospace" font-size="14">✓ GitHub Actions workflows: 2 files, 0 findings</text>
13
+ <text x="28" y="184" fill="#fde68a" font-family="Menlo, Consolas, monospace" font-size="14">! Agent context files: 1 file, AWG012</text>
14
+ <text x="28" y="214" fill="#fca5a5" font-family="Menlo, Consolas, monospace" font-size="14">! MCP configs: 1 file, AWG013, AWG014</text>
15
+ <text x="28" y="260" fill="#7dd3fc" font-family="Menlo, Consolas, monospace" font-size="16">$ npx awguard examples/.mcp.json --fix-dry-run</text>
16
+ <text x="28" y="300" fill="#fca5a5" font-family="Menlo, Consolas, monospace" font-size="14">CRITICAL AWG014 MCP config hardcodes secrets or auth material</text>
17
+ <text x="28" y="330" fill="#fdba74" font-family="Menlo, Consolas, monospace" font-size="14">HIGH AWG013 MCP config starts mutable tool servers</text>
18
+ <text x="28" y="372" fill="#d8e6ee" font-family="Menlo, Consolas, monospace" font-size="14">Fix: pin tool packages, move credentials to prompts/env, and review policy drift.</text>
19
+ </svg>
@@ -0,0 +1,23 @@
1
+ # Comparison
2
+
3
+ AWGuard is intentionally narrow. It should sit beside general CI/CD and AI security tools, not replace them.
4
+
5
+ | Tool | Main job | Where AWGuard differs |
6
+ | --- | --- | --- |
7
+ | `zizmor` | General GitHub Actions security analysis | AWGuard focuses on AI-agent prompt, tool, MCP, and repository instruction paths. |
8
+ | `actionlint` | GitHub Actions syntax and workflow linting | AWGuard looks for agentic trust-boundary risk, not YAML correctness. |
9
+ | OpenSSF Scorecard | Open-source project security posture | AWGuard gives an Agentic Workflow Injection score and agent surface inventory. |
10
+ | MCP runtime scanners | Inspect live MCP servers and tool descriptions | AWGuard scans repository MCP configs without executing server commands. |
11
+ | Secret scanners | Find committed secrets | AWGuard connects MCP/agent secret exposure to agent capabilities and remediation. |
12
+
13
+ ## Best Stack
14
+
15
+ Use these together:
16
+
17
+ ```text
18
+ actionlint -> workflow correctness
19
+ zizmor -> broad GitHub Actions hardening
20
+ OpenSSF Scorecard -> project posture
21
+ secret scanning -> committed credentials
22
+ AWGuard -> agentic workflow, context, and MCP trust boundaries
23
+ ```
@@ -10,56 +10,64 @@ Short pitch:
10
10
 
11
11
  ## Star-Worthy Demo
12
12
 
13
- 1. Show `examples/unsafe-agent.yml`.
14
- 2. Run:
13
+ 1. Show the terminal demo image in `docs/assets/terminal-demo.svg`.
14
+ 2. Show `examples/unsafe-agent.yml`.
15
+ 3. Run:
15
16
 
16
17
  ```bash
17
18
  node ./bin/awguard.js examples/unsafe-agent.yml --format graph
18
19
  ```
19
20
 
20
- 3. Show the generated Mermaid chain.
21
- 4. Run:
21
+ 4. Show the generated Mermaid chain.
22
+ 5. Run:
22
23
 
23
24
  ```bash
24
25
  node ./bin/awguard.js examples/unsafe-agent.yml --fix-dry-run
25
26
  ```
26
27
 
27
- 5. Show the safe remediation steps.
28
- 6. Run:
28
+ 6. Show the safe remediation steps.
29
+ 7. Run:
29
30
 
30
31
  ```bash
31
32
  node ./bin/awguard.js examples/unsafe-agent.yml --format migration
32
33
  ```
33
34
 
34
- 7. Show the migration from unsafe agent job to read-only proposal job plus safe outputs or an approved apply job.
35
- 8. Run:
35
+ 8. Show the migration from unsafe agent job to read-only proposal job plus safe outputs or an approved apply job.
36
+ 9. Run:
36
37
 
37
38
  ```bash
38
39
  node ./bin/awguard.js . --format score
39
40
  ```
40
41
 
41
- 9. Show the README badge and say: "Add an AWI risk badge to your repo before adding AI agents to CI."
42
- 10. Run:
42
+ 10. Show the README badge and say: "Add an AWI risk badge to your repo before adding AI agents to CI."
43
+ 11. Run:
43
44
 
44
45
  ```bash
45
46
  node ./bin/awguard.js . --format inventory
46
47
  ```
47
48
 
48
- 11. Show the surface map and say: "Before you secure agent workflows, find every place the repository gives agents instructions or tools."
49
- 12. Show an unsafe `AGENTS.md` or `.github/copilot-instructions.md` line and run:
49
+ 12. Show the surface map and say: "Before you secure agent workflows, find every place the repository gives agents instructions or tools."
50
+ 13. Run:
51
+
52
+ ```bash
53
+ node ./bin/awguard.js init
54
+ ```
55
+
56
+ 14. Show the one-command setup guide.
57
+ 15. Show an unsafe `AGENTS.md` or `.github/copilot-instructions.md` line and run:
50
58
 
51
59
  ```bash
52
60
  node ./bin/awguard.js . --format text
53
61
  ```
54
62
 
55
- 13. Explain that AWGuard scans both the workflow and the persistent agent instructions that shape agent behavior.
56
- 14. Show an unsafe `.mcp.json` with `npx @modelcontextprotocol/server-github` and a committed token, then run:
63
+ 16. Explain that AWGuard scans both the workflow and the persistent agent instructions that shape agent behavior.
64
+ 17. Show an unsafe `.mcp.json` with `npx @modelcontextprotocol/server-github` and a committed token, then run:
57
65
 
58
66
  ```bash
59
67
  node ./bin/awguard.js examples/.mcp.json --format text
60
68
  ```
61
69
 
62
- 15. Explain the new hook: "This scanner checks repo-provided MCP tool wiring without executing the MCP server."
70
+ 18. Explain the new hook: "This scanner checks repo-provided MCP tool wiring without executing the MCP server."
63
71
 
64
72
  ## Release Checklist
65
73
 
@@ -211,7 +211,9 @@ Agentic Workflow Guard now supports:
211
211
 
212
212
  - `--format inventory` for a surface map grouped by workflows, agent context files, and MCP configs.
213
213
  - scanning `.github/agents/*.md`, `.github/prompts/*.prompt.md`, and `.github/skills/**/SKILL.md` as persistent agent context.
214
- - a roadmap that moves toward policy mode, agent capability SBOMs, trend reports, and adoption generators.
214
+ - `awguard init` for adoption snippets, `--format inventory-json` for dashboards, and `--compare` for trend reports.
215
+ - first policy allowlists for approved files, MCP servers, MCP packages, and MCP commands.
216
+ - a roadmap that moves toward agent capability SBOMs, richer policy ownership, and hosted monitoring.
215
217
 
216
218
  This widens the project while preserving its niche: AWGuard remains a zero-execution repository scanner for agentic risk, not a broad runtime agent firewall.
217
219
 
@@ -0,0 +1,40 @@
1
+ # GitHub Marketplace Listing Draft
2
+
3
+ ## Name
4
+
5
+ Agentic Workflow Guard
6
+
7
+ ## Short Description
8
+
9
+ Scan GitHub Actions, agent instruction files, and MCP configs for AI-agent injection risk.
10
+
11
+ ## Categories
12
+
13
+ - Security
14
+ - Code quality
15
+ - Utilities
16
+
17
+ ## Full Description
18
+
19
+ Agentic Workflow Guard finds where untrusted GitHub issue, pull request, comment, branch, or artifact text can steer AI agents inside CI.
20
+
21
+ It scans:
22
+
23
+ - GitHub Actions workflows;
24
+ - persistent agent instruction files such as `AGENTS.md`, Copilot instructions, custom agents, prompts, and skills;
25
+ - MCP configs such as `.mcp.json`, `.vscode/mcp.json`, Cursor, Windsurf, Cline, and Roo config files.
26
+
27
+ Outputs include GitHub annotations, SARIF for code scanning, attack graphs, migration plans, AWI scorecards, badges, and agentic surface inventory reports.
28
+
29
+ ## Example
30
+
31
+ ```yaml
32
+ - uses: Mughal-Baig/agentic-workflow-guard@v0
33
+ with:
34
+ preset: strict
35
+ fail-on: high
36
+ ```
37
+
38
+ ## Suggested Release Note
39
+
40
+ Use this Action before adding AI agents, custom prompts, or MCP tools to a repository.
package/docs/roadmap.md CHANGED
@@ -54,15 +54,19 @@ Current research points:
54
54
 
55
55
  ### Now
56
56
 
57
- - Ship `--format inventory`.
58
- - Expand `AWG012` coverage to Copilot custom agents, prompts, and skills.
59
- - Document the widened project roadmap.
57
+ - Shipped `--format inventory`.
58
+ - Shipped `--format inventory-json`.
59
+ - Shipped `awguard init`.
60
+ - Shipped `--compare previous.json current.json`.
61
+ - Shipped first policy allowlists with `AWG015`.
62
+ - Expanded `AWG012` coverage to Copilot custom agents, prompts, and skills.
63
+ - Added Docker, GitLab CI, pre-commit, VS Code task, Marketplace, comparison, visual demo, and vulnerable lab assets.
60
64
 
61
65
  ### Next
62
66
 
63
- - Add policy mode for MCP server allowlists and approved agent context files.
64
- - Add a setup generator for the GitHub Action, config, baseline, and README badge.
65
- - Add JSON inventory output for downstream dashboards.
67
+ - Add agent capability SBOM export for prompts, tools, MCP servers, permissions, and write paths.
68
+ - Add safer patch previews for common workflow permission fixes.
69
+ - Add richer policy ownership fields for approved file owners and review cadence.
66
70
 
67
71
  ### Later
68
72
 
@@ -0,0 +1,251 @@
1
+ <!doctype html>
2
+ <html lang="en">
3
+ <head>
4
+ <meta charset="utf-8">
5
+ <meta name="viewport" content="width=device-width, initial-scale=1">
6
+ <meta
7
+ name="description"
8
+ content="Agentic Workflow Guard maps AI-agent workflow, instruction, and MCP trust boundaries in repositories."
9
+ >
10
+ <title>Agentic Workflow Guard</title>
11
+ <style>
12
+ :root {
13
+ color-scheme: light;
14
+ --ink: #17212b;
15
+ --muted: #5f6e7b;
16
+ --line: #d9e1e8;
17
+ --paper: #f7fafc;
18
+ --panel: #ffffff;
19
+ --accent: #0f766e;
20
+ --accent-strong: #134e4a;
21
+ }
22
+
23
+ * {
24
+ box-sizing: border-box;
25
+ }
26
+
27
+ body {
28
+ margin: 0;
29
+ background: var(--paper);
30
+ color: var(--ink);
31
+ font-family:
32
+ Inter, ui-sans-serif, system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", sans-serif;
33
+ line-height: 1.55;
34
+ }
35
+
36
+ a {
37
+ color: var(--accent-strong);
38
+ }
39
+
40
+ .hero {
41
+ border-bottom: 1px solid var(--line);
42
+ background: var(--panel);
43
+ }
44
+
45
+ .wrap {
46
+ width: min(1120px, calc(100% - 40px));
47
+ margin: 0 auto;
48
+ }
49
+
50
+ .hero .wrap {
51
+ display: grid;
52
+ grid-template-columns: minmax(0, 1.05fr) minmax(320px, 0.95fr);
53
+ gap: 44px;
54
+ align-items: center;
55
+ min-height: 86vh;
56
+ padding: 64px 0 40px;
57
+ }
58
+
59
+ .eyebrow {
60
+ margin: 0 0 14px;
61
+ color: var(--accent);
62
+ font-size: 0.78rem;
63
+ font-weight: 750;
64
+ letter-spacing: 0;
65
+ text-transform: uppercase;
66
+ }
67
+
68
+ h1 {
69
+ margin: 0;
70
+ max-width: 820px;
71
+ font-size: clamp(2.45rem, 7vw, 5.6rem);
72
+ line-height: 0.96;
73
+ letter-spacing: 0;
74
+ }
75
+
76
+ .lead {
77
+ max-width: 680px;
78
+ margin: 24px 0 0;
79
+ color: var(--muted);
80
+ font-size: 1.18rem;
81
+ }
82
+
83
+ .actions {
84
+ display: flex;
85
+ flex-wrap: wrap;
86
+ gap: 12px;
87
+ margin-top: 30px;
88
+ }
89
+
90
+ .button {
91
+ display: inline-flex;
92
+ min-height: 44px;
93
+ align-items: center;
94
+ justify-content: center;
95
+ border: 1px solid var(--line);
96
+ border-radius: 8px;
97
+ padding: 10px 15px;
98
+ background: var(--panel);
99
+ color: var(--ink);
100
+ font-weight: 720;
101
+ text-decoration: none;
102
+ }
103
+
104
+ .button.primary {
105
+ border-color: var(--accent);
106
+ background: var(--accent);
107
+ color: #ffffff;
108
+ }
109
+
110
+ .terminal {
111
+ width: 100%;
112
+ border: 1px solid var(--line);
113
+ border-radius: 8px;
114
+ background: #0c1117;
115
+ box-shadow: 0 18px 45px rgb(23 33 43 / 12%);
116
+ }
117
+
118
+ section {
119
+ padding: 46px 0;
120
+ }
121
+
122
+ h2 {
123
+ margin: 0 0 18px;
124
+ font-size: 1.35rem;
125
+ letter-spacing: 0;
126
+ }
127
+
128
+ .grid {
129
+ display: grid;
130
+ grid-template-columns: repeat(3, minmax(0, 1fr));
131
+ gap: 16px;
132
+ }
133
+
134
+ .item {
135
+ min-height: 144px;
136
+ border: 1px solid var(--line);
137
+ border-radius: 8px;
138
+ padding: 18px;
139
+ background: var(--panel);
140
+ }
141
+
142
+ .item h3 {
143
+ margin: 0 0 8px;
144
+ font-size: 1rem;
145
+ }
146
+
147
+ .item p {
148
+ margin: 0;
149
+ color: var(--muted);
150
+ }
151
+
152
+ code {
153
+ border: 1px solid var(--line);
154
+ border-radius: 6px;
155
+ padding: 2px 5px;
156
+ background: #eef4f8;
157
+ font-size: 0.9em;
158
+ }
159
+
160
+ footer {
161
+ border-top: 1px solid var(--line);
162
+ padding: 24px 0 34px;
163
+ color: var(--muted);
164
+ }
165
+
166
+ @media (max-width: 850px) {
167
+ .hero .wrap {
168
+ grid-template-columns: 1fr;
169
+ gap: 30px;
170
+ min-height: auto;
171
+ padding-top: 46px;
172
+ }
173
+
174
+ .grid {
175
+ grid-template-columns: 1fr;
176
+ }
177
+ }
178
+ </style>
179
+ </head>
180
+ <body>
181
+ <main>
182
+ <header class="hero">
183
+ <div class="wrap">
184
+ <div>
185
+ <p class="eyebrow">AI workflow security scanner</p>
186
+ <h1>Agentic Workflow Guard</h1>
187
+ <p class="lead">
188
+ Map every place a repository gives AI agents instructions, tools, secrets, or write power,
189
+ then turn that map into findings, reports, and safer pull request checks.
190
+ </p>
191
+ <div class="actions">
192
+ <a class="button primary" href="https://github.com/Mughal-Baig/agentic-workflow-guard">GitHub</a>
193
+ <a class="button" href="https://www.npmjs.com/package/awguard">npm</a>
194
+ <a class="button" href="https://github.com/Mughal-Baig/agentic-workflow-guard/blob/main/docs/comparison.md">Comparison</a>
195
+ </div>
196
+ </div>
197
+ <img
198
+ class="terminal"
199
+ src="assets/terminal-demo.svg"
200
+ alt="AWGuard terminal demo showing inventory, score, migration, and graph reports"
201
+ >
202
+ </div>
203
+ </header>
204
+
205
+ <section>
206
+ <div class="wrap">
207
+ <h2>What It Scans</h2>
208
+ <div class="grid">
209
+ <article class="item">
210
+ <h3>Agent Instructions</h3>
211
+ <p>Finds AGENTS.md, Copilot instructions, custom agents, prompts, and reusable skills.</p>
212
+ </article>
213
+ <article class="item">
214
+ <h3>Automation Paths</h3>
215
+ <p>Reviews GitHub Actions and other workflow files for unsafe agent execution boundaries.</p>
216
+ </article>
217
+ <article class="item">
218
+ <h3>MCP Trust</h3>
219
+ <p>Flags unapproved MCP servers, package launches, command tools, and environment exposure.</p>
220
+ </article>
221
+ </div>
222
+ </div>
223
+ </section>
224
+
225
+ <section>
226
+ <div class="wrap">
227
+ <h2>Reports Built For Adoption</h2>
228
+ <div class="grid">
229
+ <article class="item">
230
+ <h3>Inventory</h3>
231
+ <p><code>--format inventory</code> and <code>inventory-json</code> explain the agentic surface.</p>
232
+ </article>
233
+ <article class="item">
234
+ <h3>Risk Score</h3>
235
+ <p><code>--format score</code> gives teams a compact AWI score they can track over time.</p>
236
+ </article>
237
+ <article class="item">
238
+ <h3>Compare</h3>
239
+ <p><code>--compare old.json new.json</code> shows introduced and resolved findings between scans.</p>
240
+ </article>
241
+ </div>
242
+ </div>
243
+ </section>
244
+ </main>
245
+ <footer>
246
+ <div class="wrap">
247
+ Released as open source. Start with <code>npx awguard@latest init</code>.
248
+ </div>
249
+ </footer>
250
+ </body>
251
+ </html>
@@ -0,0 +1,6 @@
1
+ awguard:
2
+ image: node:20
3
+ stage: test
4
+ script:
5
+ - npx awguard@latest . --format inventory
6
+ - npx awguard@latest . --fail-on high
@@ -0,0 +1,17 @@
1
+ {
2
+ "version": "2.0.0",
3
+ "tasks": [
4
+ {
5
+ "label": "awguard inventory",
6
+ "type": "shell",
7
+ "command": "npx awguard@latest . --format inventory",
8
+ "problemMatcher": []
9
+ },
10
+ {
11
+ "label": "awguard scan",
12
+ "type": "shell",
13
+ "command": "npx awguard@latest . --fail-on high",
14
+ "problemMatcher": []
15
+ }
16
+ ]
17
+ }
@@ -7,6 +7,8 @@
7
7
  - `.github/copilot-instructions.md`: demonstrates risky persistent agent instruction guidance.
8
8
  - `.mcp.json`: demonstrates mutable MCP server packages and committed MCP credentials.
9
9
  - `awguard.config.example.json`: sample config with a strict preset and overrides.
10
+ - `lab/`: vulnerable and fixed mini-repositories for demos.
11
+ - `.gitlab-ci.yml`, `pre-commit-config.yaml`, `.vscode/tasks.json`: adoption examples for other workflows.
10
12
 
11
13
  Try:
12
14
 
@@ -15,9 +17,11 @@ node ../bin/awguard.js unsafe-agent.yml --format graph
15
17
  node ../bin/awguard.js unsafe-agent.yml --format html --output awguard-report.html
16
18
  node ../bin/awguard.js unsafe-agent.yml --format migration
17
19
  node ../bin/awguard.js . --format inventory
20
+ node ../bin/awguard.js . --format inventory-json
18
21
  node ../bin/awguard.js unsafe-agent.yml --format score
19
22
  node ../bin/awguard.js safe-agent.yml --format badge
20
23
  node ../bin/awguard.js .mcp.json --format text
21
24
  node ../bin/awguard.js . --format text
25
+ node ../bin/awguard.js init
22
26
  node ../bin/awguard.js unsafe-agent.yml --fix-dry-run
23
27
  ```
@@ -10,5 +10,11 @@
10
10
  "suppressions": {
11
11
  "allowedRules": ["AWG001", "AWG002"],
12
12
  "minimumReasonLength": 20
13
+ },
14
+ "policy": {
15
+ "approvedFiles": ["AGENTS.md", ".github/workflows/*"],
16
+ "approvedMcpServers": ["github"],
17
+ "approvedMcpPackages": ["@modelcontextprotocol/server-github@1.2.3"],
18
+ "approvedMcpCommands": ["npx", "node"]
13
19
  }
14
20
  }