Build Your Own Claude Agent OS

Build a local AI Agent OS with a dashboard, Claude CLI, and Obsidian memory.

Introduction

30 Second Summary

Every time you start a new conversation with an AI, it has no idea what you talked about yesterday. Your projects, preferences, and past decisions vanish the moment you close the chat window.

In this project, you will build a personal "Agent OS" that gives Claude persistent memory, a visual dashboard, and the ability to take action on your file system across sessions.

What You'll Build

You open your browser to localhost:3000 and see a dark, mission-control-style dashboard. You type a question in the Intelligence panel and Claude responds in real-time, already knowing what you worked on last time because every conversation auto-saves to your Obsidian vault.

By the end of this project, you'll have:

  • A Next.js dashboard scaffolded entirely by Claude Code from a single prompt, with a dark mission-control theme and multiple live panels.
  • An Intelligence panel that streams real Claude responses via a CLI bridge, with full access to your file system and project context.
  • A persistent memory system using an Obsidian vault that auto-logs every interaction and loads context on every new session.
  • Secret Mission: Add a one-click Skill button that triggers a predefined Claude workflow from the dashboard.

Are there any prerequisites?

You need a Claude Pro, Max, Team, or Enterprise subscription to access Claude Code. You also need macOS 13.0 or later and a copy of Obsidian installed (free).

Before We Start

Before we dive in, let's lock in what you're about to build and why it matters. This is your moment to commit to the goal before any hands-on work begins.

Install Your Tools

Your Agent OS needs two core tools before you can build anything. Claude Code is the CLI that gives Claude the ability to read files, write files, and run commands directly on your machine.

Node.js powers the dashboard that Claude will scaffold for you later. In this step, you'll install both tools and authenticate Claude Code so it can access your Anthropic account.

In this step, get ready to:
  • Install Claude Code CLI using the native installer.
  • Install and verify Node.js 22.
  • Authenticate Claude Code with your Anthropic account.
Install Claude Code

Claude Code is a CLI tool from Anthropic that lets Claude interact with your file system and terminal. The native installer handles everything for you, including adding the binary to your PATH.

  • Install Claude Code by running this command in your terminal:
curl -fsSL https://claude.ai/install.sh | bash

What does this command do?

This downloads and runs Anthropic's official installer script. It places the claude binary in ~/.local/bin/ and adds it to your shell configuration so you can run it from anywhere.

  • Open a new terminal tab by pressing Cmd+T so your PATH updates take effect.
  • Verify the installation by running:
claude --version

Check what you see in the terminal output.

✔️ I see a version number

Claude Code is installed and ready. Move on to the next substep.

ⓧ Command not found

Your shell has not picked up the new PATH entry yet.

  • Close all terminal windows completely (not just tabs).
  • Open a fresh terminal window.
  • Run claude --version again.

If it still fails, run claude doctor to diagnose the issue. Confirm you are on macOS 13.0 (Ventura) or later.

Install Node.js 22

Node.js is the JavaScript runtime that runs the Next.js dashboard Claude will build for you. This project requires version 22 or higher.

  • Check whether Node.js is already installed by running:
node --version

Check your terminal output against the tabs below.

✔️ I see v22 or higher

Your Node.js version is compatible. Move on to the authentication substep below.

ⓧ I see an older version

You have Node.js installed, but the version is too low for this project. You need to upgrade to version 22 or higher.

If you use Homebrew, upgrade by running:

brew install node@22
  • After the install finishes, close and reopen your terminal tab.
  • Run node --version again to confirm it shows v22 or higher.

If you do not use Homebrew, download the macOS installer from nodejs.org/en/download/archive/v22 and run the .pkg file. It will replace your existing version.

ⓧ Command not found

Node.js is not installed on your machine yet.

If you have Homebrew, install Node.js 22 by running:

brew install node@22
  • After the install finishes, close and reopen your terminal tab.
  • Run node --version to confirm it shows v22 or higher.

If you do not use Homebrew, download the macOS installer from nodejs.org/en/download/archive/v22 and run the .pkg file. Follow the on-screen prompts, then reopen your terminal and verify with node --version.

Authenticate Claude Code

Claude Code needs to connect to your Anthropic account so it can send prompts and receive responses. The first time you run it, it opens your browser for a one-time OAuth login.

  • Start Claude Code by running:
claude

What will happen next?

Claude Code will open your default browser and ask you to sign in with your Anthropic account. You need a Pro, Max, Team, or Enterprise plan for Claude Code access.

After you approve the connection in the browser, switch back to your terminal. You will see the Claude Code prompt ready for input.

  • Complete the sign-in flow in your browser when it opens.
  • Switch back to your terminal and confirm you see the Claude Code prompt (a cursor waiting for your input).
  • Type /exit and press Enter to leave the session for now.

Browser didn't open?

If your browser did not launch automatically, look for a URL printed in the terminal output. Copy and paste it into your browser manually.

Make sure you are signing in with the same account that has a Claude Pro, Max, Team, or Enterprise subscription. The free plan does not include Claude Code access.

Help me troubleshoot Claude Code authentication.

Before you move on, predict: if you run claude --version and node --version back to back right now, what do you expect to see?

  • Confirm both tools are working by running:
claude --version && node --version

You should see a Claude Code version number on the first line and v22.x.x (or higher) on the second line.

One of the commands failed?

If claude --version fails, open a completely new terminal window (not just a new tab) and try again. The installer adds the PATH entry to ~/.zshrc, which only loads in new shell sessions.

If node --version shows a version below 22, your shell may be resolving an older installation. Run which node to check which binary is being used, and revisit the Node.js install tabs above.

Help me fix my Claude Code or Node.js installation.

Your tools are locked and loaded. Next up, you'll create the Obsidian vault that becomes Claude's long-term memory and write the CLAUDE.md file that tells Claude what it is.

Create Your Obsidian Memory Vault

In the last step, you installed Claude Code and Node.js. You have all the tools you need. Now it is time to give Claude something it does not have out of the box: memory.

Claude Code has no built-in way to remember what happened between sessions. Every time you start a new conversation, it starts from zero. In this step, you will create an Obsidian vault that acts as Claude's long-term memory, and a CLAUDE.md file that acts as its operating manual.

In this step, get ready to:
  • Create your project folder and vault directory structure.
  • Write the CLAUDE.md operating manual that gives Claude persistent context.
  • Open the vault in Obsidian and verify Claude reads its instructions on startup.
Create the project folder and vault structure

Your Agent OS needs a home on disk. The vault follows a four-folder structure: raw notes, structured knowledge, output deliverables, and conversation logs.

  • Create the project folder and all vault subdirectories by running these commands:
mkdir -p ~/agent-os/vault/raw ~/agent-os/vault/wiki ~/agent-os/vault/output ~/agent-os/vault/chats
cd ~/agent-os

What do these folders do?

  • vault/raw/ holds unstructured notes, research dumps, and transcripts.
  • vault/wiki/ holds structured knowledge that Claude maintains and updates over time.
  • vault/output/ holds results, reports, and deliverables Claude produces.
  • vault/chats/ holds auto-logged conversation history as daily markdown files.
  • Confirm the vault folders exist by running:
ls vault/

You should see chats, output, raw, and wiki listed in the output.

Not seeing all four folders?

Make sure you ran the mkdir -p command exactly as shown. The -p flag creates all intermediate directories at once. If you see fewer than four folders, re-run the full mkdir command.

Help me troubleshoot my vault folder structure

Ready to quiz yourself?

Write your CLAUDE.md file

This is the single most important file in your Agent OS. CLAUDE.md tells Claude what it is, how the vault works, and what conventions to follow. Claude Code automatically reads this file at the start of every session.

Why Markdown?

Markdown (.md) is plain text with lightweight formatting. Claude can read and write it directly without any special parsing or libraries.

It also renders beautifully in Obsidian. Headings, bullet lists, and links all display as rich formatted content. Even outside Obsidian, .md files are perfectly readable in a terminal or code editor. That makes Markdown the ideal bridge between human-friendly notes and machine-friendly instructions.

  • Make sure you are in your ~/agent-os folder (you should already be there from the previous command).
  • Create the CLAUDE.md file by running this command:
cat > CLAUDE.md << 'EOF'
# Agent OS - Operating Context

## Purpose
You are the Intelligence core of a personal Agent OS. You manage workflows, maintain memory, and execute tasks for the operator. You have full access to the file system and should use it actively.

## Vault Structure
The Obsidian vault lives at ./vault/ with this layout:
- vault/raw/ - Unstructured notes, research dumps, transcripts
- vault/wiki/ - Structured knowledge you maintain and update
- vault/output/ - Results, reports, and deliverables
- vault/chats/ - Auto-logged conversation history (daily files)

## Session Rules
1. At the start of every session, read the 3 most recent files in vault/chats/ to recall recent context.
2. When asked to remember something, write it to vault/wiki/ in a relevant markdown file.
3. After completing a task that produces output, save results to vault/output/ with a descriptive filename.
4. Always reference vault content when answering questions about past work.

## Conventions
- Date format: YYYY-MM-DD
- Chat log format: ## HH:MM heading, then user message, then your response
- File names: lowercase-with-hyphens.md
- Be concise and action-oriented. You are an operating system, not a chatbot.
EOF

What does this file do?

Each section gives Claude a different layer of persistent context:

  • Purpose defines Claude's identity and permission level. It knows it can actively use the file system.
  • Vault Structure maps the folder layout so Claude knows where to read from and write to.
  • Session Rules set the behaviors Claude follows automatically, like reading recent chats for context.
  • Conventions enforce consistent formatting across all files Claude creates.
  • Verify the file was created correctly by running:
head -5 CLAUDE.md

You should see the first five lines of the file, starting with # Agent OS - Operating Context.

Seeing an empty file or command error?

If head -5 CLAUDE.md shows nothing, the heredoc command may not have completed. Make sure you pasted the entire block including the final EOF on its own line. Try running the full cat > CLAUDE.md << 'EOF' command again.

Help me fix my CLAUDE.md file

✔️ Awesome, I've got everything!

Great. Make sure you have saved the file and you are still in the ~/agent-os directory.

ⓧ I'd like to double check the full code

Here is the complete CLAUDE.md file. Confirm your version matches exactly:

# Agent OS - Operating Context

## Purpose
You are the Intelligence core of a personal Agent OS. You manage workflows, maintain memory, and execute tasks for the operator. You have full access to the file system and should use it actively.

## Vault Structure
The Obsidian vault lives at ./vault/ with this layout:
- vault/raw/ - Unstructured notes, research dumps, transcripts
- vault/wiki/ - Structured knowledge you maintain and update
- vault/output/ - Results, reports, and deliverables
- vault/chats/ - Auto-logged conversation history (daily files)

## Session Rules
1. At the start of every session, read the 3 most recent files in vault/chats/ to recall recent context.
2. When asked to remember something, write it to vault/wiki/ in a relevant markdown file.
3. After completing a task that produces output, save results to vault/output/ with a descriptive filename.
4. Always reference vault content when answering questions about past work.

## Conventions
- Date format: YYYY-MM-DD
- Chat log format: ## HH:MM heading, then user message, then your response
- File names: lowercase-with-hyphens.md
- Be concise and action-oriented. You are an operating system, not a chatbot.
Open the vault folder in Obsidian

Now you will point Obsidian at your vault folder so you have a visual interface for browsing Claude's memory.

  • Press Cmd+Space to open Spotlight.
  • Type Obsidian and press Enter to open it.
  • To the right of Open folder as vault, click Open.
  • In the file browser, navigate to your home folder, then select the agent-os folder, then select the vault folder inside it.
  • Click Open.

What if I already have a vault open?

If Obsidian opens directly into an existing vault instead of showing the setup screen, click the vault name at the bottom-left of the sidebar. Select Manage Vaults... from the menu. Then click Open next to Open folder as vault and follow the same steps above.

You should see raw, wiki, output, and chats listed as folders in the Obsidian left sidebar.

Obsidian hangs or shows a spinning wheel?

This is a known macOS permissions issue. Go to System Settings, search for Full Disk Access, and add Obsidian to the list. Then relaunch Obsidian and try again.

Help me get Obsidian to open my vault folder

Verify Claude reads your CLAUDE.md on startup

The real test is whether Claude Code picks up your operating manual automatically. When you start a session inside the ~/agent-os directory, Claude reads CLAUDE.md and loads it into its working context.

  • Return to your terminal.
  • Start a Claude Code session in your project folder by running:
cd ~/agent-os && claude

Before you type anything, think about this: if Claude has read your CLAUDE.md, what kind of answer would it give when asked about its purpose? Would it respond like a generic chatbot, or like an Agent OS?

  • Type the following message into the Claude Code prompt and press Enter:
What is your purpose?

Claude should respond using context from your CLAUDE.md file. It will reference being an Agent OS, managing workflows, maintaining memory, or your vault structure. If it gives a generic response about being an AI assistant, it has not read the file.

  • Once you have confirmed Claude references your CLAUDE.md context, type /exit to leave the session.

Claude gave a generic response?

Make sure you started the claude session from inside the ~/agent-os directory. Claude Code only reads CLAUDE.md from the current working directory. Run pwd to confirm you are in the right place, then try claude again.

Help me get Claude to read my CLAUDE.md file

Your Agent OS now has persistent memory and a clear operating manual. Next up, you will give it a face: a dark mission-control dashboard that Claude will build entirely from a single prompt.

Scaffold the Dashboard

Your vault and CLAUDE.md are ready, but the only way to interact with your Agent OS is through the terminal. A visual dashboard gives you a mission-control interface where you can chat, browse memory, and monitor everything from one screen.

In this step, Claude Code will build the entire Next.js dashboard from a single prompt. You describe what you want, and Claude scaffolds the project, installs dependencies, and creates every component for you.

In this step, get ready to:
  • Give Claude Code a scaffolding prompt that describes the dashboard layout.
  • Let Claude build a full Next.js app with Tailwind CSS in a dashboard/ subfolder.
  • Start the dev server and see the dashboard at localhost:3000.
Return to your Claude Code session

You should still have Claude Code running in your ~/agent-os folder from the previous step.

  • Switch back to the terminal window where Claude Code is running.
  • Confirm you see the Claude Code prompt (the > cursor waiting for input).

Don't see the Claude Code prompt?

If you closed the session, reopen it by running:

cd ~/agent-os && claude

Claude Code automatically reads your CLAUDE.md when it starts in this folder.

Help me get Claude Code running in my ~/agent-os folder

Give Claude the scaffolding prompt

This single prompt tells Claude everything it needs to build your dashboard. Claude will plan the project structure, create files, and install packages.

  • Paste the following prompt into your Claude Code session and press Enter:
Create a Next.js dashboard app with Tailwind CSS in a dashboard/ subfolder. Requirements:
- Dark-themed mission-control layout with a near-black background
- Three panels arranged side by side:
  1. Intelligence: a chat interface with a text input box at the bottom and a message display area above it (use placeholder/mock responses for now)
  2. Memory: displays a list of recent vault notes with titles and preview text (use placeholder data for now)
  3. System: shows OS status info and current session details (use placeholder data for now)
- Host on port 3000
- Clean, minimal design with subtle borders between panels
- Install all dependencies and make it ready to run with npm run dev

What happens when you send this prompt?

Claude Code will plan the project, then start creating files and running commands. It will ask for your permission before each action that modifies your file system (creating folders, writing files, running npm install).

When you see a permission prompt, review what Claude wants to do and approve it. This typically takes 1-3 minutes depending on your connection speed.

  • Approve each permission request as Claude creates files and installs dependencies.
  • Wait until Claude reports that the project is ready to run.

Speed up permissions

If you want Claude to proceed without asking for each file write, press Shift+Tab to cycle to the acceptEdits permission mode. This lets Claude write files without pausing for approval on each one.

  • Confirm Claude has finished by checking that it reports a completed project structure with files like package.json, page components, and a tailwind.config file.

Claude seems stuck or errored out?

If Claude hits an error during scaffolding, tell it what went wrong. Paste the error message back into the session and ask it to fix the issue. Claude Code can read its own output and self-correct.

If the session seems frozen, press Ctrl+C to interrupt, then retype your prompt or ask Claude to continue where it left off.

Help me fix a Claude Code scaffolding error

Start the dev server and verify the dashboard

Claude has built the project, but you need to start the development server to see it in your browser. Since Claude Code is using your current terminal, you need a second terminal window.

  • Open a new terminal tab by pressing Cmd+T in Terminal.
  • Navigate to the dashboard folder and start the dev server by running:
cd ~/agent-os/dashboard && npm run dev

What does this command do?

This moves into the dashboard/ folder that Claude just created, then starts the Next.js development server. The server will keep running in this terminal tab, watching for file changes and serving your dashboard.

You should see output indicating the server is ready, with a URL pointing to http://localhost:3000.

  • Before you open the URL, predict what you will see. Will it be a blank page, an error, or the three-panel dashboard Claude just built?
  • Open your browser and navigate to http://localhost:3000.

You should see a dark, mission-control-style dashboard with three distinct panels: Intelligence (with a chat input box), Memory (with placeholder note titles), and System (with placeholder status info).

Don't see the dashboard?

  • If you see a "command not found" error for npm, make sure Node.js is installed. Run node --version to check.
  • If the page is blank or shows a Next.js error, check the terminal tab running the dev server for error messages. Switch back to your Claude Code session and paste the error to ask Claude to fix it.
  • If port 3000 is already in use, the terminal will show an error. Stop whatever is using it, or ask Claude Code to reconfigure the dashboard for a different port.

Help me troubleshoot my Next.js dashboard

Your dashboard is live. Next up, you will wire the Intelligence panel to the real Claude so it responds with actual answers instead of placeholder text.

Wire the Intelligence Panel to Claude

Your dashboard is live at localhost:3000 with a slick mission-control layout. But the Intelligence panel is a fraud. It shows placeholder responses that have nothing to do with Claude.

In this step, you'll instruct Claude Code to build a CLI bridge. This is a backend API route that spawns the real claude command as a subprocess, points it at your ~/agent-os directory so it reads your CLAUDE.md, and streams the real response back to the browser.

In this step, get ready to:
  • Build a backend API route that spawns a claude subprocess and streams responses.
  • Connect the Intelligence panel frontend to the new API route.
  • Test the live connection with a context-aware question.
Tell Claude Code to build the CLI bridge

The CLI bridge pattern works by spawning the claude binary as a child process from your dashboard's backend. Because the subprocess runs in your ~/agent-os directory, it automatically loads your CLAUDE.md and has full file system access.

  • Switch back to your Claude Code session in terminal (the one running in ~/agent-os).
  • Type the following prompt to instruct Claude Code to build the API route:
Add an API route to the dashboard app that acts as a CLI bridge to Claude. The route should:
1. Accept POST requests with a JSON body containing a "message" field
2. Spawn a `claude` subprocess with the working directory set to ~/agent-os (so it reads CLAUDE.md)
3. Pass the user's message as input via stdin using the --print flag for non-interactive mode
4. Stream the response back to the frontend using a streaming Response
5. Handle errors gracefully and return appropriate status codes

What is the CLI bridge pattern?

Instead of calling an API endpoint directly, the CLI bridge spawns the claude binary as a child process. This means your dashboard gets the same Claude experience you get in terminal: full file system access, CLAUDE.md context, and tool use.

The subprocess is pointed at ~/agent-os as its working directory. Claude reads your CLAUDE.md automatically at session start, which is why it knows about your vault structure and conventions.

Claude Code will create the API route file and show you what it built. Watch for confirmation that it created a route file inside your dashboard/ app directory.

Claude Code asking for permission?

Claude Code may ask for permission to create or modify files. Type y to allow it. If Claude seems confused about the project structure, remind it the dashboard lives in ~/agent-os/dashboard/ and is a Next.js app.

Help me get Claude Code to build my API route correctly.

Connect the Intelligence panel to the bridge

The backend route exists now, but the Intelligence panel's frontend still shows mock data. You need Claude Code to update the panel so it POSTs real messages to your new API route and renders the streamed response.

  • In the same Claude Code session, type this prompt to wire up the frontend:
Now connect the Intelligence panel frontend to the API route you just created. The panel should:
1. POST the user's message to the API route when they press send or hit Enter
2. Show a loading/thinking indicator while waiting for the response
3. Stream the response text into the chat area chunk by chunk as it arrives
4. Display the conversation history (user messages and Claude responses) in the panel
5. Clear the input field after sending
6. Handle errors by showing a message in the chat area

Why stream instead of waiting for the full response?

Claude's responses can take several seconds. Streaming shows each word as it arrives, so the learner gets immediate feedback that the bridge is working. Without streaming, you'd stare at a loading spinner for 5-10 seconds wondering if something broke.

Claude Code will modify your Intelligence panel component and confirm the changes. Watch for it updating the component file to include fetch logic and response rendering.

Test the live connection

Both pieces are in place: the backend API route and the frontend wiring. Time to see if they talk to each other.

  • Switch to the terminal tab running your dev server and press Ctrl+C to stop it.
  • Restart the dev server by running:
npm run dev
  • Open http://localhost:3000 in your browser.

Before you type anything, think about this: if the CLI bridge is pointed at ~/agent-os and Claude reads your CLAUDE.md automatically, what should it know about your vault structure?

  • In the Intelligence panel's input box, type: What folders are in my vault?
  • Press send (or hit Enter).

You should see the response stream in character by character. Claude should reference your vault structure from CLAUDE.md: raw/, wiki/, output/, and chats/. If it mentions these folders, the bridge is working and pointed at the right directory.

Not getting a response?

Check your terminal for error output. Common issues:

  • The claude binary is not in PATH. Open a new terminal and run claude --version to confirm it's accessible.
  • The working directory in the API route is wrong. Ask Claude Code to verify the subprocess uses ~/agent-os (the folder containing CLAUDE.md) as its cwd.
  • Authentication expired. Run claude in a terminal to confirm you can still reach Claude interactively.

Help me debug why my Intelligence panel isn't getting Claude responses.

💡 Getting mock responses instead of real ones?

If the panel still shows placeholder text, the frontend is not hitting your new API route. Return to your Claude Code session and ask it to verify that the Intelligence panel component is fetching from the correct route path. Also confirm it removed the old mock response logic.

Your Intelligence panel is now powered by the real Claude with full access to your file system and project context. Next up, you'll make every conversation persist by auto-logging to your Obsidian vault and wiring the Memory panel to display your accumulated knowledge.

Connect Auto-Logging and the Memory Panel

Your Intelligence panel streams real Claude responses with full file system access. That is a working AI interface.

The problem is that those conversations vanish the moment you close the browser. This step closes that gap by wiring persistent memory into your Obsidian vault and connecting the Memory panel to display it.

In this step, get ready to:
  • Add auto-logging that saves every conversation to daily markdown files in your vault.
  • Wire the Memory panel to display recent vault notes with search.
  • Test the full persistent memory loop across sessions.
Tell Claude Code to add auto-logging

Every time you chat in the Intelligence panel, the exchange should persist as a timestamped entry in your vault. Claude Code will modify the dashboard's API route to append each conversation to a daily markdown file.

  • Return to your Claude Code session, or start a new one by running:
cd ~/agent-os && claude
  • Give Claude Code this prompt to add the auto-logging feature:
Add auto-logging to the Intelligence panel's API route. Every message exchange
(user prompt + Claude response) should append to a daily markdown file in
vault/chats/ with a timestamp. Use the format: a ## HH:MM heading followed by
the user message and then your response. The filename should be YYYY-MM-DD.md
based on the current date. Create the file if it doesn't exist yet.

What does this achieve?

Your CLAUDE.md already tells Claude to log conversations in ## HH:MM format. This prompt makes the dashboard enforce that convention automatically.

The daily file naming (YYYY-MM-DD.md) means each day gets one file with all conversations appended. Obsidian picks up new files instantly, so your vault stays in sync without any manual work.

  • Wait for Claude Code to finish modifying the API route and any related files.
  • Restart the dev server to pick up the backend changes. Stop it with Ctrl+C in the terminal running the server, then run:
cd ~/agent-os/dashboard && npm run dev
  • Open http://localhost:3000 in your browser and type a test message in the Intelligence panel, such as "What folders are in my vault?"
  • After Claude responds, check that a daily log file was created by running this in a new terminal tab:
ls ~/agent-os/vault/chats/

You should see a file named with today's date (for example, 2026-07-25.md).

No file appeared in vault/chats/?

  • Make sure you restarted the dev server after Claude Code made changes. Backend API route updates require a server restart.
  • Confirm Claude Code pointed the logging path at ~/agent-os/vault/chats/. If the path is relative, it needs to resolve from the project root.
  • Check your terminal for errors. If you see a permissions error, ensure the vault/chats/ folder exists (it should from Step 2).

My auto-logging isn't creating files in vault/chats. The API route should append conversation logs but nothing appears. How do I debug this?

Tell Claude Code to wire the Memory panel

Auto-logging is working, but the Memory panel on your dashboard still shows placeholder content. You need it to read your vault's chat history and display it live.

  • In your Claude Code session, give it this prompt to connect the Memory panel:
Wire the Memory panel on the dashboard to read from vault/chats/. It should
fetch the 10 most recent files, display their titles (the date) and first few
lines as a preview. Add a search box at the top of the Memory panel that
filters notes by content. The panel should refresh its data when the page loads.

Why only the 10 most recent files?

Loading every file in the vault would slow the panel down as your logs grow. Ten recent files gives you enough context to see recent activity without a performance hit.

The search box lets you dig into older history when you need it.

  • Wait for Claude Code to finish building the Memory panel feature.
  • Restart the dev server again with Ctrl+C and:
cd ~/agent-os/dashboard && npm run dev
  • Open http://localhost:3000 and look at the Memory panel. You should see your earlier test conversation listed with today's date as the title.

Memory panel still showing placeholders?

  • Confirm the dev server restarted cleanly. Check the terminal for compilation errors.
  • Make sure the test message you sent earlier actually created a file. Run ls ~/agent-os/vault/chats/ and confirm at least one .md file exists.
  • If the panel shows an error, ask Claude Code to fix it by pasting the error message into your session.

My Memory panel is not showing vault notes. Help me debug the connection between the panel and vault/chats.

Test the full memory loop

Both features are wired. Now you need to confirm the entire loop works end-to-end, including persistence across browser sessions.

  • In the Intelligence panel, send two or three different messages. Try asking Claude something about your vault, then a follow-up question.
  • Switch to Obsidian. Open the chats folder in the sidebar and click today's daily note.

Before you look at the file contents, predict what you expect to see. How many ## HH:MM headings should be in the file?

You should see one ## HH:MM section for each message you sent, including your earlier test. Each section contains your prompt followed by Claude's response.

  • Return to your browser and check the Memory panel. It should display today's daily note with a preview of the conversations.
  • Type a keyword from one of your messages into the Memory panel's search box. Confirm the search filters results to show only matching entries.
  • Close the browser tab completely.
  • Open a new tab and navigate to http://localhost:3000 again.

The Memory panel should still show all your past conversations. Nothing was lost because the data lives in your vault files, not in browser memory.

Conversations missing after reopening the browser?

  • The Memory panel reads from disk on page load. If entries are missing, the issue is either the read path or the log write. Check vault/chats/ in your terminal to confirm the files contain data.
  • If the file exists but the Memory panel is empty, the API route reading the vault might have a path mismatch. Ask Claude Code to verify the read path matches ~/agent-os/vault/chats/.

My conversations aren't persisting across browser sessions. Help me verify the Memory panel reads from vault/chats on page load.

Your Agent OS now has persistent memory. Every conversation accumulates in your Obsidian vault, visible both in the dashboard and in Obsidian itself. Next up, you will take this further with a Secret Mission that adds one-click automation skills to your OS.

Secret mission

Add a One-Click Skill Button

Your Agent OS can chat and remember, but it still waits for you to type every instruction. What if you could trigger an entire predefined workflow with a single click? In this mission, you'll create a Skill system that turns markdown files into one-click automations on your dashboard.

Clean Up Your Resources

Clean Up Your Resources

Decide whether to keep your resources running, pause them to come back later, or delete them entirely. This project runs entirely locally, so there are no ongoing costs when the dev server is not running. Claude Code sessions consume tokens from your existing Claude subscription only while you are actively using them.

Resources you used:

  • ~/agent-os/ directory (vault, dashboard, and skills folders).
  • Next.js dev server on localhost:3000 (only active when you run npm run dev).
  • Claude Code CLI installed at ~/.local/bin/claude.

Keep everything running

No action needed. Choose this if you plan to keep building on your Agent OS.

  • Start the dashboard anytime by running cd ~/agent-os/dashboard && npm run dev.
  • Open a Claude Code session in your project with cd ~/agent-os && claude.
  • Your Obsidian vault continues to accumulate memory across sessions.
  • No ongoing cost when the dev server is stopped. Token usage only occurs during active Claude Code sessions.

Pause - I'll come back to this later

Shut down any running processes to free up system resources. All files persist on disk for when you return.

  • If the dev server is running, press Ctrl+C in the terminal to stop it.
  • If you have a Claude Code session open, type /exit to end it.
  • Everything in ~/agent-os/ stays on disk. Resume anytime.

Delete - I don't want to use this again

Remove all project files and optionally uninstall Claude Code. No cloud resources to clean up.

  • If the dev server is running, press Ctrl+C to stop it first.
  • Delete the entire project folder by running:
rm -rf ~/agent-os
  • To uninstall the Claude Code CLI (native installer), run:
rm -f ~/.local/bin/claude
rm -rf ~/.local/share/claude
  • To also remove Claude Code configuration and session history, run:
rm -rf ~/.claude
rm ~/.claude.json
  • Confirm the project folder is gone by running:
ls ~/agent-os

You should see a "No such file or directory" message confirming the folder has been removed.

That's a Wrap!

That's a Wrap!

Nice work! You just built a fully functional Agent OS on your local machine, complete with a mission-control dashboard, persistent memory, and one-click automation skills.

You've learned how to:

  • Scaffold a full Next.js dashboard using nothing but natural language prompts in Claude Code, and wire a CLI bridge that streams real Claude responses to the browser.
  • Create a persistent memory system using an Obsidian vault with auto-logging that saves every interaction to daily markdown files with timestamps.
  • Write a CLAUDE.md file that gives Claude persistent instructions, session rules, and knowledge of your project structure across every session.
  • (Secret Mission) Added a one-click Skill button that triggers a predefined workflow from the dashboard, proving the automation primitive that makes an Agent OS truly autonomous.

Ready to quiz yourself?