Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
18 changes: 18 additions & 0 deletions .editorconfig
Original file line number Diff line number Diff line change
@@ -0,0 +1,18 @@
root = true

[*]
charset = utf-8
end_of_line = lf
insert_final_newline = true
indent_style = space
indent_size = 4

[*.md]
indent_size = 2
trim_trailing_whitespace = false

[*.json]
indent_size = 2

[*.yml]
indent_size = 2
4 changes: 4 additions & 0 deletions .gitattributes
Original file line number Diff line number Diff line change
@@ -0,0 +1,4 @@
* text=auto eol=lf
*.ps1 text eol=lf
*.psm1 text eol=lf
*.psd1 text eol=lf
47 changes: 47 additions & 0 deletions .github/workflows/validate.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,47 @@
name: validate

on:
pull_request:
push:
branches:
- main

permissions:
contents: read

jobs:
Comment thread
Copilot marked this conversation as resolved.
powershell:
runs-on: windows-latest
steps:
- uses: actions/checkout@v7
- name: Parse PowerShell scripts
shell: pwsh
run: |
$failed = $false
Get-ChildItem -Recurse -Filter *.ps1 | ForEach-Object {
$tokens = $null
$errors = $null
[System.Management.Automation.Language.Parser]::ParseFile($_.FullName, [ref]$tokens, [ref]$errors) | Out-Null
if ($errors.Count -gt 0) {
$failed = $true
Write-Error "$($_.FullName) has parser errors: $($errors.Message -join '; ')"
}
}
if ($failed) { exit 1 }
- name: Check Markdown final newlines
shell: pwsh
run: |
$failed = $false
Get-ChildItem -Recurse -File -Filter *.md | ForEach-Object {
$bytes = [System.IO.File]::ReadAllBytes($_.FullName)
if ($bytes.Length -gt 0 -and $bytes[-1] -ne 10) {
$failed = $true
Write-Error "$($_.FullName) must end with a newline."
}
}
if ($failed) { exit 1 }
- name: Analyze synthetic baseline
shell: pwsh
run: |
New-Item -ItemType Directory -Force -Path .\sysadmin-windows-startup-performance\reports,.\sysadmin-windows-startup-performance\state | Out-Null
powershell -NoProfile -ExecutionPolicy Bypass -File .\sysadmin-windows-startup-performance\scripts\analyze-startup-baseline.ps1 -BaselinePath .\sysadmin-windows-startup-performance\examples\synthetic-baseline.json -OutputPath .\sysadmin-windows-startup-performance\reports\synthetic-analysis.md -AnalysisOutputPath .\sysadmin-windows-startup-performance\state\synthetic-analysis.json
19 changes: 19 additions & 0 deletions .gitignore
Original file line number Diff line number Diff line change
@@ -0,0 +1,19 @@
# Generated local performance data
**/state/*
**/reports/*
**/logs/*
!**/state/.gitkeep
!**/reports/.gitkeep
!**/logs/.gitkeep

# PowerShell and editor noise
*.tmp
*.log
*.bak
*.ps1xml
.vscode/
.idea/

# OS noise
Thumbs.db
Desktop.ini
6 changes: 6 additions & 0 deletions AGENTS.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
# Agent Instructions

- When creating or editing Markdown files, always end each `.md` file with a final newline.
- Keep skills small, composable, and safe by default.
- Do not commit generated reports, state files, logs, or machine-specific diagnostic captures.
- Prefer synthetic examples over real local machine data in public artifacts.
23 changes: 23 additions & 0 deletions CONTRIBUTING.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,23 @@
# Contributing

Contributions should keep skills small, composable, and safe by default.

## Guidelines

- Keep `SKILL.md` concise and move detailed material into directly linked `references/` files.
- Prefer deterministic scripts for repeated or fragile workflows.
- Keep generated state, reports, logs, and machine-specific artifacts out of git.
- Avoid destructive behavior in diagnostic skills. When remediation is needed, make it a separate reviewed workflow.
- Include synthetic examples rather than real machine captures.
- Put skill-specific usage, safety, data-handling, and validation details inside the owning skill folder.

## Validation

Before opening a pull request:

- Run your runtime's skill validator for every changed skill.
- Parse or lint bundled scripts with the language's normal tooling.
- Run the synthetic examples or validation commands documented by each changed skill.
- Confirm generated outputs remain ignored by git.

The repository workflow also checks PowerShell parsing, Markdown final newlines, and the current synthetic analysis example.
21 changes: 21 additions & 0 deletions LICENSE
Original file line number Diff line number Diff line change
@@ -0,0 +1,21 @@
MIT License

Copyright (c) 2026 KarmCraft

Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:

The above copyright notice and this permission notice shall be included in all
copies or substantial portions of the Software.

THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
SOFTWARE.
47 changes: 47 additions & 0 deletions README.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,47 @@
# Skills Library

A public collection of agent skills that I have found useful enough to package, maintain, and share.

The goal is to keep this library practical: composable, reusable skills that solve real workflow problems for humans and agents using `SKILL.md` compatible runtimes. Each skill should be small enough to understand, safe by default, and easy to combine with other skills.

Each top-level folder is a self-contained, directly installable skill.

## Skills

| Skill | Purpose |
| --- | --- |
| [`sysadmin-windows-startup-performance`](sysadmin-windows-startup-performance/) | Diagnose Windows startup performance with read-only baselines and data-driven analysis. |

## Install

Copy the skill folder you want into the skill directory used by your agent runtime.

For Codex on Windows:

```powershell
$SkillName = "<skill-folder>"
Copy-Item -Recurse ".\$SkillName" "$env:USERPROFILE\.codex\skills\$SkillName"
```

For other `SKILL.md` compatible tools, use their documented skill location.

## Repository Layout

```text
<skill-name>/
SKILL.md
agents/openai.yaml
scripts/
tools/
references/
examples/
templates/
```

Use `tools/` for helper CLIs, adapters, or small utilities that support a skill but are not the primary workflow scripts. Keep primary repeatable workflows in `scripts/`, long-form guidance in `references/`, and avoid vendoring large binaries, secrets, or machine-specific executables.

Not every skill uses every optional folder. Generated reports, state files, and logs are intentionally ignored by git.

## Safety

Skills should be safe by default and explicit about their boundaries. Diagnostic skills should collect evidence before recommending changes, and any remediation workflow should be separately reviewed, reversible, and opt-in.
13 changes: 13 additions & 0 deletions SECURITY.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,13 @@
# Security Policy

## Reporting

Please report security issues privately through GitHub security advisories if available, or by opening a minimal issue that does not include secrets or exploit details.

## Data Handling

Do not attach real diagnostic captures, generated reports, or local inventory unless you have reviewed and sanitized them first.

Before sharing artifacts, remove hostnames, usernames, domains, command-line arguments, environment paths, service or task arguments, secrets, tokens, and local network identifiers.

Collectors should default to least-sensitive output and document any switches that include more detail in the owning skill's safety reference.
74 changes: 74 additions & 0 deletions sysadmin-windows-startup-performance/SKILL.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,74 @@
---
name: sysadmin-windows-startup-performance
description: Collect and analyze read-only Windows startup performance baselines. Use when Codex is asked to diagnose slow Windows boot or login, collect Diagnostics-Performance event log data, inspect startup apps, services, scheduled tasks, resource pressure, recent boot warnings, or prepare conservative data-driven recommendations without changing system configuration.
---

# Sysadmin Windows Startup Performance

## Overview

Use this skill for read-only Windows startup diagnostics. It collects sanitized startup baselines, analyzes likely bottlenecks, and produces JSON plus Markdown outputs that other skills can consume.

## Files

- `scripts/collect-startup-baseline.ps1`: elevated read-only collector for Diagnostics-Performance events, startup inventory, service/task signals, resources, and recent boot warnings.
- `scripts/analyze-startup-baseline.ps1`: analyzer that ranks findings and writes a Markdown report.
- `references/data-model.md`: baseline and analysis schema notes.
- `references/safety.md`: operating rules and remediation boundaries.
- `examples/synthetic-baseline.json`: synthetic fixture for analyzer validation.
- `tools/`: reserved for optional helper CLIs, adapters, or small utilities that support this skill.
- `templates/local-performance/`: optional project-local diagnostic hub scaffold.

## Workflow

1. Read `references/safety.md` before collecting data or recommending changes.
2. Create or use a local hub folder with `scripts/`, `state/`, `reports/`, and `logs/`. A template is available at `templates/local-performance/` when this repository is installed as a project.
3. Run the collector from an elevated PowerShell session. Do not fall back to non-admin collection because protected boot timing logs can be missed.
4. Run the analyzer on the latest or specified baseline.
5. Prefer at least three comparable post-reboot baselines before recommending startup changes.
6. If the user asks for remediation, produce a dry-run plan with rollback notes first. Do not mutate startup apps, registry entries, scheduled tasks, services, drivers, security tools, or Windows settings without explicit approval.

## Commands

Collect a baseline:

```powershell
.\scripts\collect-startup-baseline.ps1
```

Analyze the latest baseline from the same hub:

```powershell
.\scripts\analyze-startup-baseline.ps1
```

Analyze a specific baseline:

```powershell
.\scripts\analyze-startup-baseline.ps1 -BaselinePath .\state\startup-baseline-YYYYMMDD-HHMMSS.json
```

Include full command-line previews only when explicitly needed:

```powershell
.\scripts\collect-startup-baseline.ps1 -IncludeCommandLines
```

## Validation

When modifying this skill, run the analyzer against the synthetic baseline from the repository root:

```powershell
powershell -NoProfile -ExecutionPolicy Bypass -File .\sysadmin-windows-startup-performance\scripts\analyze-startup-baseline.ps1 -BaselinePath .\sysadmin-windows-startup-performance\examples\synthetic-baseline.json -OutputPath .\sysadmin-windows-startup-performance\reports\synthetic-analysis.md -AnalysisOutputPath .\sysadmin-windows-startup-performance\state\synthetic-analysis.json
```

The command writes ignored `reports/` and `state/` outputs under the skill folder.

## Output

The collector writes `state/startup-baseline-*.json` unless `-NoWrite` or `-OutputPath` is used. The analyzer writes:

- `reports/startup-baseline-analysis-*.md`
- `state/startup-analysis-*.json`

See `references/data-model.md` before building downstream tooling against these files.
4 changes: 4 additions & 0 deletions sysadmin-windows-startup-performance/agents/openai.yaml
Original file line number Diff line number Diff line change
@@ -0,0 +1,4 @@
interface:
display_name: "Sysadmin Windows Startup Performance"
short_description: "Diagnose Windows startup performance."
default_prompt: "For a first-time assessment, guide the user through five reboot cycles. After each boot, wait 3 to 5 minutes, then run $sysadmin-windows-startup-performance to collect one read-only startup baseline. After the fifth collection, run the single-baseline analyzer on the latest collection; when comparison is needed, analyze earlier baseline files one at a time and summarize repeated patterns."
Loading