|
| 1 | +# AGENTS.md |
| 2 | + |
| 3 | +This file tells AI coding agents how the Developer Tools Directory repo works and how to contribute correctly. |
| 4 | + |
| 5 | +**Catalog site:** https://tmhsdigital.github.io/Developer-Tools-Directory/ (auto-deployed on push to main) |
| 6 | + |
| 7 | +## Repository overview |
| 8 | + |
| 9 | +This is a **meta-repository** -- it does not contain a Cursor plugin or MCP server itself. It catalogs, standardizes, and scaffolds other TMHSDigital developer tool repos. It contains: |
| 10 | + |
| 11 | +- **`registry.json`** -- single source of truth for all tool repos (9 entries). The catalog site and README tables are derived from it. |
| 12 | +- **`standards/`** -- 9 Markdown docs defining conventions for folder structure, CI/CD, plugin manifests, GitHub Pages, commit conventions, README format, AGENTS.md format, and versioning. |
| 13 | +- **`scaffold/`** -- Python repo generator (`create-tool.py`) with 18 Jinja2 templates that produce a fully standards-compliant new tool repo. |
| 14 | +- **`docs/`** -- static GitHub Pages catalog site (vanilla HTML/CSS/JS, no build step). Reads `registry.json` at runtime to render tool cards. |
| 15 | +- **`assets/`** -- logo image. |
| 16 | +- **`.github/workflows/`** -- CI/CD for this repo (validate + pages deploy). |
| 17 | + |
| 18 | +## Branching and commit model |
| 19 | + |
| 20 | +- **Single branch**: `main` only. No develop/release branches. |
| 21 | +- **Conventional commits** are required: |
| 22 | + - `feat:` -- new tool added to registry, new standard doc, new scaffold template |
| 23 | + - `fix:` -- corrections to existing content |
| 24 | + - `chore:` -- dependency updates, CI changes |
| 25 | + - `docs:` -- documentation-only changes |
| 26 | +- Commit messages should be concise and describe the "why", not the "what". |
| 27 | + |
| 28 | +## CI/CD workflows |
| 29 | + |
| 30 | +### `validate.yml` (runs on PR and push to main) |
| 31 | + |
| 32 | +Checks: |
| 33 | +- `registry.json` is valid JSON with correct schema (required fields, valid types, integer counts) |
| 34 | +- `docs/index.html`, `docs/style.css`, `docs/script.js` exist |
| 35 | +- `scaffold/create-tool.py` compiles without syntax errors |
| 36 | +- Scaffold dry-run test: generates a test repo and verifies key files exist |
| 37 | + |
| 38 | +### `pages.yml` (runs on push to main when docs/, assets/, or registry.json change) |
| 39 | + |
| 40 | +1. Copies `registry.json` into `docs/` for client-side fetch |
| 41 | +2. Copies `assets/` into `docs/assets/` |
| 42 | +3. Uploads `docs/` as a Pages artifact |
| 43 | +4. Deploys to GitHub Pages via `actions/deploy-pages` |
| 44 | + |
| 45 | +## Key files and what they do |
| 46 | + |
| 47 | +### `registry.json` |
| 48 | + |
| 49 | +Array of tool objects. Required fields per entry: |
| 50 | + |
| 51 | +| Field | Type | Description | |
| 52 | +|-------|------|-------------| |
| 53 | +| `name` | string | Display name | |
| 54 | +| `repo` | string | `Owner/RepoName` | |
| 55 | +| `slug` | string | Kebab-case identifier | |
| 56 | +| `description` | string | One-line summary | |
| 57 | +| `type` | string | `cursor-plugin` or `mcp-server` | |
| 58 | +| `homepage` | string | Docs site URL (empty string if none) | |
| 59 | +| `skills` | int | Number of skills | |
| 60 | +| `rules` | int | Number of rules | |
| 61 | +| `mcpTools` | int | Number of MCP tools | |
| 62 | +| `extras` | object | Optional extra counts (snippets, templates, natives, events) | |
| 63 | +| `topics` | string[] | Discovery tags | |
| 64 | +| `status` | string | `active`, `beta`, `deprecated` | |
| 65 | +| `version` | string | Current semver version | |
| 66 | +| `language` | string | Primary language | |
| 67 | +| `license` | string | SPDX identifier | |
| 68 | +| `pagesType` | string | `static`, `mkdocs`, or `none` | |
| 69 | +| `hasCI` | bool | Whether the repo has CI workflows | |
| 70 | + |
| 71 | +### `docs/index.html` |
| 72 | + |
| 73 | +The catalog site. It embeds a copy of the registry data in a `<script type="application/json">` tag as a fallback, and also fetches `registry.json` at runtime. When updating the registry, **also update the embedded copy in index.html** to keep them in sync. |
| 74 | + |
| 75 | +### `scaffold/create-tool.py` |
| 76 | + |
| 77 | +Python script using Jinja2. Templates live in `scaffold/templates/`. The script accepts CLI args (`--name`, `--description`, `--type`, `--mcp-server`, `--skills`, `--rules`, `--license`, `--output`). |
| 78 | + |
| 79 | +### `standards/` |
| 80 | + |
| 81 | +Pure documentation -- no code. Each file documents a convention derived from analyzing existing TMHSDigital tool repos (CFX, Docker, Steam, Home Lab, etc.). |
| 82 | + |
| 83 | +## Adding a new tool to the registry |
| 84 | + |
| 85 | +1. Add an entry to `registry.json` following the schema above |
| 86 | +2. Update the embedded registry in `docs/index.html` to match |
| 87 | +3. Update the tools table and aggregate stats line in `README.md` |
| 88 | +4. Use `feat:` commit prefix |
| 89 | + |
| 90 | +## Adding or updating a standard |
| 91 | + |
| 92 | +1. Edit or create the file in `standards/` |
| 93 | +2. If new, add a row to the standards table in `README.md` and in `standards/README.md` |
| 94 | +3. If the standard affects the scaffold output, update the corresponding `.j2` template in `scaffold/templates/` |
| 95 | +4. Use `docs:` commit prefix for docs-only changes, `feat:` if adding a new standard |
| 96 | + |
| 97 | +## Updating the scaffold |
| 98 | + |
| 99 | +1. Edit templates in `scaffold/templates/` |
| 100 | +2. If adding a new template file, update `scaffold/create-tool.py` to render it |
| 101 | +3. Test with: `python scaffold/create-tool.py --name "Test" --description "Test" --mcp-server --skills 2 --rules 1 --output /tmp/test` |
| 102 | +4. CI runs a dry-run test on every push |
| 103 | + |
| 104 | +## Code conventions |
| 105 | + |
| 106 | +- No hardcoded credentials anywhere |
| 107 | +- `registry.json` must be valid JSON at all times -- CI enforces this |
| 108 | +- The catalog site uses no external CDN dependencies -- everything is self-contained |
| 109 | +- Standards docs are written for public readership -- no internal references or private repo mentions |
| 110 | +- Use hyphens, not em dashes or en dashes, in all content |
| 111 | + |
| 112 | +## Dependencies |
| 113 | + |
| 114 | +This repo has one Python dependency: `Jinja2` (for the scaffold generator). It is listed in `requirements.txt`. |
| 115 | + |
| 116 | +The docs site has zero dependencies -- vanilla HTML, CSS, and JavaScript. |
| 117 | + |
| 118 | +## License |
| 119 | + |
| 120 | +CC-BY-NC-ND-4.0. All contributions fall under this license. |
0 commit comments