Asta uses an OpenClaw-style workspace to store your context, preferences, and custom skills. The workspace is a directory containing markdown files and skill folders.
Workspace Structure
workspace/
βββ USER.md # Your name, location, preferences
βββ AGENTS.md # Workspace conventions
βββ TOOLS.md # Local notes (SSH hosts, device names, etc.)
βββ SOUL.md # Asta's personality and tone
βββ skills/ # Custom skills
β βββ apple-notes/
β β βββ SKILL.md
β βββ notion/
β β βββ SKILL.md
β βββ your-skill/
β βββ SKILL.md
βββ notes/ # Local markdown notes (optional)
Workspace Location
By default, Asta creates workspace/ at the project root (parent of backend/).
To use a custom location:
# In backend/.env
ASTA_WORKSPACE_DIR=/Users/you/asta-workspace
Asta creates the directory automatically if it doesnβt exist.
Core Files
USER.md
Information about you. Asta uses this for context, time/weather, and reminders.
Example:
# USER.md - About You
- **Name:** Alex
- **What to call you:** Alex
- **Location:** San Francisco, CA
- **Timezone:** America/Los_Angeles
## Context
Working on:
- Building Asta documentation
- Learning Rust
Preferences:
- Concise answers
- Prefer code examples over explanations
How Asta uses it:
- Weather queries use your location
- Time queries use your timezone
- Context helps personalize responses
AGENTS.md
Defines workspace conventions. Asta injects this into context at the start of each session.
Example:
# AGENTS.md - Asta Workspace (OpenClaw-style)
This workspace is your home. Asta injects this and the files below into context.
## Every session
- **SOUL.md** β who Asta is (tone, boundaries).
- **USER.md** β who you are (name, preferences, context).
- **TOOLS.md** β your local notes (camera names, SSH hosts, device nicknames).
- **skills/** β each folder with `SKILL.md` is a skill.
## Memory
- Use RAG (Learning skill) for long-term learned knowledge.
- For session continuity, the chat history is in context.
## Safety
- Don't exfiltrate private data.
- Don't run destructive commands without asking.
- When in doubt, ask.
Your local notes and environment specifics. Not for general preferences (use USER.md for that).
Example:
# TOOLS.md - Your Local Notes
## SSH
- home-server β 192.168.1.100, user: admin
- work-vps β ssh://work.example.com, user: deploy
## Devices
- Living Room TV β Samsung Frame 2023
- Kitchen Speaker β HomePod mini
## Notion
- Meeting notes parent page: 1234567890abcdef1234567890abcdef
- Research page: abcdef1234567890abcdef1234567890
How Asta uses it:
- SSH: knows which host to connect to
- Devices: understands your device names
- Notion: knows where to save notes
SOUL.md
Defines Astaβs personality, tone, and boundaries.
Example:
# SOUL.md - Who Asta Is
## Core
- **Be genuinely helpful.** Skip filler; just help.
- **Have opinions.** Prefer things, find stuff amusing.
- **Be resourceful.** Use context, skills, and tools before asking.
- **Earn trust.** Careful with external actions; bold with reading.
## Boundaries
- Private stays private.
- When in doubt, ask before acting externally.
- Concise when needed, thorough when it matters.
## Vibe
The assistant you'd actually want to talk to. Not corporate. Not sycophant. Just good.
How Asta uses it:
- Injected into every context build
- Shapes tone and decision-making
- Defines safety boundaries
Custom Skills
Custom skills live in workspace/skills/<skill-name>/SKILL.md.
Creating a Skill
Create Skill Directory
mkdir -p workspace/skills/my-skill
Create SKILL.md
cd workspace/skills/my-skill
touch SKILL.md
Define Skill
Add frontmatter and instructions:YAML Frontmatter:---
name: my-skill
description: Use when the user asks about X or Y
metadata:
openclaw:
emoji: "π§"
os: ["darwin", "linux"] # Optional: darwin, linux, windows
requires: { bins: ["my-tool"] } # Optional: required binaries
install:
- id: brew
kind: brew
formula: my-tool
bins: ["my-tool"]
label: Install my-tool via Homebrew
---
Skill Instructions:# My Skill
Instructions for how to use this skill.
## Usage
When the user asks for X, do Y.
Example Commands: Enable in Asta
- Restart Asta backend
- Go to Settings β Skills
- Your skill appears in the list
- Toggle it on
Skill with Required Binaries
If your skill needs a CLI tool:
---
name: things-mac
description: Mac only. Manage Things 3 todos via things CLI
metadata:
openclaw:
emoji: "β
"
os: ["darwin"]
requires: { bins: ["things"] }
install:
- id: brew
kind: brew
formula: thingsapi/things/things
bins: ["things"]
label: Install things CLI via Homebrew
---
# Things (Mac)
Manage Things 3 todos via the `things` CLI.
## Add a todo
```bash
things add "Buy milk" --list Inbox
List todos
**What happens:**
- Asta checks if `things` is in `$PATH`
- Checks if `things` is in exec allowlist
- If both true, skill is marked **Available**
- If not, skill shows "Install & enable exec" hint
### Skill Discovery
Asta automatically discovers skills in `workspace/skills/*/SKILL.md` at runtime. No restart needed for enabling/disabling via UI, but new skills require a backend restart to be detected.
## Workspace Configuration in Code
The workspace path is resolved in `backend/app/config.py`:
```python
@property
def workspace_path(self) -> Path | None:
"""Resolved OpenClaw-style workspace directory."""
if (s := (self.asta_workspace_dir or "").strip()):
p = Path(s).resolve()
if p.is_dir():
return p
p.mkdir(parents=True, exist_ok=True)
return p
# Default: project root / workspace
backend_dir = Path(__file__).resolve().parent.parent
default = backend_dir.parent / "workspace"
default.mkdir(parents=True, exist_ok=True)
return default
Skill discovery is in backend/app/workspace.py (referenced in backend/app/routers/settings.py:901).
Using Workspace Context
Asta injects workspace files into context automatically:
- At session start,
SOUL.md, USER.md, AGENTS.md, TOOLS.md are loaded
- When a task matches a skill description, that
SKILL.md is loaded
- Workspace files are always available for context
Example:
You: Whatβs the weather?
Asta: (reads USER.md β sees location βSan Franciscoβ β calls weather API)
You: Add βBuy milkβ to Things
Asta: (matches things-mac skill β loads SKILL.md β runs things add "Buy milk")
Notes Storage
You can store local notes in workspace/notes/ or workspace/memos/. Asta can:
- List notes
- Read note contents
- Create new notes
For multi-device access, use Notion or Apple Notes instead (configured in TOOLS.md).
Backup and Sync
Your workspace contains your personal context. Consider:
- Git: Commit
workspace/ to a private repo (exclude sensitive keys)
- Cloud sync: Use Dropbox, iCloud, or Syncthing
- Backup: Regular backups to external drive
Never commit API keys or secrets in workspace files. Use backend/.env or Settings UI for credentials.
Example Workspace
A complete example workspace:
workspace/
βββ USER.md # "Name: Alex, Location: SF"
βββ AGENTS.md # Workspace conventions
βββ TOOLS.md # "SSH: home-server β 192.168.1.100"
βββ SOUL.md # "Be concise, have opinions"
βββ skills/
β βββ apple-notes/
β β βββ SKILL.md # Apple Notes via osascript
β βββ notion/
β β βββ SKILL.md # Notion API integration
β βββ things-mac/
β βββ SKILL.md # Things 3 CLI
βββ notes/
βββ projects.md
βββ ideas.md
Troubleshooting
Skill not appearing?
- Check
workspace/skills/<skill-name>/SKILL.md exists
- Restart backend
- Check logs for skill discovery errors
Skill shows βNot availableβ?
- Check required binary is installed:
which <binary>
- Check exec allowlist:
ASTA_EXEC_ALLOWED_BINS in .env
- Check OS requirement matches your system
Workspace not loading?
- Check
ASTA_WORKSPACE_DIR path is correct
- Check directory exists and is readable
- Check file encoding is UTF-8