Fastcrud
benavlabs/fastcrud
A skill your agent uses when building or modifying CRUD endpoints with FastCRUD (the fastcrud PyPI package) in a FastAPI project — covers FastCRUD, crudrouter, EndpointCreator, FilterConfig…
Maintains and debugs the FastAPI-based link-curator web dashboard on port 8090, a separate process from the official Hermes dashboard.
$ npx skills add dodo-reach/hermes-link-curator --skill link-curator-dashboard -a claude-codeProject install by default; add -g for ~/.claude/skills/.
$ gh skill install dodo-reach/hermes-link-curator link-curator-dashboard --agent claude-codeProject scope by default; add --scope user for a personal install. Needs GitHub CLI 2.90.0 or later (public preview).
$ git clone --depth 1 https://github.com/dodo-reach/hermes-link-curator.git skills-src && mkdir -p .claude/skills && cp -r skills-src/skill-link-curator-dashboard .claude/skills/link-curator-dashboard && rm -rf skills-srcUse ~/.claude/skills/ instead of .claude/skills for a personal install. The folder must contain SKILL.md.
Claude Code skills documentation · loads skills from .claude/skills/
Install the "link-curator-dashboard" agent skill from https://github.com/dodo-reach/hermes-link-curator/tree/main/skill-link-curator-dashboard into .claude/skills/link-curator-dashboard/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "link-curator-dashboard", then confirm the skill loads.Claude Code copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$skill-installer install https://github.com/dodo-reach/hermes-link-curator/tree/main/skill-link-curator-dashboardType this inside Codex. $skill-installer <name> installs a curated skill from openai/skills. The installer writes to $CODEX_HOME/skills (default ~/.codex/skills). Restart Codex if the skill does not show up.
$ npx skills add dodo-reach/hermes-link-curator --skill link-curator-dashboard -a codexProject install goes to .agents/skills/; add -g for ~/.codex/skills/.
$ gh skill install dodo-reach/hermes-link-curator link-curator-dashboard --agent codexProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/dodo-reach/hermes-link-curator.git skills-src && mkdir -p .agents/skills && cp -r skills-src/skill-link-curator-dashboard .agents/skills/link-curator-dashboard && rm -rf skills-srcUse ~/.agents/skills/ instead of .agents/skills for a personal install.
Codex skills documentation · loads skills from .agents/skills/
Install the "link-curator-dashboard" agent skill from https://github.com/dodo-reach/hermes-link-curator/tree/main/skill-link-curator-dashboard into .agents/skills/link-curator-dashboard/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "link-curator-dashboard", then confirm the skill loads.Codex copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ npx skills add dodo-reach/hermes-link-curator --skill link-curator-dashboard -a cursorProject install goes to .agents/skills/; add -g for ~/.cursor/skills/.
$ gh skill install dodo-reach/hermes-link-curator link-curator-dashboard --agent cursorProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/dodo-reach/hermes-link-curator.git skills-src && mkdir -p .cursor/skills && cp -r skills-src/skill-link-curator-dashboard .cursor/skills/link-curator-dashboard && rm -rf skills-srcUse ~/.cursor/skills/ instead of .cursor/skills for a personal install.
Cursor skills documentation · loads skills from .cursor/skills/, .agents/skills/, .claude/skills/, .codex/skills/
Install the "link-curator-dashboard" agent skill from https://github.com/dodo-reach/hermes-link-curator/tree/main/skill-link-curator-dashboard into .cursor/skills/link-curator-dashboard/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "link-curator-dashboard", then confirm the skill loads.Cursor copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ gemini skills install https://github.com/dodo-reach/hermes-link-curator.git --path skill-link-curator-dashboard--scope user (default) or --scope workspace; --path is the subfolder of the repo that holds the skill; --consent skips the security confirmation prompt.
$ npx skills add dodo-reach/hermes-link-curator --skill link-curator-dashboard -a gemini-cliProject install goes to .agents/skills/; add -g for ~/.gemini/skills/.
$ gh skill install dodo-reach/hermes-link-curator link-curator-dashboard --agent gemini-cliProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/dodo-reach/hermes-link-curator.git skills-src && mkdir -p .gemini/skills && cp -r skills-src/skill-link-curator-dashboard .gemini/skills/link-curator-dashboard && rm -rf skills-srcUse ~/.gemini/skills/ instead of .gemini/skills for a personal install, then run /skills reload.
Gemini CLI skills documentation · loads skills from .gemini/skills/, .agents/skills/
Install the "link-curator-dashboard" agent skill from https://github.com/dodo-reach/hermes-link-curator/tree/main/skill-link-curator-dashboard into .gemini/skills/link-curator-dashboard/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "link-curator-dashboard", then confirm the skill loads.Gemini CLI copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ gh skill install dodo-reach/hermes-link-curator link-curator-dashboardInstalls for Copilot at project scope by default; add --scope user for a personal install. Preview a skill first with gh skill preview. Needs GitHub CLI 2.90.0 or later (public preview).
$ npx skills add dodo-reach/hermes-link-curator --skill link-curator-dashboard -a github-copilotProject install goes to .agents/skills/; add -g for ~/.copilot/skills/.
$ git clone --depth 1 https://github.com/dodo-reach/hermes-link-curator.git skills-src && mkdir -p .github/skills && cp -r skills-src/skill-link-curator-dashboard .github/skills/link-curator-dashboard && rm -rf skills-srcUse ~/.copilot/skills/ instead of .github/skills for a personal install. Commit .github/skills so cloud agent and code review can use it.
GitHub Copilot skills documentation · loads skills from .github/skills/, .claude/skills/, .agents/skills/
Install the "link-curator-dashboard" agent skill from https://github.com/dodo-reach/hermes-link-curator/tree/main/skill-link-curator-dashboard into .github/skills/link-curator-dashboard/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "link-curator-dashboard", then confirm the skill loads.GitHub Copilot copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
$ npx skills add dodo-reach/hermes-link-curator --skill link-curator-dashboard -a opencodeOpenCode documents no install command of its own. Project install goes to .agents/skills/; add -g for ~/.config/opencode/skills/.
$ gh skill install dodo-reach/hermes-link-curator link-curator-dashboard --agent opencodeProject scope by default (.agents/skills/); add --scope user for a personal install.
$ git clone --depth 1 https://github.com/dodo-reach/hermes-link-curator.git skills-src && mkdir -p .opencode/skills && cp -r skills-src/skill-link-curator-dashboard .opencode/skills/link-curator-dashboard && rm -rf skills-srcUse ~/.config/opencode/skills/ instead of .opencode/skills for a personal install.
OpenCode skills documentation · loads skills from .opencode/skills/, .claude/skills/, .agents/skills/
Install the "link-curator-dashboard" agent skill from https://github.com/dodo-reach/hermes-link-curator/tree/main/skill-link-curator-dashboard into .opencode/skills/link-curator-dashboard/ in this project. Copy the whole folder (SKILL.md and every file beside it), keep the folder name "link-curator-dashboard", then confirm the skill loads.OpenCode copies the folder itself, the same result as the manual copy. Check what it changed before you commit it.
link-curator-dashboardMaintains and debugs the FastAPI-based link-curator web dashboard on port 8090, a separate process from the official Hermes dashboard.
The skill documents a read-only FastAPI dashboard that reads curated links from a vault directory and serves them on port 8090, distinct from the official Hermes dashboard on port 9119, with both able to run side by side. It lists the key paths, the app entry point, the vault parser and the templates folder, and the full set of endpoints, covering the UI itself, a health check, tag and date statistics, cache reload, calendar and search views, per-tag and per-day entry views, and a force-directed graph view backed by D3.js.
Caching is automatic and based on the modification time of INDEX.md: every request checks whether that file changed, serving the cached entries when it has not and silently re-reading and rebuilding the cache when it has, so the dashboard always reflects the current vault state without manual steps. The only exception is when the file cannot be read at all, in which case the last valid cache keeps serving and a warning is logged. The excerpt breaks off before further maintenance details.
3 steps, taken from the first numbered list in SKILL.md.
Read from SKILL.md and the folder at commit 5bd4d5a. It shows what the files ask for, not the result of running them.
Pre-approves nothing: there is no allowed-tools line, so your agent's usual permission prompts apply.
From allowed-tools in the SKILL.md frontmatter.
Shell commands in SKILL.md call:
curlpython3uvicornFrom the folder's file list and the shell code blocks in SKILL.md.
No URLs in SKILL.md. Its commands use curl, which can reach the network depending on how they are called.
From URLs in SKILL.md, links to its own repository left out.
Names no API keys, tokens, secrets or passwords.
From names ending in _API_KEY, _TOKEN, _SECRET, _KEY or _PASSWORD in SKILL.md.
Link Curator Dashboard Maintainer loads about 2.6k tokens when it runs, and up to ~4.7k if it reads all its reference files. Until then it costs about 35 tokens; SKILL.md has 1,184 words of instructions outside code blocks.
Estimates: characters ÷ 4, the usual rule of thumb; real counts depend on the model's tokenizer. Scripts and assets cost tokens only if the agent reads them.
The automated check found no risky patterns in SKILL.md.
Automated static check — not a guarantee. Review scripts before installing. It scans the text of SKILL.md for risky patterns (piping downloads into a shell, reading credential files, hidden Unicode, destructive commands); files beside SKILL.md are not scanned.
The full file from dodo-reach/hermes-link-curator at commit 5bd4d5a, republished under its MIT licence (© dodo-reach). 1,184 words, ~2,603 tokens.
.claude/skills/link-curator-dashboard/SKILL.md (or your agent's skills folder). This skill also uses 5 other files; get the full folder from GitHub.The link-curator dashboard is a FastAPI app running on port 8090, separate from the official Hermes dashboard (hermes dashboard, default port 9119). It reads from the vault at <profile-dir>/vault/ and exposes a read-only web UI.
# Find all dashboard processes
lsof -nP -iTCP:8090 -sTCP:LISTEN
# Check the command
ps -p <pid> -o pid,command
# Check working directory (macOS)
lsof -a -p <pid> -d cwd
# Check working directory (Linux)
readlink /proc/<pid>/cwdCurrent layout (verify with ps aux | grep "8090"):
uvicorn main:app --port 8090 from <profile-dir>/dashboard/hermes dashboard command, default port 9119). They are independent and can run side-by-side.| Component | Path |
|---|---|
| Dashboard app | <profile-dir>/dashboard/ |
| Main app entry | <profile-dir>/dashboard/main.py |
| Vault parser | <profile-dir>/dashboard/archive.py |
| Templates | <profile-dir>/dashboard/templates/ |
| Vault | <profile-dir>/vault/ |
| Endpoint | Purpose |
|---|---|
GET / | Dashboard UI |
GET /health | Health check + entry count |
GET /stats | Tag counts, date distribution |
GET /reload-cache | Force-clear and reload vault cache |
GET /calendar | Calendar view |
GET /search?q=... | Search entries |
GET /tag/{tag} | Entries for a specific tag |
GET /day/YYYY-MM-DD | Entries for a specific day |
GET /day-json/YYYY-MM-DD | JSON feed for a day |
GET /graph | Force-directed graph view (HTML + D3.js) |
GET /graph-json | Graph dataset as {nodes, links} JSON |
archive.py uses mtime-based invalidation — no lru_cache, no manual invalidation needed:
get_all_entries() checks the mtime of INDEX.mdThis means the dashboard always reflects the current vault state without any manual intervention. The only time you need to act is when the file can't be read (permissions, disk error) — in that case the last valid cache is served and a warning is logged.
/reload-cache still exists for edge cases (corrupted mtime, network mounts with broken stat) — it's a manual force-refresh that clears the cache and re-reads immediately.
The dashboard has no watchdog and dies silently (e.g. after a system reboot). Unlike the official Hermes dashboard which can be supervised by hermes gateway install, the link-curator dashboard must be manually restarted when the process exits. See "Dashboard went offline — restart procedure" below.
cd <profile-dir>/dashboard
./start.sh 8090For a background process:
cd <profile-dir>/dashboard
mkdir -p ../logs
nohup ./start.sh 8090 > ../logs/dashboard.log 2>&1 &After starting, verify readiness:
sleep 2 && curl -s --max-time 3 http://localhost:8090/healthExpected: {"status":"healthy","total_entries":N,...}
If health fails, check the background process output:
tail -50 <profile-dir>/logs/dashboard.logcd <profile-dir>/dashboard && python3 validate.pyPitfall: The profile root at
<profile-dir>/also has avalidate.py— it is a DIFFERENT file. Runningpython3 validate.pyfrom the wrong directory gives wrong results or errors. Seereferences/validate-path.mdfor the correct path, common wrong paths, and exit code meanings.
--- separator trapWhen removing a malformed entry from INDEX.md (e.g. one with a wrong header level like # Index instead of ### Title), you may leave behind a dangling --- separator. Combined with the next entry's ---, this creates a double separator pattern (---\n\n---) which produces an empty entry chunk. The validator reports it as ERROR: Missing or malformed ### title line at chunk N.
Fix: After removing a bad entry, check the surrounding context in both INDEX.md and the relevant daily note file (e.g. vault/2026-MM-DD.md). Ensure only ONE --- separates entries, not two. The validator will catch this (Has errors: 1, ERROR: Missing or malformed ### title line) — re-check and patch the orphaned separator.
Why patch misses it: The malformed entry sits in a section of the file where many entries share identical string patterns (e.g. - **Summary**: ... lines). patch reports Found N matches for old_string and refuses to guess. Use Python direct file manipulation instead:
python3 - <<'EOF'
path = "<profile-dir>/vault/INDEX.md"
with open(path) as f:
lines = f.readlines()
# Find the target line and insert/delete as needed
for i, line in enumerate(lines):
if line.startswith("### TARGET ENTRY"):
# remove: del lines[i-1:i+6] (separator + entry)
# insert: lines.insert(i, new_entry_text)
break
with open(path, "w") as f:
f.writelines(lines)
EOFUse this sequence before assuming server-side problems:
curl http://localhost:8090/health — get total_entries countcurl http://localhost:8090/day-json/YYYY-MM-DD — check specific days; returns JSON array of entriescurl http://localhost:8090/ | grep 'entry-card'` — count entry cards in raw HTMLCtrl+Shift+R or incognito windowobsidian skill → INDEX.md Health Check section for the Python chunk analysis one-liner that catches merged entries and double---- separators in seconds.Quick health check (always run after INDEX.md edits):
cd <profile-dir>/dashboard && python3 validate.pyExpected: Has errors: 0, Fully valid: N matching vault entry count.
Key signal: total_entries from /health matches vault count → server is fine, client cache is the issue.
The /graph endpoint renders a D3.js force-directed graph over the vault. Data
is built by get_graph_data() in archive.py and exposed via /graph-json.
Data shape (tag-graph, two node kinds):
nodes: {id, label, kind: "tag"|"entry", count, type?, url?}links: {source: tag_id, target: entry_id} — bipartite, no entry↔entry edgesWhy tag-graph instead of entry-graph: with 100+ entries, an entry↔entry
similarity graph becomes a hairball. Tag hubs collapse shared topics into a
readable cluster, the way Obsidian's native graph view does. Entry count is
O(entries × avg_tags), link count is O(tag_appearances).
Filtering rule: tags with count < 2 are dropped (reduces noise from
one-off tags) and entries that share zero active tags are omitted as orphans.
With 103 entries this produces ~78 tag nodes + ~101 entry nodes + ~400 links.
Front-end interactions (D3 v7 via CDN, no npm install):
See references/graph-view.md for the full D3 template, force tuning, color
map, and a reusable starter at templates/force-graph.html (copy + change the
data endpoint to reuse for a different graph).
For any new page that needs the same nav + footer as the rest of the dashboard:
main.py (HTML response) + matching -json for datacurrent_page string in the template contexttemplates/base.html (use {% if current_page == '<name>' %})base.html if it needs stylesarchive.py if it parses the vaultCtrl+Shift+R or incognito. The dashboard is read-heavy and browsers aggressively cache it.write_file directly on INDEX.md without reading it first, wiping all previous entries. If only June entries show, May is gone. Fix: rebuild from daily notes using scripts/rebuild_index.py (see below). Prevention: use save_entry.py from the obsidian skill for all new saves — it does atomic read+patch, never full overwrite.If INDEX.md was overwritten and entries are missing, rebuild from the daily notes:
cd <profile-dir>/skills/note-taking/obsidian/scripts
python3 rebuild_index.pyThen validate:
cd <profile-dir>/dashboard && python3 validate.py
curl http://localhost:8090/reload-cacheobsidian — vault entry format, save workflow, validate.pycamofox — for browser-session fetching on sites that block simple extractionreferences/validate-path.md — validate.py location, exit codes, what it checksreferences/proc_pid_working_dir.md — how to resolve "which process is actually running on this port"references/vault-dashboard-discrepancy.md — troubleshooting missing entries: always verify INDEX.md Added field vs dashboard groupingreferences/graph-view.md — D3 force-directed graph: data shape, force tuning, color map, interaction patterns© dodo-reach, MIT. Rendered from Markdown: HTML in the file is shown as text, images as links, and headings moved down two levels. Raw file
SKILL.md and 5 other files (references) in skill-link-curator-dashboard of dodo-reach/hermes-link-curator.
Open the folder on GitHubat commit 5bd4d5a
Link Curator Dashboard Maintainer next to the 5 skills that share the most tags, products or categories with it. Stars are the repository's; “used in” counts other GitHub owners with a copy.
| Skill | Stars | Used in | Tokens | Auto-check | Licence | Repo updated |
|---|---|---|---|---|---|---|
| Link Curator Dashboard Maintainer this skilldodo-reach/hermes-link-curator | 142 | — | ~2.6k | Automated safety check: Pass | MIT | |
| Fastcrudbenavlabs/fastcrud | 1.6k | — | ~5k | Automated safety check: Pass | MIT | |
| Readme Generator Probeizhi23/README-Generator-Pro | 113 | — | ~472 | Automated safety check: Notes | None | |
| FastAPI Project Templateswshobson/agents | 40k | 11 repos | ~901 | Automated safety check: Pass | MIT | |
| Fastapi REST API Designopen-edge-platform/anomalib | 6.2k | — | ~838 | Automated safety check: Pass | Apache-2.0 | |
| Cognee Local Server Setuptopoteretes/cognee | 32k | — | ~702 | Automated safety check: Notes | Apache-2.0 |
benavlabs/fastcrud
A skill your agent uses when building or modifying CRUD endpoints with FastCRUD (the fastcrud PyPI package) in a FastAPI project — covers FastCRUD, crudrouter, EndpointCreator, FilterConfig…
beizhi23/README-Generator-Pro
Generate, modify, and render professional README.md files and project introduction HTML pages using the bundled README Generator Pro FastAPI application.
wshobson/agents
Scaffolds FastAPI projects with a layered app layout, dependency injection through Depends, async handlers and database access, middleware and pytest setup.
open-edge-platform/anomalib
Designs and reviews REST APIs for FastAPI services using consistent resource naming, HTTP semantics, validation, security, and error handling patterns.
topoteretes/cognee
Starts the cognee API server and web UI on your own machine, checks its health, connects the SDK or CLI to it and helps you pick between multi-tenant and single-user auth.
circlefin/skills
A skill your agent uses when a developer wants to monetize an API, endpoint, service, model, dataset, tool, or agent-facing resource with Circle USDC pay-per-call payments, Gateway Nanopayments…
dodo-reach/hermes-link-curator
Archives links a user sends into a profile's Obsidian-style vault with a save script and replies with a one-word confirmation instead of a summary.
Works with
Categories
Maintains and debugs the FastAPI-based link-curator web dashboard on port 8090, a separate process from the official Hermes dashboard. The skill documents a read-only FastAPI dashboard that reads curated links from a vault directory and serves them on port 8090, distinct from the official Hermes dashboard on port 9119, with both able to run side by side.js.
Link Curator Dashboard Maintainer fits situations like: debugging why the link-curator dashboard is not reflecting new vault entries; finding the right endpoint to query tags, dates or the link graph; confirming which dashboard process, link-curator or Hermes, is running on a given port.
Run `npx skills add dodo-reach/hermes-link-curator --skill link-curator-dashboard -a claude-code`. Or copy the skill folder (skill-link-curator-dashboard in dodo-reach/hermes-link-curator) into .claude/skills/link-curator-dashboard in your project. Claude Code loads it when a task matches its description.
Run `npx skills add dodo-reach/hermes-link-curator --skill link-curator-dashboard -a codex`. Or copy the skill folder (skill-link-curator-dashboard in dodo-reach/hermes-link-curator) into .agents/skills/link-curator-dashboard in your project. Codex loads it when a task matches its description.
Cursor, Gemini CLI, GitHub Copilot and OpenCode also load SKILL.md folders. With the skills CLI, run `npx skills add dodo-reach/hermes-link-curator --skill link-curator-dashboard -a cursor` (or -a gemini-cli, github-copilot or opencode for the others). To copy it by hand, put the folder in .cursor/skills/link-curator-dashboard, .gemini/skills/link-curator-dashboard, .github/skills/link-curator-dashboard and .opencode/skills/link-curator-dashboard in your project.
Going by SKILL.md and its folder, Link Curator Dashboard Maintainer needs the command-line tools its instructions call (curl, python3 and uvicorn). Our summary lists: A running link-curator FastAPI app with an initialized vault.
SKILL.md contains no URLs. Its commands use curl, which can reach the network depending on how they are called. This is read from the text; nothing was executed.
Our automated static check of SKILL.md found no risky patterns, such as piping downloads into a shell, reading credential files or hidden Unicode. It is not a guarantee. Review the folder before installing.
Link Curator Dashboard Maintainer is published under the MIT licence (the repository's licence). It allows redistribution, so the full SKILL.md is shown on this page.
About 2.6k tokens (SKILL.md is roughly 10k characters). Agents keep only the skill's name and description in context until a task matches; then they load SKILL.md in full. Its references folder adds about 2.1k tokens, read only when the agent opens those files.
Skills that share tags, products or a category with Link Curator Dashboard Maintainer: Fastcrud (benavlabs/fastcrud, 1.6k stars), Readme Generator Pro (beizhi23/README-Generator-Pro, 113 stars), FastAPI Project Templates (wshobson/agents, 40k stars) and Fastapi REST API Design (open-edge-platform/anomalib, 6.2k stars). The comparison table on this page puts their stars, adoption, token cost, safety result and licence side by side.
dodo-reach (a GitHub user) maintains it in dodo-reach/hermes-link-curator, which has 142 GitHub stars. The repository holds 2 skills in this directory. The repository was last updated on June 6, 2026.
Source: dodo-reach/hermes-link-curator on GitHub. Facts on this page come from the repository at the commit we read; the author's words are quoted as theirs.