You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
{{ message }}
Repository navigation
Commit e3e8463
Browse filesBrowse the repository at this point in the historyBrowse files
docs: remove drift and personal tooling from contributor docs
Docs drift (#110): no doc references the nonexistent docs/style.css or
docs/script.js any more (the catalog is one index.html with inline CSS
and JS); registry examples drop the removed per-tool version field and
gain category; hardcoded standards counts (9, 17, 18; the real number
is 19) are replaced by a pointer to standards/README.md; AGENTS.md no
longer claims release.yml ignores docs changes; release-doc-sync and
drift-check pin guidance matches the floating tags release.yml
maintains (@v1, @vMAJOR.MINOR); standards examples use current action
majors; the adding-a-tool walkthrough reflects scaffold
auto-registration and the real CLI license value; PERFORMANCE.md is
labeled a historical baseline.
Writing style (#111): the personal context-mode routing block moves out
of the committed CLAUDE.md into a gitignored CLAUDE.local.md, and every
em and en dash in tracked files is replaced. A test enforcing the style
rule lands with the next commit.
Closes#110Closes#111
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Signed-off-by: TMHSDigital <154358121+TMHSDigital@users.noreply.github.com>
- `docs/index.html` is the catalog site entry point.
69
-
- `docs/script.js` fetches `registry.json` at runtime and renders tool cards. It also has an embedded fallback copy.
70
-
- `docs/style.css` is the full stylesheet -- dark theme, responsive, card layout.
69
+
- All CSS and JS are inline in `docs/index.html`. Cards, filters, and stats are pre-rendered by `scripts/sync_from_registry.py`; the inline script adds search and filtering.
71
70
- No external dependencies (CDNs, frameworks). Vanilla HTML/CSS/JS only.
72
71
- The `pages.yml` workflow copies `registry.json` and `assets/` into `docs/` at deploy time.
Copy file name to clipboardExpand all lines: AGENTS.md
+5-5Lines changed: 5 additions & 5 deletions
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -9,7 +9,7 @@ This file tells AI coding agents how the Developer Tools Directory repo works an
9
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
10
11
11
-**`registry.json`** -- single source of truth for all tool repos. README, CLAUDE.md, and the catalog site's embedded registry are generated from it by `scripts/sync_from_registry.py`.
12
-
-**`standards/`** -- 18 Markdown docs defining conventions for folder structure, CI/CD, plugin manifests, GitHub Pages, commits, README format, AGENTS.md format, versioning, release-doc-sync, testing, skills, rules, MCP servers, security, licensing, scope, lifecycle, and writing style.
12
+
-**`standards/`** -- Markdown docs defining conventions for folder structure, CI/CD, plugin manifests, GitHub Pages, commits, README format, AGENTS.md format, versioning, release-doc-sync, testing, skills, rules, MCP servers, security, licensing, scope, lifecycle, and writing style.
13
13
-**`scaffold/`** -- Python repo generator (`create-tool.py`) with Jinja2 templates that produce a fully standards-compliant new tool repo.
14
14
-**`scripts/`** -- automation utilities. `sync_from_registry.py` regenerates all derived artifacts from `registry.json`.
15
15
-**`site-template/`** -- shared GitHub Pages build system for tool repos. `build_site.py` reads `.cursor-plugin/plugin.json`, `site.json`, `skills/`, `rules/`, and `mcp-tools.json` from a tool repo and renders `docs/index.html` via `template.html.j2`. Self-hosts Inter and JetBrains Mono fonts. Tool repos clone this directory in CI and run the build script at deploy time.
@@ -50,7 +50,7 @@ Every PR must pass these 7 checks before it can be merged:
50
50
51
51
Checks:
52
52
-`registry.json` is valid JSON with correct schema (required fields, valid types, integer counts)
-`scaffold/create-tool.py` compiles without syntax errors
55
55
- Scaffold dry-run test: generates a test repo and verifies key files exist
56
56
@@ -61,7 +61,7 @@ Checks:
61
61
3. Uploads `docs/` as a Pages artifact
62
62
4. Deploys to GitHub Pages via `actions/deploy-pages`
63
63
64
-
### `release.yml` (runs on push to main, ignores docs/md/standards changes)
64
+
### `release.yml` (runs on every push to main)
65
65
66
66
1.`check-version` reads `VERSION` at the repo root and compares it with the latest git tag
67
67
2. If they match, the workflow exits cleanly - no release needed
@@ -233,8 +233,8 @@ Pure documentation -- no code. Each file documents a convention derived from ana
233
233
## When editing docs/ (catalog site)
234
234
235
235
-`docs/index.html` is the single-page catalog site. It embeds a copy of `registry.json` inside a `<script type="application/json" id="registry-data">` tag as a fallback for when the direct fetch fails.
236
-
-`docs/script.js`fetches `registry.json` at runtime. If the fetch fails, it reads the embedded copy. It renders aggregate stats (total skills, rules, MCP tools) and tool cards with filtering by type and topic.
237
-
-`docs/style.css` contains all styling -- dark theme, responsive layout, card design. No CSS framework.
236
+
-All CSS and JS are inline in `docs/index.html`; there is no separate stylesheet or script file. The inline script fetches `registry.json` at runtime (falling back to the embedded copy) and adds search, category and status filters, and URL state on top of cards that `sync_from_registry.py` pre-renders.
237
+
-Never edit the generated regions by hand (`registry:cards`, `registry:filters`, the embedded JSON blocks, hero stats); change `registry.json` and run `python scripts/sync_from_registry.py`.
238
238
-**No external CDN dependencies.** The site must work fully offline except for badge images. No jQuery, no Bootstrap, no Google Fonts.
239
239
- The `pages.yml` workflow copies `registry.json` and `assets/` into `docs/` at deploy time. You do not need to manually place these files in `docs/`.
240
240
- When testing locally, open `docs/index.html` directly in a browser. The embedded fallback will kick in since `registry.json` won't be in `docs/` locally.
contributors/ # Worked examples for new contributors
36
36
assets/
@@ -47,7 +47,7 @@ Developer-Tools-Directory/
47
47
48
48
### registry.json
49
49
50
-
Array of tool objects. Each entry has: `name`, `repo`, `slug`, `description`, `type` (cursor-plugin | mcp-server), `homepage`, `skills`, `rules`, `mcpTools`, `extras`, `topics`, `status`, `language`, `license`, `pagesType`, `hasCI`. `status` is one of `experimental`, `beta`, `active`, `maintenance`, `deprecated`, or `archived` (see [`standards/lifecycle.md`](standards/lifecycle.md)).
50
+
Array of tool objects. Each entry has: `name`, `repo`, `slug`, `description`, `type` (cursor-plugin | mcp-server), `category` (catalog filter chip; allowed values in `scripts/validate_registry.py`), `homepage`, `skills`, `rules`, `mcpTools`, `extras`, `topics`, `status`, `language`, `license`, `pagesType`, `hasCI`. `status` is one of `experimental`, `beta`, `active`, `maintenance`, `deprecated`, or `archived` (see [`standards/lifecycle.md`](standards/lifecycle.md)).
51
51
52
52
There is intentionally no per-tool `version` field. Tool repos auto-bump patch on every content merge, so a catalog-pinned patch version re-stales on each tool's next content PR; the catalog tracks tools by repo and homepage instead. Do not reintroduce it.
Static HTML/CSS/JS. No build step. No external CDN. The `pages.yml` workflow copies `registry.json` and `assets/` into `docs/`at deploy time. `script.js` fetches `registry.json`at runtime and falls back to an embedded copy. Never use `innerHTML`/`eval` with registry data - the safety-scan CI job blocks reintroduction.
70
+
Static single page; all CSS and JS are inline in `docs/index.html` (there is no separate stylesheet or script file). No build step. No external CDN. `sync_from_registry.py` pre-renders the tool cards, filter chips, and hero stats so the page works without JavaScript; the inline script fetches `registry.json` at runtime (falling back to the embedded copy) and layers search and filtering on top. The `pages.yml` workflow copies `registry.json` and `assets/` into `docs/`and stamps the footer date at deploy time. Refresh search data with `python site-template/aggregate_search.py --clone`. Never use `innerHTML`/`eval` with registry data - the safety-scan CI job blocks reintroduction.
71
71
72
72
### standards/
73
73
74
-
17 Markdown documents defining conventions for every tool repo. Index in [`standards/README.md`](standards/README.md).
74
+
Markdown documents defining conventions for every tool repo. The index in [`standards/README.md`](standards/README.md) is the authoritative list (and the catalog site renders a card per file).
75
75
76
76
## Cataloged Tools
77
77
@@ -180,66 +180,3 @@ Open `docs/index.html` in a browser. The script falls back to embedded registry
The docs site has zero runtime dependencies. The sync script is pure stdlib.
183
-
184
-
# context-mode — MANDATORY routing rules
185
-
186
-
You have context-mode MCP tools available. These rules are NOT optional — they protect your context window from flooding. A single unrouted command can dump 56 KB into context and waste the entire session.
187
-
188
-
## BLOCKED commands — do NOT attempt these
189
-
190
-
### curl / wget — BLOCKED
191
-
Any Bash command containing `curl` or `wget` is intercepted and replaced with an error message. Do NOT retry.
192
-
Instead use:
193
-
-`ctx_fetch_and_index(url, source)` to fetch and index web pages
194
-
-`ctx_execute(language: "javascript", code: "const r = await fetch(...)")` to run HTTP calls in sandbox
195
-
196
-
### Inline HTTP — BLOCKED
197
-
Any Bash command containing `fetch('http`, `requests.get(`, `requests.post(`, `http.get(`, or `http.request(` is intercepted and replaced with an error message. Do NOT retry with Bash.
198
-
Instead use:
199
-
-`ctx_execute(language, code)` to run HTTP calls in sandbox — only stdout enters context
200
-
201
-
### WebFetch — BLOCKED
202
-
WebFetch calls are denied entirely. The URL is extracted and you are told to use `ctx_fetch_and_index` instead.
203
-
Instead use:
204
-
-`ctx_fetch_and_index(url, source)` then `ctx_search(queries)` to query the indexed content
205
-
206
-
## REDIRECTED tools — use sandbox equivalents
207
-
208
-
### Bash (>20 lines output)
209
-
Bash is ONLY for: `git`, `mkdir`, `rm`, `mv`, `cd`, `ls`, `npm install`, `pip install`, and other short-output commands.
210
-
For everything else, use:
211
-
-`ctx_batch_execute(commands, queries)` — run multiple commands + search in ONE call
212
-
-`ctx_execute(language: "shell", code: "...")` — run in sandbox, only stdout enters context
213
-
214
-
### Read (for analysis)
215
-
If you are reading a file to **Edit** it → Read is correct (Edit needs content in context).
216
-
If you are reading to **analyze, explore, or summarize** → use `ctx_execute_file(path, language, code)` instead. Only your printed summary enters context. The raw file content stays in the sandbox.
217
-
218
-
### Grep (large results)
219
-
Grep results can flood context. Use `ctx_execute(language: "shell", code: "grep ...")` to run searches in sandbox. Only your printed summary enters context.
220
-
221
-
## Tool selection hierarchy
222
-
223
-
1.**GATHER**: `ctx_batch_execute(commands, queries)` — Primary tool. Runs all commands, auto-indexes output, returns search results. ONE call replaces 30+ individual calls.
224
-
2.**FOLLOW-UP**: `ctx_search(queries: ["q1", "q2", ...])` — Query indexed content. Pass ALL questions as array in ONE call.
4.**WEB**: `ctx_fetch_and_index(url, source)` then `ctx_search(queries)` — Fetch, chunk, index, query. Raw HTML never enters context.
227
-
5.**INDEX**: `ctx_index(content, source)` — Store content in FTS5 knowledge base for later search.
228
-
229
-
## Subagent routing
230
-
231
-
When spawning subagents (Agent/Task tool), the routing block is automatically injected into their prompt. Bash-type subagents are upgraded to general-purpose so they have access to MCP tools. You do NOT need to manually instruct subagents about context-mode.
232
-
233
-
## Output constraints
234
-
235
-
- Keep responses under 500 words.
236
-
- Write artifacts (code, configs, PRDs) to FILES — never return them as inline text. Return only: file path + 1-line description.
237
-
- When indexing content, use descriptive source labels so others can `ctx_search(source: "label")` later.
238
-
239
-
## ctx commands
240
-
241
-
| Command | Action |
242
-
|---------|--------|
243
-
|`ctx stats`| Call the `ctx_stats` MCP tool and display the full output verbatim |
244
-
|`ctx doctor`| Call the `ctx_doctor` MCP tool, run the returned shell command, display as checklist |
245
-
|`ctx upgrade`| Call the `ctx_upgrade` MCP tool, run the returned shell command, display as checklist |
-`docs/script.js` - fetches registry.json, renders stats and tool cards, filtering
200
+
-`docs/index.html` - the whole site: markup, inline CSS, and inline JS (search, filters, URL state)
201
+
- Generated regions (tool cards, filter chips, hero stats, embedded registry and search JSON) come from `scripts/sync_from_registry.py`; do not edit them by hand
204
202
205
203
The `pages.yml` workflow copies `registry.json` and `assets/` into `docs/` at deploy time, so you don't need to manually copy files.
Copy file name to clipboardExpand all lines: PERFORMANCE.md
+1-1Lines changed: 1 addition & 1 deletion
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -1,6 +1,6 @@
1
1
# Performance
2
2
3
-
> Lighthouse audit results for all TMHSDigital developer tool sites.
3
+
> Historical baseline: a Lighthouse audit from 2026-04-09 covering the five tool sites that existed then. It predates the v1.4.0 site changes and the catalog's growth to 17 tools, so treat the numbers as a reference point, not current scores. Re-run Lighthouse against the live sites before relying on them.
0 commit comments