github-standards — independently scanned and version-tracked by SaferSkills.
SaferSkills independently audited github-standards (Agent Skill) and scored it 100/100 (green). The audit ran 55 deterministic rules across Security, Supply Chain, Maintenance, Transparency, and Community; it found 0 high-severity and 0 lower-severity findings. The full rule-by-rule trace and per-finding evidence are below. Free, methodology-open.
Findings & checks · 0 flagged
Every scanned point with the score it earned and what moved between them.
First recorded scan — no prior version to compare against.
The primary manifest — the file an agent reads to learn what this artifact does.
Repository and workflow conventions from 22+ production repositories.
Before EVERY commit, scan staged files for secrets. Never commit these:
# Run before committing: catches most leaks
git diff --cached --diff-filter=ACM | grep -iE \
'sk[-_]live|sk[-_]test|api[-_]?key|secret[-_]?key|password\s*=|token\s*=|ghp_|gho_|github_pat_|ntn_|xoxb-|xoxp-|AKIA[A-Z0-9]{16}|-----BEGIN (RSA |EC )?PRIVATE KEY|mongodb\+srv://|postgres(ql)?://[^@]+@|redis://:[^@]+@'| Pattern | Why |
|---|---|
.env, .env.* | API keys, DB URLs, secrets |
*.pem, *.key, *.p12 | Private keys, certificates |
credentials.json, auth*.json | OAuth tokens, service accounts |
config.json (if contains secrets) | Runtime config with keys |
*.keystore, *.jks | Java/Android signing keys |
id_rsa, id_ed25519 | SSH private keys |
*.sqlite, *.db (user data) | Local databases with PII |
sessions.json | Login sessions, cookies |
# 1. Remove from tracking (doesn't remove from history)
git rm --cached .env
echo ".env" >> .gitignore
git commit -m "chore: remove tracked secrets, add to gitignore"
# 2. Rotate the exposed secret IMMEDIATELY
# Old key is in git history forever (unless you rewrite)
# 3. If the repo is public, consider history rewrite
git filter-branch --force --index-filter \
'git rm --cached --ignore-unmatch .env' HEAD
# Or use BFG Repo-Cleaner (faster)| Instead of | Use |
|---|---|
| Hardcoded API key | process.env.API_KEY or std::env::var("API_KEY") |
| Hardcoded URL with token | obfstr!() macro (Rust) for compile-time obfuscation |
| Config file with secrets | .env file (gitignored) + .env.example (committed, no values) |
| Inline DB connection string | Environment variable + validation at startup |
Complements the `/git-commit` skill: these are the structural rules.
type(scope): concise subject line (imperative mood, no period)
Why this change was needed:
[1-3 sentences: business/technical motivation]
What changed:
[Bullet list of technical modifications]
Problem solved:
[What's different for the user/system after this commit]
Refs: TICKET-123feat, fix, docs, chore, refactor, ci, style, test, perfauth, editor, gateway, deps)Co-Authored-By or mention AI toolsFor trivial changes, a single-line message is acceptable:
fix(editor): correct off-by-one in line numbering
chore(deps): bump rollup in the npm_and_yarn group
docs: update API endpoint documentationchore: bump version to 0.4.0type(scope): concise descriptionSame Conventional Commits format as commit messages. Under 72 characters.
Every repo should have .github/PULL_REQUEST_TEMPLATE.md:
## Summary
<!-- What does this PR do? 1-3 bullet points. -->
## Related issue
<!-- Link the issue. E.g. "Closes #42" or "Refs: PROJ-123" -->
## Changes
<!-- Brief description of what changed and why. -->
## Test plan
- [ ] Type check passes (`tsc --noEmit` / `cargo check` / `swift build`)
- [ ] Linter passes (`clippy` / `eslint` / `swiftlint`)
- [ ] Existing tests pass
- [ ] New functionality manually tested
- [ ] Edge cases considered
## Screenshots
<!-- If visual change, add before/after. Delete section if not applicable. -->[WIP] or use GitHub draftCloses #N auto-closes on mergetype/description-in-kebab-case| Prefix | When |
|---|---|
feat/ or feature/ | New feature |
fix/ | Bug fix |
refactor/ | Code restructuring |
chore/ | Maintenance, deps, config |
docs/ | Documentation |
ci/ | CI/CD changes |
release/ | Release preparation |
hotfix/ | Urgent production fix |
feat/github-oauth-flow
fix/pty-output-encoding
refactor/extract-validation-module
chore/bump-dependencies
release/0.4.0
hotfix/auth-token-expiryfeat/PROJ-123-oauth-flowmaster)| File | Purpose | When to create |
|---|---|---|
README.md | Project overview, setup, usage | At repo creation |
.gitignore | Exclude build artifacts, secrets, OS files | At repo creation |
CLAUDE.md | AI assistant context (see /claude-md-template) | At repo creation |
.env.example | Template for required env vars (no values) | When first env var added |
LICENSE | Usage terms | At repo creation (for public repos) |
| Project type | Convention | Examples |
|---|---|---|
| Apps | kebab-case | my-app, bot-rs |
| Libraries/packages | kebab-case | engine-rs, cli-tools |
| APIs/services | snake_case or kebab-case | service_api, auth-api |
| iOS apps | PascalCase | MyApp, Companion |
| Landing pages | kebab-case or snake_case | app_landing, product.io |
Suffix with tech when ambiguous: -rs (Rust), -api (backend), -app (frontend).
Always set a GitHub description. Format:
[Emoji] One-line description of what it does and key techExamples:
AI coding workspace: Tauri v2, React, TypeScriptiOS journaling app: SwiftUI, CloudKitMulti-protocol AI gateway: Rust, axum, OpenAI-compatibleEvery repo starts with this minimum, then adds language-specific patterns:
# OS
.DS_Store
Thumbs.db
# IDE
.vscode/
.idea/
*.swp
*.swo
# Secrets: NEVER COMMIT
.env
.env.*
!.env.example
*.pem
*.key
*.p12
credentials*.json
auth*.json
secrets*.json
# Build artifacts
dist/
build/
*.logNode.js/TypeScript:
node_modules/
*.local
.next/
.turbo/Rust:
/target/
src-tauri/target/
Cargo.lock # Only for libraries, not binariesSwift/iOS:
xcuserdata/
*.xcuserdatad/
DerivedData/
Pods/
*.dSYM.zipGo:
/bin/
/vendor/
*.exe# Project Name
One paragraph: what it is, who it's for, key technology.
## Setup
Exact commands to get running from a fresh clone.
## Development
Commands for daily development workflow.
## Architecture
Brief overview of how the codebase is organized.Update README when:
v{major}.{minor}.{patch}
major: breaking changes
minor: new features (backwards compatible)
patch: bug fixesgit tag -a v0.4.0 -m "Release v0.4.0: OAuth flow and PTY improvements"
git push origin v0.4.0For projects with releases, maintain CHANGELOG.md:
## [0.4.0] - 2026-03-15
### Added
- GitHub OAuth Device Flow authentication
- PTY session management with auto-reconnect
### Fixed
- Terminal encoding issue on non-ASCII characters
### Changed
- Migrated secrets from plugin-store to macOS Keychain# .github/workflows/ci.yml
name: CI
on: [push, pull_request]
jobs:
check:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
# TypeScript/Node
- run: pnpm install --frozen-lockfile
- run: pnpm exec tsc --noEmit
- run: pnpm test # if tests exist
# Rust (add if applicable)
- run: cargo check
- run: cargo clippy -- -D warnings
- run: cargo test
# Go (add if applicable)
- run: go vet ./...
- run: go test ./...# .github/workflows/release.yml
name: Release
on:
push:
tags: ['v*']
jobs:
build:
strategy:
matrix:
include:
- os: macos-latest
target: aarch64-apple-darwin
- os: macos-latest
target: x86_64-apple-darwin
- os: windows-latest
target: x86_64-pc-windows-msvc
runs-on: ${{ matrix.os }}
steps:
- uses: actions/checkout@v4
- run: pnpm install --frozen-lockfile
- run: pnpm tauri build --target ${{ matrix.target }}
# Upload artifacts, create release, etc.When reviewing PRs, check:
any, as, forced unwraps)# BAD: tag can be moved by an attacker who compromises the action
- uses: actions/checkout@v4
# GOOD: SHA cannot be moved
- uses: actions/checkout@b4ffde65f46336ab88eb53be808477a3936bae11 # v4.1.1Apply to every uses: from outside your org. Use Dependabot to keep SHAs current.
permissions: blockGitHub-issued GITHUB_TOKEN defaults to read+write on most events. Lock it down:
permissions:
contents: read
# Then opt-in per job:
jobs:
release:
permissions:
contents: write # to create release
id-token: write # for OIDC publishing# .github/dependabot.yml
version: 2
updates:
- package-ecosystem: github-actions
directory: "/"
schedule: { interval: weekly }
- package-ecosystem: npm # or cargo, gomod, swift
directory: "/"
schedule: { interval: weekly }
open-pull-requests-limit: 5# .github/CODEOWNERS
* @org/maintainers
/api/ @org/backend
/ui/ @org/frontend
/.github/workflows/ @org/infraCombine with branch protection ("Require review from Code Owners") to enforce.
main~30 seconds. Free. No account. Every finding cites a rule and a line of evidence.