workflow-housekeep — independently scanned and version-tracked by SaferSkills.
SaferSkills independently audited workflow-housekeep (Agent Skill) and scored it 45/100 (orange). The audit ran 55 deterministic rules across Security, Supply Chain, Maintenance, Transparency, and Community; it found 1 high-severity and 0 lower-severity findings. The full rule-by-rule trace and per-finding evidence are below. Free, methodology-open.
Findings & checks · 1 flagged
A base64 string of 128+ characters appears in a documentation file. Encoded prompt injection hides the hostile instruction in base64 — invisible to keyword filters — and relies on the agent's ability to decode it at runtime. There is no normal authoring reason to embed a multi-hundred-byte base64 blob in skill docs.
*.sig, SIGNATURES) outside the documentation.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.
Full-cycle repository maintenance: documentation sync, dead file removal, dependency updates, and research-driven cleanup. Works with any project — auto-detects tech stack, package manager, and structure.
NEVER delete files without confirming they are truly unused. Check imports, references, git blame, and config entries before removing anything.
NEVER blindly upgrade a major version. Major bumps may have breaking changes. Research the changelog before upgrading.
README must reflect reality, not aspiration. Only document what currently exists in the codebase.
Commit each phase separately. Documentation, cleanup, and dependency updates are independent concerns.
Read the dependency manifest to determine the ecosystem:
| File | Ecosystem | Package Manager |
|---|---|---|
package.json + package-lock.json | Node.js | npm |
package.json + pnpm-lock.yaml | Node.js | pnpm |
package.json + yarn.lock | Node.js | yarn |
package.json + bun.lockb | Node.js | bun |
requirements.txt / pyproject.toml | Python | pip / poetry / uv |
Cargo.toml | Rust | cargo |
go.mod | Go | go mod |
Gemfile | Ruby | bundler |
build.gradle / pom.xml | Java/Kotlin | gradle / maven |
pubspec.yaml | Dart/Flutter | pub |
composer.json | PHP | composer |
Glob("README*")
Glob("**/*readme*")
Glob("**/CHANGELOG*")
Glob("**/.env*")
Glob("**/*.log")
Glob("**/dist/**")
Glob("**/build/**")
Glob("**/*.screenshot*")
Glob("**/*.png", in test/debug/temp folders)ECOSYSTEM: [Node.js / Python / Rust / Go / etc.]
PKG_MANAGER: [npm / pnpm / yarn / bun / pip / poetry / cargo / etc.]
MANIFEST: [package.json / requirements.txt / Cargo.toml / etc.]
LOCKFILE: [package-lock.json / yarn.lock / etc.]
README_PATH: [README.md or detected path]
SRC_DIR: [src/ / app/ / lib/ / etc.]
BUILD_DIR: [dist/ / build/ / .next/ / out/ / etc.]
FRAMEWORK: [Next.js / React / Vue / Django / FastAPI / etc.]Update the root README (and any folder-level READMEs) to reflect the current architecture.
Read these files to understand what actually exists:
- Package manifest (package.json, etc.) — dependencies, scripts, name, description
- Entry point (src/index.ts, app/layout.tsx, main.py, etc.)
- Config files (next.config.*, vite.config.*, tsconfig.json, etc.)
- CI/CD (.github/workflows/*, vercel.json, netlify.toml, Dockerfile, etc.)
- Environment files (.env.example, .env.local) — list expected env vars
- Folder structure (top-level ls, then 2-level deep ls of src/)For each section in the existing README, verify:
| README Section | Verify Against |
|---|---|
| Project description | package.json name/description, actual functionality |
| Tech stack | Installed dependencies in manifest |
| Getting started / Setup | Actual scripts in package.json, required env vars |
| Folder structure | Real directory listing |
| API endpoints | Route files, API handlers |
| Features list | Actual implemented features (not planned/removed) |
| Environment variables | .env.example or config files |
| Deployment | CI/CD config, hosting config |
| Contributing | Linter config, test setup, pre-commit hooks |
For each discrepancy found:
# Project Name
Brief description from package manifest + actual functionality.
## Tech Stack
[List ONLY what's in the dependency manifest — framework, UI lib, DB, auth, etc.]
## Getting Started
### Prerequisites
[Node version from .nvmrc/engines, other requirements]
### Installation
[Exact commands from package.json scripts]
### Environment Variables
[List from .env.example with descriptions]
### Development
[Dev server command, test command, lint command]
## Project Structure
[Actual directory tree, 2 levels deep]
## Deployment
[From CI/CD config — where it deploys, how]
## Scripts
[All scripts from package.json with descriptions]Check for any *_readme.md or README.md files in subdirectories. Update them if the folder contents have changed.
Remove files that serve no purpose in the repository.
Search for these categories of dead files:
Logs and debug output:
Glob("**/*.log")
Glob("**/npm-debug.log*")
Glob("**/yarn-debug.log*")
Glob("**/yarn-error.log*")
Glob("**/debug.log")
Glob("**/.pnpm-debug.log*")Screenshots and temp images:
Glob("**/screenshot*")
Glob("**/Screenshot*")
Glob("**/*.png", in root or non-asset directories)
Glob("**/*.jpg", in root or non-asset directories)
Glob("**/temp/**")
Glob("**/tmp/**")Build artifacts committed by mistake:
Glob("**/dist/**")
Glob("**/build/**")
Glob("**/.next/**")
Glob("**/node_modules/**")
Glob("**/__pycache__/**")
Glob("**/*.pyc")
Glob("**/target/debug/**") (Rust)Deprecated / dead code:
Glob("**/*.bak")
Glob("**/*.old")
Glob("**/*.orig")
Glob("**/*deprecated*")
Glob("**/*DEPRECATED*")
Glob("**/*.backup")
Glob("**/*_old.*")
Glob("**/*_backup.*")
Glob("**/*.tmp")IDE and OS artifacts:
Glob("**/.DS_Store")
Glob("**/Thumbs.db")
Glob("**/*.swp")
Glob("**/*.swo")Stale config files:
Glob("**/.env.local") (should not be committed)
Glob("**/.env.production") (check if contains secrets)For each candidate file:
Grep for the filename across the codebaseClassification:
| Category | Action |
|---|---|
| Log files | Delete + add to .gitignore |
| Screenshots in non-asset dirs | Delete (or move to docs/ if referenced) |
| Build artifacts | Delete + verify in .gitignore |
.bak / .old / .orig files | Delete (git has history) |
| IDE/OS artifacts | Delete + add to .gitignore |
| Secret files committed | Delete + rotate secrets + add to .gitignore |
| Deprecated code files | Verify unused → delete |
After cleanup, ensure .gitignore prevents reoccurrence:
Check existing .gitignore covers:
- logs/ *.log
- build output dist/ build/ .next/ out/
- env files .env.local .env.production
- OS files .DS_Store Thumbs.db
- IDE files .idea/ .vscode/ (unless project uses shared settings)
- temp files *.tmp *.bak *.swp
- dependencies node_modules/ __pycache__/ target/For TypeScript/JavaScript projects:
Run: npx knip (if available) or npx ts-pruneFor Python:
Run: vulture . (if available)If these tools aren't available, do a manual check:
Node.js:
npm outdated # see what's behind
npm audit # check vulnerabilitiesPython:
pip list --outdated
pip-audit # or safety checkRust:
cargo outdated
cargo auditGo:
go list -m -u all
govulncheck ./...| Update Type | Risk | Action |
|---|---|---|
| Patch (1.2.3 → 1.2.4) | Low | Auto-update |
| Minor (1.2.3 → 1.3.0) | Low-Medium | Auto-update, verify build |
| Major (1.2.3 → 2.0.0) | High | Research changelog first |
| Security fix (any) | Critical | Update immediately |
Step 1: Fix vulnerabilities first
npm audit fix # safe fixes only
npm audit fix --force # ONLY if safe fixes insufficient, review changesStep 2: Update patch + minor
npm update # updates within semver rangeOr for more control:
npx npm-check-updates -u -t minor # update package.json to latest minor
npm install # install updated versionsStep 3: Research major updates
For each major version bump available:
CallMcpTool(server: "user-firecrawl", toolName: "firecrawl_search", arguments: {
"query": "<package-name> v<new-major> migration guide changelog breaking changes",
"limit": 3,
"sources": [{ "type": "web" }]
})Only apply major updates if:
Step 4: Verify after updates
npm run build # or equivalent
npm run lint # or equivalent
npm test # if tests existResearch the recommended .gitignore for the detected ecosystem:
CallMcpTool(server: "user-firecrawl", toolName: "firecrawl_search", arguments: {
"query": "<framework> gitignore best practices <current year>",
"limit": 3,
"sources": [{ "type": "web" }]
})Cross-check with https://github.com/github/gitignore templates.
Check for stale or redundant config:
| Config | Check |
|---|---|
tsconfig.json | Target and lib match Node/browser version in use |
eslint config | Not using deprecated rules or legacy config format |
prettier config | Exists and is consistent with eslint |
.nvmrc / engines | Matches current LTS or team's Node version |
browserslist | Not targeting dead browsers |
| CI/CD config | Not using deprecated actions or outdated Node versions |
Review all scripts in package.json (or equivalent):
.env.example lists all required vars.env files with real secrets are committedIf the project uses TypeScript:
any type usage that could be tightenedstrict mode settings@ts-ignore or @ts-expect-error commentspackage.json: verify name, version, description, license, repository are accurateLICENSE file: exists and matches package.json license fieldCONTRIBUTING.md: exists if the project accepts contributions## Housekeep Report — [Project Name]
### Configuration
- Ecosystem: [Node.js / Python / etc.]
- Package Manager: [npm / pnpm / yarn / etc.]
- Framework: [Next.js / React / Django / etc.]
### Phase 1: README Sync
- [x] Root README updated: [list of sections changed]
- [x] Folder READMEs updated: [list]
- Stale sections removed: [list]
- New sections added: [list]
### Phase 2: Dead File Cleanup
| File | Category | Action |
|------|----------|--------|
| path/to/file.log | Log | Deleted |
| path/to/screenshot.png | Screenshot | Deleted |
- .gitignore updated: [patterns added]
- Dead exports found: [list or "none"]
### Phase 3: Dependency Updates
- Vulnerabilities fixed: [count] ([critical/high/moderate])
- Packages updated: [count]
- Patch: [list]
- Minor: [list]
- Major: [list with migration notes]
- Build verified: [pass/fail]
- Tests verified: [pass/fail/no tests]
### Phase 4: General Cleanup
- Config files updated: [list]
- Scripts cleaned: [list]
- .gitignore modernized: [yes/no]
- Env vars audited: [findings]
### Files Modified
- [path] — [description]
### Files Deleted
- [path] — [reason]
### Requires Manual Follow-Up
- [item] — [why it cannot be automated]| Ecosystem | Outdated | Audit | Update | Build Verify |
|---|---|---|---|---|
| npm | npm outdated | npm audit | npm update && npm audit fix | npm run build |
| pnpm | pnpm outdated | pnpm audit | pnpm update && pnpm audit --fix | pnpm build |
| yarn | yarn outdated | yarn audit | yarn upgrade | yarn build |
| pip | pip list --outdated | pip-audit | pip install -U <pkg> | python -m pytest |
| cargo | cargo outdated | cargo audit | cargo update | cargo build |
| go | go list -m -u all | govulncheck ./... | go get -u ./... | go build ./... |
~30 seconds. Free. No account. Every finding cites a rule and a line of evidence.