tribunal-kit 2.4.6 → 3.0.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/.agent/agents/accessibility-reviewer.md +220 -134
- package/.agent/agents/ai-code-reviewer.md +233 -129
- package/.agent/agents/backend-specialist.md +238 -178
- package/.agent/agents/code-archaeologist.md +181 -119
- package/.agent/agents/database-architect.md +207 -164
- package/.agent/agents/debugger.md +218 -151
- package/.agent/agents/dependency-reviewer.md +136 -55
- package/.agent/agents/devops-engineer.md +238 -175
- package/.agent/agents/documentation-writer.md +221 -137
- package/.agent/agents/explorer-agent.md +180 -142
- package/.agent/agents/frontend-reviewer.md +194 -80
- package/.agent/agents/frontend-specialist.md +237 -188
- package/.agent/agents/game-developer.md +52 -184
- package/.agent/agents/logic-reviewer.md +149 -78
- package/.agent/agents/mobile-developer.md +223 -152
- package/.agent/agents/mobile-reviewer.md +195 -79
- package/.agent/agents/orchestrator.md +211 -170
- package/.agent/agents/penetration-tester.md +174 -131
- package/.agent/agents/performance-optimizer.md +203 -139
- package/.agent/agents/performance-reviewer.md +211 -108
- package/.agent/agents/product-manager.md +162 -108
- package/.agent/agents/project-planner.md +162 -142
- package/.agent/agents/qa-automation-engineer.md +242 -138
- package/.agent/agents/security-auditor.md +194 -170
- package/.agent/agents/seo-specialist.md +213 -132
- package/.agent/agents/sql-reviewer.md +194 -73
- package/.agent/agents/supervisor-agent.md +203 -156
- package/.agent/agents/test-coverage-reviewer.md +193 -81
- package/.agent/agents/type-safety-reviewer.md +208 -65
- package/.agent/scripts/__pycache__/auto_preview.cpython-311.pyc +0 -0
- package/.agent/scripts/__pycache__/bundle_analyzer.cpython-311.pyc +0 -0
- package/.agent/scripts/__pycache__/checklist.cpython-311.pyc +0 -0
- package/.agent/scripts/__pycache__/dependency_analyzer.cpython-311.pyc +0 -0
- package/.agent/scripts/__pycache__/security_scan.cpython-311.pyc +0 -0
- package/.agent/scripts/__pycache__/session_manager.cpython-311.pyc +0 -0
- package/.agent/scripts/__pycache__/skill_integrator.cpython-311.pyc +0 -0
- package/.agent/scripts/__pycache__/swarm_dispatcher.cpython-311.pyc +0 -0
- package/.agent/scripts/__pycache__/test_runner.cpython-311.pyc +0 -0
- package/.agent/scripts/__pycache__/verify_all.cpython-311.pyc +0 -0
- package/.agent/skills/agent-organizer/SKILL.md +126 -132
- package/.agent/skills/ai-prompt-injection-defense/SKILL.md +155 -66
- package/.agent/skills/api-patterns/SKILL.md +289 -257
- package/.agent/skills/api-security-auditor/SKILL.md +172 -70
- package/.agent/skills/app-builder/templates/chrome-extension/TEMPLATE.md +1 -1
- package/.agent/skills/app-builder/templates/electron-desktop/TEMPLATE.md +1 -1
- package/.agent/skills/appflow-wireframe/SKILL.md +107 -100
- package/.agent/skills/architecture/SKILL.md +331 -200
- package/.agent/skills/authentication-best-practices/SKILL.md +168 -67
- package/.agent/skills/bash-linux/SKILL.md +154 -215
- package/.agent/skills/brainstorming/SKILL.md +104 -210
- package/.agent/skills/building-native-ui/SKILL.md +169 -70
- package/.agent/skills/clean-code/SKILL.md +360 -206
- package/.agent/skills/config-validator/SKILL.md +141 -165
- package/.agent/skills/csharp-developer/SKILL.md +528 -107
- package/.agent/skills/database-design/SKILL.md +455 -275
- package/.agent/skills/deployment-procedures/SKILL.md +145 -188
- package/.agent/skills/devops-engineer/SKILL.md +332 -134
- package/.agent/skills/devops-incident-responder/SKILL.md +113 -98
- package/.agent/skills/edge-computing/SKILL.md +157 -213
- package/.agent/skills/extract-design-system/SKILL.md +129 -69
- package/.agent/skills/framer-motion-expert/SKILL.md +939 -0
- package/.agent/skills/game-design-expert/SKILL.md +105 -0
- package/.agent/skills/game-engineering-expert/SKILL.md +122 -0
- package/.agent/skills/geo-fundamentals/SKILL.md +124 -215
- package/.agent/skills/github-operations/SKILL.md +314 -354
- package/.agent/skills/gsap-expert/SKILL.md +901 -0
- package/.agent/skills/i18n-localization/SKILL.md +138 -216
- package/.agent/skills/intelligent-routing/SKILL.md +127 -139
- package/.agent/skills/llm-engineering/SKILL.md +357 -258
- package/.agent/skills/local-first/SKILL.md +154 -203
- package/.agent/skills/mcp-builder/SKILL.md +118 -224
- package/.agent/skills/nextjs-react-expert/SKILL.md +783 -203
- package/.agent/skills/nodejs-best-practices/SKILL.md +559 -280
- package/.agent/skills/observability/SKILL.md +330 -285
- package/.agent/skills/parallel-agents/SKILL.md +122 -181
- package/.agent/skills/performance-profiling/SKILL.md +254 -197
- package/.agent/skills/plan-writing/SKILL.md +118 -188
- package/.agent/skills/platform-engineer/SKILL.md +123 -135
- package/.agent/skills/playwright-best-practices/SKILL.md +157 -76
- package/.agent/skills/powershell-windows/SKILL.md +146 -230
- package/.agent/skills/python-pro/SKILL.md +879 -114
- package/.agent/skills/react-specialist/SKILL.md +931 -108
- package/.agent/skills/realtime-patterns/SKILL.md +304 -296
- package/.agent/skills/rust-pro/SKILL.md +701 -240
- package/.agent/skills/seo-fundamentals/SKILL.md +154 -181
- package/.agent/skills/server-management/SKILL.md +190 -212
- package/.agent/skills/shadcn-ui-expert/SKILL.md +201 -68
- package/.agent/skills/sql-pro/SKILL.md +633 -104
- package/.agent/skills/swiftui-expert/SKILL.md +171 -70
- package/.agent/skills/systematic-debugging/SKILL.md +118 -186
- package/.agent/skills/tailwind-patterns/SKILL.md +576 -232
- package/.agent/skills/tdd-workflow/SKILL.md +137 -209
- package/.agent/skills/testing-patterns/SKILL.md +573 -205
- package/.agent/skills/vue-expert/SKILL.md +964 -119
- package/.agent/skills/vulnerability-scanner/SKILL.md +269 -316
- package/.agent/skills/web-accessibility-auditor/SKILL.md +188 -71
- package/.agent/skills/webapp-testing/SKILL.md +145 -236
- package/.agent/workflows/api-tester.md +151 -279
- package/.agent/workflows/audit.md +138 -168
- package/.agent/workflows/brainstorm.md +110 -146
- package/.agent/workflows/changelog.md +112 -144
- package/.agent/workflows/create.md +124 -139
- package/.agent/workflows/debug.md +189 -196
- package/.agent/workflows/deploy.md +189 -153
- package/.agent/workflows/enhance.md +151 -139
- package/.agent/workflows/fix.md +135 -143
- package/.agent/workflows/generate.md +157 -164
- package/.agent/workflows/migrate.md +160 -163
- package/.agent/workflows/orchestrate.md +168 -151
- package/.agent/workflows/performance-benchmarker.md +123 -305
- package/.agent/workflows/plan.md +173 -151
- package/.agent/workflows/preview.md +80 -137
- package/.agent/workflows/refactor.md +183 -153
- package/.agent/workflows/review-ai.md +129 -140
- package/.agent/workflows/review.md +116 -155
- package/.agent/workflows/session.md +94 -154
- package/.agent/workflows/status.md +79 -125
- package/.agent/workflows/strengthen-skills.md +139 -99
- package/.agent/workflows/swarm.md +179 -194
- package/.agent/workflows/test.md +211 -166
- package/.agent/workflows/tribunal-backend.md +113 -111
- package/.agent/workflows/tribunal-database.md +115 -132
- package/.agent/workflows/tribunal-frontend.md +118 -115
- package/.agent/workflows/tribunal-full.md +133 -136
- package/.agent/workflows/tribunal-mobile.md +119 -123
- package/.agent/workflows/tribunal-performance.md +133 -152
- package/.agent/workflows/ui-ux-pro-max.md +143 -171
- package/README.md +11 -15
- package/package.json +1 -1
- package/.agent/skills/dotnet-core-expert/SKILL.md +0 -103
- package/.agent/skills/framer-motion-animations/SKILL.md +0 -74
- package/.agent/skills/game-development/2d-games/SKILL.md +0 -119
- package/.agent/skills/game-development/3d-games/SKILL.md +0 -135
- package/.agent/skills/game-development/SKILL.md +0 -236
- package/.agent/skills/game-development/game-art/SKILL.md +0 -185
- package/.agent/skills/game-development/game-audio/SKILL.md +0 -190
- package/.agent/skills/game-development/game-design/SKILL.md +0 -129
- package/.agent/skills/game-development/mobile-games/SKILL.md +0 -108
- package/.agent/skills/game-development/multiplayer/SKILL.md +0 -132
- package/.agent/skills/game-development/pc-games/SKILL.md +0 -144
- package/.agent/skills/game-development/vr-ar/SKILL.md +0 -123
- package/.agent/skills/game-development/web-games/SKILL.md +0 -150
|
@@ -1,81 +1,162 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: playwright-best-practices
|
|
3
|
-
description: End-to-
|
|
3
|
+
description: Playwright End-to-End (E2E) testing mastery. Resilient selectors, auto-waiting mechanisms, parallel test execution, mocking network requests, fixture management, and cross-browser CI configurations. Use when configuring, deploying, or writing E2E web tests.
|
|
4
4
|
allowed-tools: Read, Write, Edit, Glob, Grep
|
|
5
|
-
version:
|
|
6
|
-
last-updated: 2026-
|
|
7
|
-
applies-to-model: claude-3-7-sonnet
|
|
5
|
+
version: 2.0.0
|
|
6
|
+
last-updated: 2026-04-02
|
|
7
|
+
applies-to-model: gemini-2.5-pro, claude-3-7-sonnet
|
|
8
8
|
---
|
|
9
9
|
|
|
10
|
-
# Playwright
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
10
|
+
# Playwright E2E — Bulletproof Testing Mastery
|
|
11
|
+
|
|
12
|
+
> E2E tests prove the system works. Flaky tests prove nothing.
|
|
13
|
+
> Never test implementation details. Test what the user experiences.
|
|
14
|
+
|
|
15
|
+
---
|
|
16
|
+
|
|
17
|
+
## 1. Resilience & Auto-Waiting
|
|
18
|
+
|
|
19
|
+
Playwright automatically waits for elements to be actionable (visible, stable, not obscured).
|
|
20
|
+
|
|
21
|
+
```typescript
|
|
22
|
+
// ❌ FLAKY: Hardcoded sleeps. Fails on slow CI, wastes time on fast local rings.
|
|
23
|
+
await page.waitForTimeout(3000);
|
|
24
|
+
|
|
25
|
+
// ❌ FLAKY: CSS selectors tied to layout/styling changes
|
|
26
|
+
await page.locator('.btn-primary > span').click();
|
|
27
|
+
|
|
28
|
+
// ✅ ROBUST: Playwright auto-waits for actionability based on user-centric selectors
|
|
29
|
+
await page.getByRole('button', { name: "Submit Checkout" }).click();
|
|
30
|
+
|
|
31
|
+
// ✅ ROBUST: Testing for expected states
|
|
32
|
+
await expect(page.getByText('Order confirmed')).toBeVisible();
|
|
33
|
+
```
|
|
34
|
+
|
|
35
|
+
### The Selector Hierarchy (Best to Worst)
|
|
36
|
+
1. `page.getByRole()` — Checks accessibility simultaneously.
|
|
37
|
+
2. `page.getByText()` — Finds elements by raw text values.
|
|
38
|
+
3. `page.getByTestId()` — Resilient to text/translation updates (`data-testid`).
|
|
39
|
+
4. `page.locator('css')` — Brittle, bound to DOM structures. Use only as last resort.
|
|
40
|
+
|
|
41
|
+
---
|
|
42
|
+
|
|
43
|
+
## 2. Test Isolation & Fixtures
|
|
44
|
+
|
|
45
|
+
Do not cascade tests (where Test B requires Test A to pass first). Playwright gives every test a blank browser context isolated from the rest.
|
|
46
|
+
|
|
47
|
+
```typescript
|
|
48
|
+
import { test, expect } from '@playwright/test';
|
|
49
|
+
|
|
50
|
+
// ❌ BAD: Cascading state
|
|
51
|
+
test.describe('Dashboard', () => {
|
|
52
|
+
test('Login', async ({ page }) => {
|
|
53
|
+
await login(page); // Next test assumes this succeeded
|
|
54
|
+
});
|
|
55
|
+
test('Action', async ({ page }) => {
|
|
56
|
+
await page.getByRole('button', { name: 'Save' }).click();
|
|
57
|
+
});
|
|
58
|
+
});
|
|
59
|
+
|
|
60
|
+
// ✅ GOOD: Isolated tests via beforeEach or Custom Fixtures
|
|
61
|
+
test.beforeEach(async ({ page }) => {
|
|
62
|
+
// Login directly via API to bypass slow UI login, seeding cookies
|
|
63
|
+
await performFastApiLogin(page);
|
|
64
|
+
await page.goto('/dashboard');
|
|
65
|
+
});
|
|
66
|
+
|
|
67
|
+
test('Should save settings', async ({ page }) => {
|
|
68
|
+
await page.getByRole('button', { name: 'Save' }).click();
|
|
69
|
+
await expect(page.getByRole('alert')).toHaveText('Saved successfully');
|
|
70
|
+
});
|
|
71
|
+
```
|
|
72
|
+
|
|
73
|
+
---
|
|
74
|
+
|
|
75
|
+
## 3. Network Mocking
|
|
76
|
+
|
|
77
|
+
E2E tests that rely on external 3rd party APIs (Stripe, SendGrid) will fail randomly due to network latency outside your control.
|
|
78
|
+
|
|
79
|
+
```typescript
|
|
80
|
+
test('Should block invalid credit cards', async ({ page }) => {
|
|
81
|
+
// Intercept the outgoing request to the payment processor
|
|
82
|
+
await page.route('**/api/v1/charge*', async route => {
|
|
83
|
+
// Return a mocked failure response immediately
|
|
84
|
+
const json = { status: 'declined', message: 'Insufficient funds' };
|
|
85
|
+
await route.fulfill({ status: 400, json });
|
|
86
|
+
});
|
|
87
|
+
|
|
88
|
+
await page.getByRole('button', { name: 'Purchase' }).click();
|
|
89
|
+
await expect(page.getByText('Insufficient funds')).toBeVisible();
|
|
90
|
+
});
|
|
91
|
+
```
|
|
92
|
+
|
|
93
|
+
---
|
|
94
|
+
|
|
95
|
+
## 4. Configuration for CI/CD
|
|
96
|
+
|
|
97
|
+
```typescript
|
|
98
|
+
// playwright.config.ts
|
|
99
|
+
import { defineConfig, devices } from '@playwright/test';
|
|
100
|
+
|
|
101
|
+
export default defineConfig({
|
|
102
|
+
testDir: './tests/e2e',
|
|
103
|
+
fullyParallel: true, // Run tests concurrently
|
|
104
|
+
forbidOnly: !!process.env.CI, // Fail build if `.only` was left in code
|
|
105
|
+
retries: process.env.CI ? 2 : 0, // Retry flakes on CI only
|
|
106
|
+
workers: process.env.CI ? 1 : undefined, // Reduce CI overload
|
|
107
|
+
reporter: 'html',
|
|
108
|
+
|
|
109
|
+
use: {
|
|
110
|
+
trace: 'on-first-retry', // Record trace viewer ONLY on failure to save space
|
|
111
|
+
video: 'retain-on-failure',
|
|
112
|
+
baseURL: 'http://localhost:3000',
|
|
113
|
+
},
|
|
114
|
+
|
|
115
|
+
projects: [
|
|
116
|
+
{ name: 'chromium', use: { ...devices['Desktop Chrome'] } },
|
|
117
|
+
{ name: 'webkit', use: { ...devices['Desktop Safari'] } },
|
|
118
|
+
// Mobile Viewport Example
|
|
119
|
+
{ name: 'Mobile Safari', use: { ...devices['iPhone 13'] } },
|
|
120
|
+
],
|
|
121
|
+
|
|
122
|
+
// Spin up local server before running tests
|
|
123
|
+
webServer: {
|
|
124
|
+
command: 'npm run build && npm run start',
|
|
125
|
+
url: 'http://localhost:3000',
|
|
126
|
+
reuseExistingServer: !process.env.CI,
|
|
127
|
+
},
|
|
128
|
+
});
|
|
129
|
+
```
|
|
130
|
+
|
|
131
|
+
---
|
|
132
|
+
|
|
133
|
+
## 🤖 LLM-Specific Traps (Playwright)
|
|
134
|
+
|
|
135
|
+
1. **WaitTime Hallucinations:** AI constantly suggests `await page.waitForTimeout()` to "fix" failing tests. This is a severe anti-pattern. Rely on Playwright's default auto-waiting, or use `waitForURL / waitForResponse`.
|
|
136
|
+
2. **CSS Selector Blindness:** Relying on `.main > div:nth-child(3)` instead of `getByRole`. Tests will break on the next UI update.
|
|
137
|
+
3. **Cypress Confusions:** Writing Cypress syntax (`cy.get`) in Playwright files. They are fundamentally different frameworks.
|
|
138
|
+
4. **Ignoring Promises:** Playwright actions are async. The AI forgets the `await` keyword, causing the test to complete and close the browser instantly before the assertion happens.
|
|
139
|
+
5. **Slow UI Logins:** Executing full UI visual typing of username/password on *every* test. In an E2E suite of 100 tests, this adds 15 minutes. Use API logins to set browser cookies in `beforeEach` (or `globalSetup`).
|
|
140
|
+
6. **`.only` Commit Pollution:** Leaving `test.only()` in the code. Enable `forbidOnly` in `playwright.config.ts` so the CI catches it immediately.
|
|
141
|
+
7. **Trace Recording Overload:** Using `trace: 'on'` inside the CI. Tracking traces for passes consumes massive disk space. Use `trace: 'on-first-retry'`.
|
|
142
|
+
8. **Soft Assertions Abuse:** AI uses `expect.soft()` to suppress failures. If an assertion is critical, allow it to fail the test entirely.
|
|
143
|
+
9. **Clicking Hidden Elements:** Trying to `click()` elements that are functionally obscured by modals. If Playwright refuses to click, it's a real bug. Bypassing it via `click({ force: true })` ruins the purpose of E2E testing.
|
|
144
|
+
10. **State Leakage:** Failing to realize that tests run completely independently. AI trying to pass variables between `test()` blocks. Variables reset on every definition.
|
|
145
|
+
|
|
146
|
+
---
|
|
147
|
+
|
|
148
|
+
## 🏛️ Tribunal Integration
|
|
149
|
+
|
|
150
|
+
### ✅ Pre-Flight Self-Audit
|
|
151
|
+
```
|
|
152
|
+
✅ Did I completely eliminate `waitForTimeout` (hard sleep) sleep commands?
|
|
153
|
+
✅ Are selectors relying on semantic meaning (`getByRole`, `getByText`) instead of raw CSS?
|
|
154
|
+
✅ Have I properly awaited all locator actions and expectations (`await expect...`)?
|
|
155
|
+
✅ Are tests completely isolated (no cascading state dependence)?
|
|
156
|
+
✅ Is the test executing an API-level authentication bypass if testing underlying features?
|
|
157
|
+
✅ Are external 3rd-party SaaS integrations defensively mocked via `page.route`?
|
|
158
|
+
✅ Have I respected Playwright's auto-actionability checks (avoiding `{ force: true }`)?
|
|
159
|
+
✅ Did I define multiple targeted viewports/browsers inside the `playwright.config.ts`?
|
|
160
|
+
✅ Is `forbidOnly` enabled for CI pipelines?
|
|
161
|
+
✅ Did I assert user-facing impacts rather than deep implementation variables?
|
|
162
|
+
```
|
|
@@ -1,230 +1,146 @@
|
|
|
1
|
-
---
|
|
2
|
-
name: powershell-windows
|
|
3
|
-
description: PowerShell Windows
|
|
4
|
-
allowed-tools: Read, Write, Edit, Glob, Grep
|
|
5
|
-
version:
|
|
6
|
-
last-updated: 2026-
|
|
7
|
-
applies-to-model: gemini-2.5-pro, claude-3-7-sonnet
|
|
8
|
-
---
|
|
9
|
-
|
|
10
|
-
# PowerShell
|
|
11
|
-
|
|
12
|
-
> PowerShell
|
|
13
|
-
>
|
|
14
|
-
|
|
15
|
-
---
|
|
16
|
-
|
|
17
|
-
##
|
|
18
|
-
|
|
19
|
-
|
|
20
|
-
|
|
21
|
-
```powershell
|
|
22
|
-
#
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
#
|
|
26
|
-
Get-
|
|
27
|
-
|
|
28
|
-
|
|
29
|
-
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
|
|
35
|
-
|
|
36
|
-
|
|
37
|
-
|
|
38
|
-
|
|
39
|
-
|
|
40
|
-
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
|
|
53
|
-
|
|
54
|
-
|
|
55
|
-
|
|
56
|
-
|
|
57
|
-
|
|
58
|
-
|
|
59
|
-
|
|
60
|
-
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
|
|
64
|
-
|
|
65
|
-
|
|
66
|
-
|
|
67
|
-
|
|
68
|
-
|
|
69
|
-
|
|
70
|
-
|
|
71
|
-
|
|
72
|
-
|
|
73
|
-
#
|
|
74
|
-
|
|
75
|
-
|
|
76
|
-
|
|
77
|
-
|
|
78
|
-
|
|
79
|
-
|
|
80
|
-
|
|
81
|
-
|
|
82
|
-
|
|
83
|
-
|
|
84
|
-
|
|
85
|
-
|
|
86
|
-
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
|
|
92
|
-
|
|
93
|
-
|
|
94
|
-
|
|
95
|
-
|
|
96
|
-
|
|
97
|
-
|
|
98
|
-
|
|
99
|
-
|
|
100
|
-
|
|
101
|
-
|
|
102
|
-
|
|
103
|
-
|
|
104
|
-
|
|
105
|
-
|
|
106
|
-
|
|
107
|
-
|
|
108
|
-
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
113
|
-
|
|
114
|
-
|
|
115
|
-
|
|
116
|
-
|
|
117
|
-
|
|
118
|
-
|
|
119
|
-
|
|
120
|
-
|
|
121
|
-
|
|
122
|
-
|
|
123
|
-
|
|
124
|
-
|
|
125
|
-
|
|
126
|
-
|
|
127
|
-
|
|
128
|
-
|
|
129
|
-
|
|
130
|
-
|
|
131
|
-
|
|
132
|
-
|
|
133
|
-
|
|
134
|
-
|
|
135
|
-
|
|
136
|
-
|
|
137
|
-
|
|
138
|
-
|
|
139
|
-
|
|
140
|
-
|
|
141
|
-
|
|
142
|
-
|
|
143
|
-
|
|
144
|
-
|
|
145
|
-
|
|
146
|
-
|
|
147
|
-
# Iterate files matching pattern
|
|
148
|
-
Get-ChildItem ".\src" -Recurse -Filter "*.ts" | ForEach-Object {
|
|
149
|
-
Write-Host $_.FullName
|
|
150
|
-
}
|
|
151
|
-
|
|
152
|
-
# Create directory if not exists
|
|
153
|
-
New-Item -ItemType Directory -Force ".\output" | Out-Null
|
|
154
|
-
|
|
155
|
-
# Read/write files
|
|
156
|
-
$content = Get-Content ".\file.txt" -Raw
|
|
157
|
-
Set-Content ".\output.txt" "new content"
|
|
158
|
-
Add-Content ".\log.txt" "append this line"
|
|
159
|
-
|
|
160
|
-
# Environment variables
|
|
161
|
-
$env:MY_VAR = "value" # set
|
|
162
|
-
[System.Environment]::GetEnvironmentVariable("PATH") # read system-level
|
|
163
|
-
```
|
|
164
|
-
|
|
165
|
-
---
|
|
166
|
-
|
|
167
|
-
## Execution Policy
|
|
168
|
-
|
|
169
|
-
Scripts may be blocked by execution policy:
|
|
170
|
-
|
|
171
|
-
```powershell
|
|
172
|
-
# Check current policy
|
|
173
|
-
Get-ExecutionPolicy
|
|
174
|
-
|
|
175
|
-
# Allow local scripts (most permissive safe setting)
|
|
176
|
-
Set-ExecutionPolicy RemoteSigned -Scope CurrentUser
|
|
177
|
-
|
|
178
|
-
# Run a specific script bypassing policy (one-time)
|
|
179
|
-
powershell -ExecutionPolicy Bypass -File script.ps1
|
|
180
|
-
```
|
|
181
|
-
|
|
182
|
-
---
|
|
183
|
-
|
|
184
|
-
## Output Format
|
|
185
|
-
|
|
186
|
-
When this skill produces or reviews code, structure your output as follows:
|
|
187
|
-
|
|
188
|
-
```
|
|
189
|
-
━━━ Powershell Windows Report ━━━━━━━━━━━━━━━━━━━━━━━━
|
|
190
|
-
Skill: Powershell Windows
|
|
191
|
-
Language: [detected language / framework]
|
|
192
|
-
Scope: [N files · N functions]
|
|
193
|
-
─────────────────────────────────────────────────
|
|
194
|
-
✅ Passed: [checks that passed, or "All clean"]
|
|
195
|
-
⚠️ Warnings: [non-blocking issues, or "None"]
|
|
196
|
-
❌ Blocked: [blocking issues requiring fix, or "None"]
|
|
197
|
-
─────────────────────────────────────────────────
|
|
198
|
-
VBC status: PENDING → VERIFIED
|
|
199
|
-
Evidence: [test output / lint pass / compile success]
|
|
200
|
-
```
|
|
201
|
-
|
|
202
|
-
**VBC (Verification-Before-Completion) is mandatory.**
|
|
203
|
-
Do not mark status as VERIFIED until concrete terminal evidence is provided.
|
|
204
|
-
|
|
205
|
-
|
|
206
|
-
---
|
|
207
|
-
|
|
208
|
-
## 🏛️ Tribunal Integration (Anti-Hallucination)
|
|
209
|
-
|
|
210
|
-
**Slash command: `/audit` or `/review`**
|
|
211
|
-
**Active reviewers: `logic` · `security` · `devops`**
|
|
212
|
-
|
|
213
|
-
### ❌ Forbidden AI Tropes in PowerShell
|
|
214
|
-
|
|
215
|
-
1. **Using Bash Operators** — writing `==` or `!=` instead of `-eq` or `-ne`.
|
|
216
|
-
2. **Text Parsing Over Objects** — extracting properties with regex instead of just accessing `$obj.Property`.
|
|
217
|
-
3. **Ignoring Execution Policies** — writing scripts without considering that they might be blocked on the user's machine.
|
|
218
|
-
4. **Silent Failures** — relying on generic `catch` blocks without understanding terminating vs non-terminating errors.
|
|
219
|
-
5. **Path Separator Errors** — failing to wrap path operations in safe cmdlets like `Join-Path` or `Test-Path`.
|
|
220
|
-
|
|
221
|
-
### ✅ Pre-Flight Self-Audit
|
|
222
|
-
|
|
223
|
-
Review these questions before generating PowerShell commands:
|
|
224
|
-
```
|
|
225
|
-
✅ Did I use the correct comparison operators (e.g., `-gt`, `-like`)?
|
|
226
|
-
✅ Did I leverage PowerShell's object pipeline instead of parsing text?
|
|
227
|
-
✅ Are paths safely manipulated (e.g., `Join-Path`) to handle Windows backslashes correctly?
|
|
228
|
-
✅ Are potential non-terminating errors handled explicitly?
|
|
229
|
-
✅ Will this script require an execution policy bypass, and did I note that for the user?
|
|
230
|
-
```
|
|
1
|
+
---
|
|
2
|
+
name: powershell-windows
|
|
3
|
+
description: PowerShell and Windows environment mastery. Object-oriented piping, strict error handling (ErrorActionPreference), PSProviders, active directory querying, credential management, and execution policies. Use when automating Azure, Windows environments, or writing .ps1 scripts.
|
|
4
|
+
allowed-tools: Read, Write, Edit, Glob, Grep
|
|
5
|
+
version: 2.0.0
|
|
6
|
+
last-updated: 2026-04-02
|
|
7
|
+
applies-to-model: gemini-2.5-pro, claude-3-7-sonnet
|
|
8
|
+
---
|
|
9
|
+
|
|
10
|
+
# PowerShell — Windows Automation Mastery
|
|
11
|
+
|
|
12
|
+
> PowerShell does not pipe text. It pipes rich .NET Objects.
|
|
13
|
+
> Your Bash instincts will betray you here. Think in structured data, not regex.
|
|
14
|
+
|
|
15
|
+
---
|
|
16
|
+
|
|
17
|
+
## 1. The Object Pipeline
|
|
18
|
+
|
|
19
|
+
Unlike Bash where everything is strings (requiring `awk`/`grep`), PowerShell passes structured .NET class instances between commands.
|
|
20
|
+
|
|
21
|
+
```powershell
|
|
22
|
+
# ❌ BAD: Attempting to treat PowerShell like Bash (String Parsing)
|
|
23
|
+
Get-Process | Out-String -Stream | Select-String "node" | ForEach-Object { $id = ($_ -split '\s+')[8]; Stop-Process -Id $id }
|
|
24
|
+
|
|
25
|
+
# ✅ GOOD: Accessing Object Properties Directly
|
|
26
|
+
Get-Process -Name "node" | Stop-Process -Force
|
|
27
|
+
|
|
28
|
+
# Filtering objects (Where-Object)
|
|
29
|
+
Get-Service | Where-Object Status -eq 'Running' | Select-Object Name, DisplayName
|
|
30
|
+
|
|
31
|
+
# Accessing methods natively on the object
|
|
32
|
+
$files = Get-ChildItem -Path "C:\logs" -Filter "*.log"
|
|
33
|
+
$files | ForEach-Object { $_.Delete() }
|
|
34
|
+
```
|
|
35
|
+
|
|
36
|
+
---
|
|
37
|
+
|
|
38
|
+
## 2. Strict Error Handling (The Windows equivalent of set -e)
|
|
39
|
+
|
|
40
|
+
By default, PowerShell prints an error but keeps running. You MUST enforce strict halting for automation scripts.
|
|
41
|
+
|
|
42
|
+
```powershell
|
|
43
|
+
# Mandatory header for reliable automation scripts
|
|
44
|
+
$ErrorActionPreference = "Stop"
|
|
45
|
+
Set-StrictMode -Version Latest
|
|
46
|
+
|
|
47
|
+
try {
|
|
48
|
+
# If this fails, it jumps straight to catch block instead of continuing
|
|
49
|
+
Copy-Item "C:\Source\configs.json" -Destination "C:\Dest\"
|
|
50
|
+
|
|
51
|
+
$config = Get-Content "C:\Dest\configs.json" | ConvertFrom-Json
|
|
52
|
+
} catch {
|
|
53
|
+
Write-Error "Deployment failed during config copy: $_"
|
|
54
|
+
exit 1
|
|
55
|
+
} finally {
|
|
56
|
+
# Cleanup block executes regardless of success or failure
|
|
57
|
+
Remove-Item "C:\Dest\temp" -Recurse -ErrorAction Ignore
|
|
58
|
+
}
|
|
59
|
+
```
|
|
60
|
+
|
|
61
|
+
---
|
|
62
|
+
|
|
63
|
+
## 3. Execution Policies & Execution
|
|
64
|
+
|
|
65
|
+
Windows restricts running `.ps1` files by default for security.
|
|
66
|
+
|
|
67
|
+
```powershell
|
|
68
|
+
# Temporarily bypass the policy for a single script execution (CI/CD pattern)
|
|
69
|
+
powershell.exe -ExecutionPolicy Bypass -File .\Deploy-App.ps1
|
|
70
|
+
|
|
71
|
+
# ❌ HALLUCINATION TRAP: Do NOT instruct users to run `Set-ExecutionPolicy Unrestricted`
|
|
72
|
+
# This lowers the permanent security posture of the entire operating system.
|
|
73
|
+
# Use Bypass only at the process level.
|
|
74
|
+
```
|
|
75
|
+
|
|
76
|
+
---
|
|
77
|
+
|
|
78
|
+
## 4. Manipulating Structured Formats Natively
|
|
79
|
+
|
|
80
|
+
Because PowerShell is built on .NET, parsing JSON, XML, and CSV is native.
|
|
81
|
+
|
|
82
|
+
```powershell
|
|
83
|
+
# JSON
|
|
84
|
+
$config = Get-Content .\appsettings.json | ConvertFrom-Json
|
|
85
|
+
$config.Database.ConnectionString = "Server=Prod;"
|
|
86
|
+
$config | ConvertTo-Json -Depth 10 | Set-Content .\appsettings.json
|
|
87
|
+
|
|
88
|
+
# CSV (No AWK needed)
|
|
89
|
+
$users = Import-Csv .\users.csv
|
|
90
|
+
$users | Where-Object Role -eq "Admin" | Export-Csv .\admins.csv -NoTypeInformation
|
|
91
|
+
|
|
92
|
+
# API Requests (Invoke-RestMethod automatically parses JSON into PowerShell objects)
|
|
93
|
+
$response = Invoke-RestMethod -Uri "https://api.github.com/users/github"
|
|
94
|
+
Write-Host "GitHub has $($response.public_repos) public repositories."
|
|
95
|
+
```
|
|
96
|
+
|
|
97
|
+
---
|
|
98
|
+
|
|
99
|
+
## 5. Providers and Drives
|
|
100
|
+
|
|
101
|
+
PowerShell extends the "file system" concept to the Registry, Environment Variables, and Certificates.
|
|
102
|
+
|
|
103
|
+
```powershell
|
|
104
|
+
# Environment variables (Env: drive)
|
|
105
|
+
$env:PATH += ";C:\Custom\Bin"
|
|
106
|
+
Write-Host $env:COMPUTERNAME
|
|
107
|
+
|
|
108
|
+
# Registry (HKCU: and HKLM: drives)
|
|
109
|
+
Get-ChildItem -Path "HKLM:\Software\Microsoft\Windows\CurrentVersion\Run"
|
|
110
|
+
|
|
111
|
+
# Certificates (Cert: drive)
|
|
112
|
+
Get-ChildItem -Path "Cert:\LocalMachine\My" | Where-Object Subject -match "example.com"
|
|
113
|
+
```
|
|
114
|
+
|
|
115
|
+
---
|
|
116
|
+
|
|
117
|
+
## 🤖 LLM-Specific Traps (PowerShell)
|
|
118
|
+
|
|
119
|
+
1. **Bash Equivalencies:** AI writing `Test-Path | regex` instead of dealing with properties. Always use object properties (`$obj.Length`, `$obj.Name`).
|
|
120
|
+
2. **Missing `ErrorActionPreference`:** Continuing execution blindly after a critical `Copy-Item` command fails. Always set preference to "Stop".
|
|
121
|
+
3. **Execution Policy Destruction:** Instructing users to permanently change global machine policy to run a script. Always use `-ExecutionPolicy Bypass` natively.
|
|
122
|
+
4. **JSON Conversion Depth limits:** `ConvertTo-Json` defaults to a depth of only 2. It will ruthlessly truncate your nested API payloads silently unless you append `-Depth 10`.
|
|
123
|
+
5. **Return Types in Functions:** PowerShell returns EVERYTHING that hits the pipeline inside a function, not just the `return` statement. Explicitly cast silent operations to `$null` or pipe to `Out-Null`. (e.g., `$list.Add("item") | Out-Null`).
|
|
124
|
+
6. **Comparison Operators:** AI uses `>` or `==`. PowerShell requires `-gt`, `-eq`, `-ne`, `-lt`.
|
|
125
|
+
7. **Backtick Continuation:** Using the backtick `` ` `` as a line continuation character randomly. It is notoriously hard to read and breaks if there's a trailing space. Use proper pipeline formatting or array declarations.
|
|
126
|
+
8. **Paths with Spaces:** Similar to bash, failing to wrap paths in string quotes when executing. `& "C:\Program Files\Node\npm.cmd" install`.
|
|
127
|
+
9. **`Out-File` vs `Set-Content` Encryption:** AI writing configs using `Out-File` defaults to UTF-16 on older PowerShell versions, breaking Linux/Docker containers. Standardize on `Set-Content` or explicitly declare `-Encoding UTF8`.
|
|
128
|
+
10. **`Write-Host` vs `Write-Output`:** AI uses `Write-Host` to return data from functions. `Write-Host` goes straight to the console display buffer. Always use `Write-Output` if you want another variable or pipe to catch the return data.
|
|
129
|
+
|
|
130
|
+
---
|
|
131
|
+
|
|
132
|
+
## 🏛️ Tribunal Integration
|
|
133
|
+
|
|
134
|
+
### ✅ Pre-Flight Self-Audit
|
|
135
|
+
```
|
|
136
|
+
✅ Have I forced strict error catching via `$ErrorActionPreference = "Stop"`?
|
|
137
|
+
✅ Am I manipulating objects (e.g., `Where-Object`) rather than string parsing?
|
|
138
|
+
✅ If I invoked `ConvertTo-Json`, did I set `-Depth 10` (or higher)?
|
|
139
|
+
✅ Are my comparison operators using PowerShell syntax (`-eq`, `-gt`) instead of (`==`, `>`)?
|
|
140
|
+
✅ Did I use `-ExecutionPolicy Bypass` rather than recommending global registry changes?
|
|
141
|
+
✅ Is text encoded correctly to UTF8 via `Set-Content` instead of `Out-File`?
|
|
142
|
+
✅ Did I return data from my functions via `Write-Output` instead of `Write-Host`?
|
|
143
|
+
✅ Are array modifications piped to `Out-Null` to prevent pipeline pollution?
|
|
144
|
+
✅ Is `Invoke-RestMethod` leveraged for APIs instead of the heavier `Invoke-WebRequest`?
|
|
145
|
+
✅ Are commands with spaces invoked using the call operator `& "Path\To\File"`?
|
|
146
|
+
```
|