{"id":50856154,"url":"https://github.com/cybrking/claude-os","last_synced_at":"2026-06-14T18:39:05.687Z","repository":{"id":361930941,"uuid":"1256482871","full_name":"cybrking/claude-os","owner":"cybrking","description":"Self-hosted dashboard for your Claude Code workspace. Real-time stats from ~/.claude/","archived":false,"fork":false,"pushed_at":"2026-06-09T04:09:13.000Z","size":1026,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":0,"default_branch":"main","last_synced_at":"2026-06-09T06:14:10.729Z","etag":null,"topics":["anthropic","claude","claude-code","dashboard","developer-tools","self-hosted"],"latest_commit_sha":null,"homepage":null,"language":"JavaScript","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/cybrking.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2026-06-01T20:25:31.000Z","updated_at":"2026-06-09T04:09:15.000Z","dependencies_parsed_at":null,"dependency_job_id":null,"html_url":"https://github.com/cybrking/claude-os","commit_stats":null,"previous_names":["cybrking/claude-os"],"tags_count":1,"template":false,"template_full_name":null,"purl":"pkg:github/cybrking/claude-os","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/cybrking%2Fclaude-os","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/cybrking%2Fclaude-os/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/cybrking%2Fclaude-os/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/cybrking%2Fclaude-os/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/cybrking","download_url":"https://codeload.github.com/cybrking/claude-os/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/cybrking%2Fclaude-os/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":34333806,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-05-26T15:22:16.424Z","status":"online","status_checked_at":"2026-06-14T02:00:07.365Z","response_time":62,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["anthropic","claude","claude-code","dashboard","developer-tools","self-hosted"],"created_at":"2026-06-14T18:39:04.968Z","updated_at":"2026-06-14T18:39:05.681Z","avatar_url":"https://github.com/cybrking.png","language":"JavaScript","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Claude OS\n\n\u003e A self-hosted dashboard for your [Claude Code](https://claude.ai/code) workspace.\n\n[![License: MIT](https://img.shields.io/badge/License-MIT-clay.svg)](LICENSE)\n[![CI](https://github.com/cybrking/claude-os/actions/workflows/ci.yml/badge.svg)](https://github.com/cybrking/claude-os/actions/workflows/ci.yml)\n[![Node ≥20](https://img.shields.io/badge/node-%3E%3D20-brightgreen)](https://nodejs.org)\n\n![Claude OS Overview](docs/screenshots/overview.png)\n\n![Claude OS Usage](docs/screenshots/usage.png)\n\n---\n\n## Features\n\n- **Real token usage** — parsed from your JSONL transcripts, broken down by model (Sonnet, Opus, Haiku) and day over the last 14 days\n- **Subscription-aware** — shows token volume as the headline; API-equivalent dollar value is displayed as a secondary reference only, clearly labeled \"not your bill\"\n- **Skills catalog** — every skill in `~/.claude/skills/` with name and description; no fake invocation stats\n- **Workflows list** — scripts from `~/.claude/workflows/` with chain step visualization\n- **MCP connections** — every connected MCP server from `mcp-needs-auth-cache.json`\n- **Memory viewer** — entries from your file-based memory store with descriptions\n- **9 views** — Overview · Agents · Skills · Workflows · Tasks · Usage · Memory · Connections · Schedules\n- **Auto-refresh** — data reloads every 30 seconds; no rebuild needed\n\n---\n\n## Quick Start\n\n```bash\ngit clone https://github.com/cybrking/claude-os\ncd claude-os\nnpm install\nnpm run build\nnpm start\n```\n\nOpen **http://localhost:3001** — the dashboard reads your `~/.claude/` workspace automatically.\n\n### Requirements\n\n- **Node.js 20+** — [download](https://nodejs.org)\n- **Claude Code** — `~/.claude/` must exist ([get Claude Code](https://claude.ai/code))\n\n---\n\n## How It Works\n\nClaude OS reads your local `~/.claude/` directory on every API request (60-second server cache) and serves it to a React frontend that polls every 30 seconds.\n\n```\n~/.claude/\n  projects/*/**.jsonl      →  token usage by model + day, session history\n  skills/*/SKILL.md        →  installed skills + descriptions\n  workflows/*.js           →  workflow scripts + chain steps\n  mcp-needs-auth-cache     →  MCP server list + auth status\n  projects/*/memory/       →  memory entries\n```\n\nNo external API calls. No accounts. No data leaves your machine.\n\n---\n\n## Configuration\n\n| Variable | Default | Description |\n|----------|---------|-------------|\n| `PORT` | `3001` | Port the server listens on |\n| `NODE_ENV` | — | Set to `production` for production mode |\n| `CLAUDE_DIR` | `~/.claude` | Path to your Claude Code directory |\n\n```bash\nPORT=8080 npm start\nCLAUDE_DIR=/Volumes/external/.claude npm start\n```\n\n---\n\n## Development\n\n```bash\nnpm run dev\n```\n\nStarts two processes via `concurrently`:\n- **Vite** — React dev server with hot reload at `http://localhost:5173`\n- **Express** — API server at `http://localhost:3001`\n\nOpen `http://localhost:5173` in dev mode (Vite proxies `/api/*` calls to `:3001` automatically).\n\n### Project Structure\n\n```\nclaude-os/\n├── server/\n│   └── index.js          # Express API — reads ~/.claude/, serves dist/ in production\n├── src/\n│   ├── App.jsx            # Root component, routing, error boundary\n│   ├── index.css          # Design system (CSS custom properties, all component styles)\n│   ├── hooks/\n│   │   └── useData.js     # Polls /api/* every 30s with retry + stale-while-revalidate\n│   ├── components/\n│   │   ├── ui.jsx         # Primitives: Card, Dot, Pill, Sparkline, StackedBars, etc.\n│   │   └── Overview.jsx   # Overview page + shared row components\n│   └── views/             # One file per nav section (8 views)\n├── docs/\n│   └── screenshots/       # README screenshots\n├── public/\n│   └── favicon.svg        # Clay ✻ icon\n├── .github/\n│   └── workflows/ci.yml   # Build verification on Node 20 + 22\n├── CLAUDE.md              # Setup instructions for Claude Code users\n└── package.json\n```\n\n### Scripts\n\n| Command | Description |\n|---------|-------------|\n| `npm run dev` | Start Vite + Express concurrently (hot reload) |\n| `npm run build` | Production build → `dist/` |\n| `npm start` | Serve `dist/` + API on port 3001 |\n\n---\n\n## Security \u0026 Privacy\n\n- **Local only** — reads exclusively from your machine's `~/.claude/` directory\n- **No external calls** — zero network requests beyond Google Fonts (CSS only)\n- **Localhost CORS** — API only accepts requests from `localhost` origins\n- **Security headers** — `helmet` middleware applied to all responses\n- **Read-only** — no write access to your `~/.claude/` data\n\n---\n\n## Troubleshooting\n\n**Port 3001 is already in use**\n```bash\nPORT=3002 npm start\n```\n\n**Dashboard shows no data / blank views**\n\nRun the build step before starting:\n```bash\nnpm run build \u0026\u0026 npm start\n```\n\n**`~/.claude/` not found**\n```bash\nCLAUDE_DIR=/path/to/your/.claude npm start\n```\n\n**Skills or workflows not showing**\n\n- Skills: `~/.claude/skills/\u003cname\u003e/SKILL.md` must exist\n- Workflows: `.js` files must be in `~/.claude/workflows/`\n- Data refreshes every 60s server-side; restart after adding new items\n\n**Token usage shows zeros**\n\nThe server parses `~/.claude/projects/` JSONL transcripts. If you've recently started using Claude Code, data accumulates over time.\n\n---\n\n## Contributing\n\nOpen an issue before submitting a large PR. For bugs, include your Node version (`node --version`) and any console errors.\n\n1. Fork the repo\n2. Create a branch: `git checkout -b feat/your-feature`\n3. Run `npm run build` to verify\n4. Open a pull request against `main`\n\n---\n\n## License\n\n[MIT](LICENSE) — © 2026 Travis Felder\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fcybrking%2Fclaude-os","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fcybrking%2Fclaude-os","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fcybrking%2Fclaude-os/lists"}