naveedharri/benai-skills/agentic-os-setup

Claude Code and agent skill by naveedharri/benai-skills

Trust tier 2
  • community
  • ext:[{"type":"config","description":"Configuration overrides"}]
LLM review pending
Source check pending

Checking that the SKILL.md file is still in the repository.

Set up an agentic OS — either inside an Obsidian vault (bundled command-center dashboard, 5 auto-installed plugins, button bar wired to Claude prompts) OR as a standalone Next.js web dashboard with live MCP integrations (Circle, Fireflies, YouTube/VidIQ, Unipile LinkedIn DMs, Apify Twitter, Reddit), Anthropic Agent SDK refreshes, and optional Railway deploy. Use when the user says "set up agentic OS", "install command center", "bootstrap a personal AI dashboard", "build a vault dashboard", "spin up an MCP-powered dashboard", "deploy an AI ops dashboard", "give me my own version of the dashboard", "set up my second brain dashboard", or asks to personalize a dashboard previously created with this skill. Skill asks one routing question first — Obsidian or standalone — then runs the matching full flow.

Install

npx vskill@latest install naveedharri/benai-skills/agentic-os-setup

Semi-extensibleMentions customization, but needs skill-specific knowledge. Read the extensible skills standard

SKILL.md

Agentic OS Setup

This skill installs an agentic OS for the user. There are two routes:

  • Route A — Obsidian vault. Installs a configurable command-center dashboard inside an existing Obsidian vault. Bundles and side-loads 5 plugins (Dataview, CustomJS, Shell-commands, Terminal, Homepage). Home + per-profile + Vault Overview pages. Button bar wired to user-defined Claude prompts via Shell-commands. Markdown-based, no servers.
  • Route B — Standalone web dashboard. Bootstraps a Next.js 14 dashboard wired to the Claude Agent SDK plus up to 7 MCP integrations (Circle community, Fireflies meetings, YouTube/VidIQ, Unipile LinkedIn DMs, Apify Twitter/X, Reddit). Optional Railway deploy with HTTP basic auth and a persistent volume. Real web app, can run locally or live.

Both routes share the same conceptual model: a per-profile dashboard, a button-bar of actions, and snapshot-style data refreshes. They differ in surface (markdown vs Next.js), data shape (frontmatter vs JSON snapshots), and deployment (none vs Railway).

Step 0 — Route question (ALWAYS ASK FIRST)

Before anything else, use AskUserQuestion to route:

"Where do you want this set up?"
- Inside an Obsidian vault — command-center dashboard rendered via Dataview + CustomJS. Best if you already use Obsidian, want markdown-native, no server.
- As a standalone web dashboard — Next.js app with live MCP integrations and optional Railway deploy. Best if you want a real web URL, live API integrations, multi-user access via HTTP basic auth.

Header: "Surface". multiSelect: false. Don't pre-select. Don't proceed until answered.

Then execute the matching route below.


Route A — Obsidian vault

Use this entire section when the user picks "Inside an Obsidian vault" in Step 0.

Installs a configurable command-center dashboard in any Obsidian vault. Home + per-profile + Vault Overview pages, KPI cards, sparklines, heatmap, task rollup, recent-files lists, and a button bar wired to user-defined Claude prompts via the Shell-commands plugin. All 5 required plugins are bundled and auto-enabled — the user only has to restart Obsidian.

A.1 What gets installed

{vault}/
├── Dashboard/
│ ├── Home.md # Team-wide dashboard
│ ├── Vault-Overview.md # Top-level vault health view
│ ├── {Profile}.md # One per configured profile
│ ├── Setup.md # In-vault setup reference
│ ├── CLAUDE.md # AI routing rules for this folder
│ ├── components/dashboard.js # The renderer (CONFIG substituted)
│ └── lib/frappe-charts.min.js
└── .obsidian/
├── snippets/command-center.css # Brand-styled CSS (enabled)
├── plugins/dataview/ # Side-loaded, enabled
├── plugins/customjs/ # Side-loaded, enabled
├── plugins/obsidian-shellcommands/ # Side-loaded, enabled, aliases pre-registered
├── plugins/terminal/ # Side-loaded, enabled, "Claude" profile configured
├── plugins/homepage/ # Side-loaded, enabled, points to Dashboard/Home
├── community-plugins.json # Union'd with the 5 plugin IDs
└── appearance.json # CSS snippet enabled

A.2 Pre-flight checks

bash
test -d .obsidian && echo "vault confirmed" || (echo "NOT A VAULT — cd into your Obsidian vault first" && exit 1)
test -d Dashboard && echo "DASHBOARD EXISTS — ask user before overwriting"

If Dashboard/ exists, ask: cancel / install into Dashboard-new/ / overwrite (require explicit "yes overwrite").

A.3 Interview (always run before installing)

Use AskUserQuestion for each. Capture answers into variables for substitution into CONFIG.

Q1. Organization name

"What's your organization or personal brand name? (Used in folder paths and dashboard header. Short — one word ideal.)" Default if skipped: MyOrg. Variable: ORG_NAME.

Q2. Brand label + subtitle

"What should the dashboard show as its title?" Two parts:

  • Brand label (header text, e.g. "Acme"). Defaults to ORG_NAME. Variable: BRAND_LABEL.
  • Brand subtitle (small text after the label, e.g. "Agentic OS", "Command Center"). Default Command Center. Variable: BRAND_SUB.
Q3. Profile list

"Who's on the team? List each profile name on a separate line. Use lowercase or capitalized — must match the folder names you'll use in step 4. For a solo vault, just one name." Parse into array. Variable: PROFILES (JSON array). The first is DEFAULT_PROFILE.

Q4. Profile folder pattern

"Where do you keep per-profile data?" Show 4 options via AskUserQuestion:

  • Team/{ORG}/Profiles/{name} (recommended for orgs — matches Team/Acme/Profiles/Alex)
  • Team/{name} (flat team layout)
  • People/{name} (alternative naming)
  • Custom — ask user to type the exact pattern. Must contain {name}. {ORG} is optional.

Variable: PROFILE_FOLDER_PATTERN. Verify each PROFILES[i] folder exists (warn if missing — installer will still write the dashboard; profile folders just won't have data yet).

Q5. Daily / Tasks / Snapshots subpaths

Three quick AskUserQuestion calls (each with sensible defaults):

  • Daily subpath within each profile folder. Default Daily. Empty disables. Variable: DAILY_SUBPATH.
  • Tasks subpath (Task Board plugin uses task-list). Default task-list. Empty disables the task widget. Variable: TASKS_SUBPATH.
  • Snapshots subpath for JSON files the dashboard reads. Default snapshots. Variable: SNAPSHOTS_SUBPATH.

Also: Root daily path for team-wide rollups. Default Daily. Variable: ROOT_DAILY_PATH.

Q6. Pages to ship

Which dashboard pages? MultiSelect:

  • Home (team rollup) — always recommended
  • Per-profile pages (one per Q3 profile)
  • Vault Overview (top-level folder health)
  • Custom — user names extra pages

Variable: PAGES (array). Installer creates one .md per page.

Q7. Overview folders (only if Vault Overview is in PAGES)

"Name 3-5 top-level folders to show on the Vault Overview page. For each: folder path, one-line description, optional CLAUDE.md path (or empty)." Variable: OVERVIEW_FOLDERS (array of [path, description, claude_path]). Defaults if skipped: detect Projects/, Resources/, Intelligence/, Departments/, Teams/, Daily/ if present.

Q8. Buttons (with Claude prompts)

"What action buttons should the dashboard expose? For each button: label (short), icon (emoji or empty), scope (team / profile / both), and a Claude prompt (the text passed to claude -p '...'). Use {profile} in the prompt to interpolate the current profile name. Add as many as you want; defaults are zero."

Suggest these as starter buttons (user can accept/reject each):

  • Morning brief (☀️, both, prompt: "Read today's daily for {profile} if it exists. Write a 5-line morning brief covering open loops, top priorities, and energy level. Append under a '## Morning brief' heading.")
  • New daily (📝, both, prompt: "Create today's daily note at <DAILY_PATH>/$(date +%Y-%m-%d).md with standard frontmatter and section headings. Don't overwrite if it exists.")
  • Launch Claude (💬, both, cmd: terminal:open-terminal.claude.root) — wired via Terminal plugin "Claude" profile, NOT a shell-command
  • Reload (🔄, both, cmd: app:reload)
  • Settings (⚙️, both, cmd: app:open-settings)

For every button with a prompt, the installer generates a shell-commands alias shell-command-<kebab-label> and a cmd: obsidian-shellcommands:shell-command-<alias>.

Variable: BUTTONS (object with team and profile arrays).

Q9. Brand colors

Two hex colors. Defaults: primary #020309, canvas #FAF3E3. Substitute into CONFIG.COLORS and the CSS snippet variables at the top of command-center.css.

Q10. Brand mark (optional)

"Path to a PNG/SVG logo to show in the dashboard header? Leave blank for no logo." If provided, copy to Dashboard/lib/brand-mark.png and set BRAND_MARK_PATH to that. Default empty.

A.4 Critical constraints — read before editing the renderer template

These two pitfalls broke real installs. Treat them as load-bearing.

1. CustomJS file shape: ONE class expression, period.

CustomJS evaluates each .js file as eval(\(${file_contents})\) — it wraps the entire file in parentheses to coerce it into a single expression and pull the class out. This means:

  • ✅ Allowed: a single class dashboard { ... } declaration. Comments before and after are fine.
  • ❌ NOT allowed: a top-level const CONFIG = {...} or any other statement before/after the class. (const CONFIG = ...) is a syntax error because const is a statement, not an expression. CustomJS surfaces this as SyntaxError: ParseError: Unexpected token.

In references/obsidian/dashboard-template.js, CONFIG lives as a static CONFIG = { ... } field at the top of the class body. All code references it as this.constructor.CONFIG.X (not bare CONFIG.X). Preserve that pattern when editing — if you re-introduce a top-level const, the dashboard renders as a blank page with no console error from the dataviewjs block.

Smoke test before shipping any renderer change:

bash
node -e "$(cat dashboard-template.js | sed 's/__[A-Z_]*__/null/g' | python3 -c 'import sys; print(f\"({sys.stdin.read()})\");')"

If that fails with a SyntaxError, the file violates the constraint. Fix before substitution.

2. Plugin data.json keys are NOT what you'd guess.

Always cross-reference the keys against a known-working vault — do not invent them from the plugin's UI labels. Confirmed-correct keys:

PluginKeyWrong-but-tempting alternative
customjsjsFolder (and jsFiles: "")❌ folder (silently ignored — plugin scans nothing)
dataviewenableDataviewJs, enableInlineDataviewJs, enableInlineDataview(these are correct)
homepagehomepages (plural, object keyed by display name) → .value❌ homepage (singular)
terminalprofiles.claude.executable (absolute path)❌ relying on claude in PATH (Obsidian doesn't inherit login shell PATH)
obsidian-shellcommandsshell_commands[shell-command-<alias>].shell_command❌ flat commands[] array

When in doubt, look at a known-working install's data.json before writing the install flow.

A.5 Install execution

After the interview, do these in order. Resolve $SKILL_DIR from the skill's own path. All references live under $SKILL_DIR/references/obsidian/.

Step 1. Create folder structure
bash
mkdir -p Dashboard/components Dashboard/lib Dashboard/snapshots
mkdir -p .obsidian/snippets .obsidian/plugins
Step 2. Substitute CONFIG and write dashboard.js

Read $SKILL_DIR/references/obsidian/dashboard-template.js. Substitute each placeholder with the captured value:

This is the start of the file. Read the full SKILL.md on GitHub.

Security

  • Security scanPassed, 100 of 100Pattern checks on the skill's files.
  • Model reviewNot runA model review is scheduled for the next rescan.

Quality evaluation

  • Task evaluationNot runNo evaluation yet. Run one in Skill Studio.

Source

Popularity

Repository stars
61
Repository forks
26
7-day trend score
21

Stars and forks are for the whole GitHub repository, not this skill alone. Not refreshed yet.

Extension points

  • configConfiguration overrides

Works with

Any agent vskill installs to: 56 targets in all. These 39 have a page on this site.

  • Claude Code
  • Cursor
  • GitHub Copilot
  • Windsurf
  • Codex
  • Gemini CLI
  • Cline
  • Amp
  • Roo Code
  • Goose
  • Continue
  • Kilo Code
  • Junie
  • Trae
  • OpenHands
  • Qwen Code
  • AI Agent
  • Tabnine Chat
  • Sourcegraph Cody
  • Amazon Q
  • Firebase Genkit
  • Sweep
  • Devin
  • Phind
  • Mentat
  • Claude Desktop
  • Aider
  • GPT Pilot
  • Plandex
  • bolt.new
  • v0
  • Replit Agent
  • Anse
  • TypingMind
  • BetterChatGPT
  • LibreChat
  • Warp AI
  • Pieces
  • Fig AI
Embed badge
vskill VERIFIED badge
[![vskill VERIFIED](https://verified-skill.com/api/v1/skills/naveedharri/benai-skills/agentic-os-setup/badge)](https://verified-skill.com/skills/naveedharri/benai-skills/agentic-os-setup)

Something wrong with this skill or its page? Tell us.