跳转到内容

Personal site data sources

Noa already has strong raw material for a personal “devtools portfolio”: a live GitHub profile README (AsterisMono/AsterisMono), a digital garden/blog at herbarium.requiem.garden, recent repos/PRs on GitHub, and a cloud agent orchestrator (herdr-wrapper / DIY Cursor Projects–style fleet on always-on machines) for overnight agent status — not laptop-local Herdr alone. Token usage is the hard section: Cursor’s documented usage APIs are Team/Enterprise Admin (and Org) APIs, not a public individual “token dashboard API”; self-serve users realistically use dashboard CSV export and/or optional unofficial local scrapers. Cloud Agents have a real public beta API (GET /v1/agents, run status, per-agent usage). Recommended shape: static/ISR site for README + posts + public GitHub activity, plus a small private “pulse” backend (or local-first dashboard) for Herdr status and any token series you choose to publish in anonymized form.


  • Profile README as About: treat USERNAME/USERNAME README as the source of truth; personal site /about or hero fetches and renders it (common Next.js + next-mdx-remote pattern).
  • Live /readme page: dedicated route that always shows the current GitHub profile README (example open-source: sametcn99/personal-website).
  • Pinned “featured” cards under the README body (Noa’s README already lists flake, mimosa, aster, reverie, herbarium).
  • Keep GitHub-flavored markdown (tables, task lists, relative links) via remark-gfm; strip or sandbox raw HTML if rendering untrusted MD.
SourceHowNotes
Profile READMEhttps://raw.githubusercontent.com/AsterisMono/AsterisMono/main/README.md or GitHub Contents APIPublic, no auth
Profile metadataGET /users/AsterisMonobio, blog URL, avatar, public_repos
Pinned reposGraphQL user.pinnedItems (needs token) or hardcode from README linksREST has no clean “pinned” list without scraping

Noa today: Profile README exists and is strong (“Immutable foundations…”). Blog field points to herbarium.requiem.garden. Public identity: GitHub AsterisMono, name Noa Virellia.

  • Unauthenticated REST: ~60 req/h; authenticated PAT/App: 5,000 req/h.
  • Raw GitHub CDN is fine for build-time or ISR (revalidate every few minutes–hours).
  • Privacy: README is public by definition; don’t pull private bio fields.

  • MD/MDX blog in-repo (content/posts/*.mdx + frontmatter: title, date, tags, summary).
  • Digital garden: evergreen notes + graph/backlinks (Quartz, Obsidian Digital Garden plugin, Onvu-style garden + portfolio).
  • Hybrid: garden for thinking-out-loud; dated posts for announcements; Digests/ as research feed (this note’s home).
  • List UI: chronological index + tag chips; RSS/Atom; optional /llms.txt for agent-readable summaries (minifolio pattern).
SourceFit for NoaCaveats
Obsidian vault → publishHigh — Digests already under vault; herbarium is the public gardenNeed an explicit publish pipeline (Quartz / Digital Garden plugin / custom MDX sync). Don’t publish private Digests by default.
In-repo MDXBest for a new personal-site monorepoManual dual-write vs herbarium unless synced
GitHub Issues/Discussions as postsPossible CMSUgly UX; better as “changelog” than essays
SSG: Astro / Next / Hugo / QuartzAll viableMatch stack to who maintains the site

Noa today: herbarium.requiem.garden already positions as knowledge base / blog / digital garden. Vault path for Digests: Digests/ in Noa’s local vault. Repo AsterisMono/obsidian-agent suggests agent tooling around Obsidian (recent PRs Sep 2026).

  • Prefer opt-in frontmatter (publish: true) or a public/ folder so Digests and private notes never ship.
  • If syncing Obsidian → Git, review for secrets, medical notes, unreleased work.

  • Sparkline / stacked bar: tokens or “activity units” by day; optional model mix pie.
  • Public vs private: most people keep $ amounts private; publish anonymized daily totals or a qualitative “busy / quiet” heatmap.
  • Separate IDE/agent usage (Cursor) from API usage (OpenAI) — different products, different units.

Official Admin API (Basic auth with Admin API key as username):

  • POST https://api.cursor.com/teams/daily-usage-data — per-user/day IDE metrics (tabs, chat/composer/agent requests, lines, mostUsedModel). Rate limit ~20 rpm/team; date range ≤30 days/call. Poll ≤1/hour recommended.
  • POST https://api.cursor.com/teams/filtered-usage-events — event-level tokens (inputTokens, outputTokens, cache tokens), chargedCents, conversationId, optional cloudAgentId. ~60 rpm/team.
  • POST https://api.cursor.com/teams/spend — billing-cycle spend.
  • Org counterparts under /organizations/... for multi-team orgs.

Plain fact: These are team/org admin surfaces, not a documented public API for every individual Pro user.

  • Dashboard Usage page + CSV export (documented in product/help discussions): usable for personal charts; included usage may show as “Included” rather than $.
  • As of mid-2026 forum reports, self-serve Usage UI/CSV leaned token-oriented; dollar fields on some dashboard endpoints were zeroed for self-serve — treat $ as unreliable unless Admin/Enterprise reconciliation applies.
  • No official individual “Usage API / CLI” as a supported product feature (feature requests exist; Admin API is the supported automation path for teams).
  • Unofficial tools (e.g. scraping dashboard session cookies or reading local Cursor DBs) exist in the wild — unsupported, brittle, privacy-sensitive; do not build the personal-site project on them unless Noa explicitly accepts that risk.

Cursor Cloud Agents (usable for agent token slices)

Section titled “Cursor Cloud Agents (usable for agent token slices)”
  • GET https://api.cursor.com/v1/agents/{id}/usage — per-run input/output/cache/total tokens (public beta Cloud Agents API; user or service API key). Good for “what my cloud agents burned,” not full IDE Tab usage.
  • Completions usage: GET https://api.openai.com/v1/organization/usage/completions (Admin key).
  • Costs: GET https://api.openai.com/v1/organization/costs.
  • Needs org admin key; bucketed by day (and group_by model/project/etc.).
  • Org/enterprise Copilot usage metrics REST (policy must enable metrics). 2026 AI Credits (ai_credits_used) are coarse per-user/day — not model/repo breakdown. Irrelevant unless Noa uses Copilot at org scope.
  • Never put Admin/API keys in the static site; ingest server-side or offline into a public JSON with aggregated numbers only.
  • Anonymize: drop emails, conversation IDs, repo names, prompt text; publish daily sums or percentiles.
  • Rate limits and 30-day Admin windows imply a warehouse/cron, not live browser calls.

  • Status board: columns or dots for working / blocked / idle / done (Herdr’s model).
  • Public site usually shows a sanitized pulse (“2 agents working”) not live terminal output (secrets risk).
  • Private “mission control” can embed richer boards (herdr-portal web big-screen).

Primary: cloud orchestrator (herdr-wrapper / DIY Cursor Projects) — use this for the site

Section titled “Primary: cloud orchestrator (herdr-wrapper / DIY Cursor Projects) — use this for the site”

Per project direction (Todey / Noa): agent running status on the personal site should reflect overnight fleet work from Noa’s cloud agent orchestrator, not agents that only live on the laptop while it is open.

Treat the stack as layers:

  1. Orchestrator (product intent ≈ Cursor Projects) — coordinator plans/delegates long-running work, keeps shared context, can run without the laptop. Cursor’s own Projects is the commercial version (cursor.com/blog/projects); Noa’s herdr-wrapper is the DIY / self-hosted analogue to watch.
  2. Runtime (Herdr) — Herdr is the multi-agent terminal workspace under many DIY fleets. CLI + local socket JSON API on the machine where the fleet runs (ideally always-on / cloud VM, not the laptop):
    • herdr agent list / herdr agent get <target> — states idle | working | blocked | done | unknown
    • herdr status / herdr api schema — health + protocol
    • Integrations: Cursor Agent CLI (herdr integration install cursor), Claude, Codex, etc.
  3. Sibling DIY orchestrators worth studying for patterns (not necessarily adopt): orchestratr (Herdr-based), herdr-factory (PR factory on Herdr worktrees), herdr-outpost (remote dashboard + Cloudflare Tunnel relay).

Site implication: the pulse worker must talk to wherever herdr-wrapper / the fleet Herdr socket lives (cloud host), so status stays true overnight after asymmetry sleeps. Laptop-local ~/.herdr on asymmetry is secondary / optional for “am I coding right now,” not the public overnight board.

Noa today: home layout historically includes .herdr / .herdr-projects on asymmetry, but local inspection was blocked this run (desktop app offline). Confirm herdr-wrapper deploy host, socket path, and redaction policy when online.

Feeding a personal site: daemon or cron on the fleet host reads orchestrator/Herdr status → writes redacted status.json (counts by state, maybe agent nicknames) to object storage or a private API. Optional: herdr-outpost-style relay for a private mission-control UI. Do not expose raw Herdr sockets or transcripts publicly.

Cursor Cloud Agents / Projects API (complement, if used)

Section titled “Cursor Cloud Agents / Projects API (complement, if used)”
  • Official Projects: cloud coordinator + subscriptions (Slack/schedules/PRs); Agents Window.
  • Cloud Agents API (public beta): GET https://api.cursor.com/v1/agents (ACTIVE | IDLE | ARCHIVED); run status endpoints; UI cursor.com/agents.
  • Use if Noa also runs Cursor-hosted cloud agents; still keep DIY fleet as the primary overnight signal per project brief.
  • vibecode-dash / Atlas / herdr-portal — private mission control patterns; publish only through a redaction gate.
  • Herdr socket is local-trust; treat agent transcripts as secret.
  • Cloud Agents API keys are account-scoped; rotate; never ship to browser.
  • Public status should omit prompts, paths, and pane contents.

  • Cards: repo name, one-line description, language, last push, stars.
  • Activity feed: merged PRs + releases + “shipped this week.”
  • Contribution heatmap (GitHub calendar) as ambient signal.
  • Changelog / RSS from releases (atom feed per repo).
SourceEndpoint / methodNotes
Recent reposGET /users/AsterisMono/repos?sort=pushedPublic
SearchGET /search/repositories?q=user:AsterisMonoSorted by updated
PRs authoredGET /search/issues?q=author:AsterisMono+is:prCross-repo (incl. nixpkgs)
EventsGET /users/AsterisMono/events/publicPush, PR, etc.; short retention
ReleasesGET /repos/{owner}/{repo}/releasesPer featured repo
CommitsGET /repos/{o}/{r}/commits?author=AsterisMonoNoise; prefer PRs for “works”

Snapshot (research time, UTC→interpret as recent activity):

  • Repos updated: flake, obsidian-agent, xpipe-vault, recital, nori-template, waybar-toys, reverie, …
  • Recent PRs: obsidian-agent #5/#1; flake #24/#23; NixOS/nixpkgs #556040 (letos), etc.

GraphQL can fetch pinned repos + contribution calendar in one query with a PAT.

  • Prefer public endpoints for the public site.
  • Filter out private fork noise and abandoned toys via allowlist (featured list from README).
  • Don’t show private org PRs unless intentionally.

Combined open-source patterns (activity dashboards)

Section titled “Combined open-source patterns (activity dashboards)”

Worth studying for UX, not necessarily forking wholesale:

  • vibecode-dash — local-first: Claude/Codex sessions + GitHub + Obsidian → SQLite on localhost.
  • Atlas (thebenignhacker/atlas) — portfolio map + activity feed; optional unified public/private snapshots.
  • minifolio — live GitHub APIs + /events stream + /llms.txt.
  • Onvu — portfolio + digital garden (Next).
  • sametcn99/personal-website — MDX blog + live GitHub README route.
  • herdr-portal — agent kanban over Herdr (private mission control).

┌─────────────────────────────┐
GitHub public ───►│ Build / ISR (Vercel etc.) │──► Public site
Profile README │ - / (README + featured) │ herbarium link-out
Issues/PRs/repos │ - /posts (MDX or garden) │ or embed garden
herbarium / MDX │ - /works (PR+repo cards) │
└─────────────▲───────────────┘
│ optional public JSON
┌─────────────┴───────────────┐
Fleet host (cloud)│ Private pulse worker │
herdr-wrapper / │ - overnight agent fleet │
Herdr socket │ - redact → status.json │
(+ Cloud Agents) │ - optional token aggregates│
CSV / Admin API │ - never expose sockets/keys│
└─────────────────────────────┘

Phased delivery for personal-site:

  1. Public static: README sync + works feed + link to herbarium (or import selected posts).
  2. Private pulse: Herdr status + Cloud Agents list for Noa-only view (auth gate).
  3. Token panel: start with manual/CSV → SQLite; upgrade to Admin API only if on Team/Enterprise; publish only anonymized series if desired.

  • Agent status source of truth: herdr-wrapper / DIY fleet host (overnight) confirmed; exact host URL/socket and public redaction fields still TBD. / decisions for Noa & Todey
  1. Is personal-site a new surface, or an upgrade path for herbarium? Dual sites vs one garden+dashboard.
  2. Which posts are in-scope? Digests only, herbarium notes with publish: true, or greenfield MDX?
  3. Cursor plan tier? Individual CSV-only vs Team Admin API availability changes the token section completely.
  4. How public should agent status be? Dot counts vs named agents vs private-only.
  5. Herdr on asymmetry: confirm .herdr / .herdr-projects contents and whether a bridge daemon is acceptable always-on.
  6. Anonymization bar for tokens: publish nothing / daily totals / model mix without $ / full private dashboard only.
  7. Featured works allowlist: stick to README featured list or auto-include all pushed repos?

  • Machine asymmetry was disconnected; could not ls .herdr*, run herdr, or verify Digests folder on-disk before write. Digest write attempted via machine Shell when reconnecting; if still offline, content was staged on the research box.