Local Folder Sync
puppyone access, with aliases puppyone openclaw and puppyone oc, synchronizes a local folder with the cloud Content Node tree in both directions. It runs a background daemon that continuously watches for file changes so local and cloud data stay in sync in real time.
Command overview
| Command | Description |
|---|---|
access up [folder] | Start the sync daemon |
access down [folder] | Stop the daemon |
access connect [folder] | Establish the first connection without starting the daemon |
access disconnect [folder] | Stop syncing and disconnect |
access remove [folder] | Same as disconnect |
access ls | List all connections |
access ps | List running daemons |
access status [path] | Show detailed sync status |
access logs [folder] | Show daemon logs |
access trigger [folder] | Force a sync run |
Top-level shortcuts
| Shortcut | Equivalent |
|---|---|
puppyone ps | puppyone access ps |
puppyone status | Project dashboard, when called without arguments |
First-time setup
Quick start
The easiest path is access up, which establishes the connection and starts the daemon in one command:
puppyone access up ~/workspace --key cli_xxxArguments:
| Option | Description |
|---|---|
[folder] | Local folder path to sync. Defaults to the current directory |
--key <key> | Connection access key |
--path <path> | Target path in the cloud |
-y | Skip confirmation prompts |
Step-by-step setup
If you want to connect first and start syncing later, do it in two steps:
# Step 1: create the connection
puppyone access connect ~/workspace --key cli_xxx
# Step 2: start the daemon
puppyone access up ~/workspaceGet the access key
Access keys come from connection management. First create a folder-sync connection in the web UI or CLI, then retrieve the key:
# Create the connection
puppyone conn add folder ~/workspace --name "Dev Sync"
# Get the access key
puppyone conn key <connection-id>Daemon management
Start the daemon
# Start sync for a folder
puppyone access up ~/workspace
# Provide the key on first start
puppyone access up ~/workspace --key cli_xxx
# Skip confirmation
puppyone access up ~/workspace -yStop the daemon
# Stop syncing a folder
puppyone access down ~/workspaceStopping the daemon keeps the connection mapping, so the next access up can resume directly.
Show running daemons
puppyone access ps
# Or the top-level shortcut
puppyone psExample output:
PID Folder Status Synced At
12345 ~/workspace running 2025-01-15 14:30:00
67890 ~/projects/blog running 2025-01-15 14:28:00Inspect status
Connection list
List all established sync connections:
puppyone access lsDetailed sync status
Show detailed sync status for a folder:
puppyone access status ~/workspaceThe output includes the connection ID, sync direction, last sync time, file counts, and queued files waiting to sync.
Logs and debugging
View daemon logs
# Show recent logs
puppyone access logs ~/workspace
# Follow logs live, like tail -f
puppyone access logs ~/workspace -f
# Show a specific number of lines
puppyone access logs ~/workspace -n 50Force sync
If you think a change was missed, manually trigger a full sync:
puppyone access trigger ~/workspaceDisconnect
Stop and disconnect
Stop the daemon and remove the connection mapping:
puppyone access disconnect ~/workspace
# Or
puppyone access remove ~/workspaceAfter disconnecting, local files remain in place, but they no longer stay synced with the cloud.
Local config layout
Workspace config
Each connected folder gets a .puppyone/ directory containing sync configuration for that workspace:
~/workspace/
├── .puppyone/
│ ├── config.json # Connection config, key, remote path, etc.
│ └── state.json # Sync state, last sync time, cursors, etc.
├── docs/
├── config/
└── ...Global registry
All sync connections are also registered in a global file:
~/.puppyone/registry.jsonThat file stores the folder-to-connection mapping used by access ls.
Troubleshooting
Daemon will not start
# Check for leftover processes
puppyone access ps
# If any remain, stop them
puppyone access down ~/workspace
# Start again
puppyone access up ~/workspaceIf it still fails, inspect the logs:
puppyone access logs ~/workspace -n 100Common causes:
- Access key expired or is invalid. Regenerate it with
puppyone conn key <id> --regenerate - API URL is unreachable. Check the network or config with
puppyone config show - Port conflict. Make sure no other process is blocking it
Sync appears stuck
If file changes do not reach the cloud for a long time:
# Check current status
puppyone access status ~/workspace
# Force a sync
puppyone access trigger ~/workspace
# Follow logs live
puppyone access logs ~/workspace -fSync conflict
If the same file changes locally and in the cloud at the same time, you may get a conflict. Check conflict state with:
puppyone access status ~/workspaceConflicted files are marked, and you can choose whether to keep the local or cloud version. For more details, see Conflict Resolution.
Practical workflows
Sync a development workspace
Keep a local dev folder synced with the cloud so agents can work directly on your files:
# Create the connection and start sync
puppyone conn add folder ~/projects/my-app --name "My App"
puppyone conn key <id>
puppyone access up ~/projects/my-app --key <key>
# Verify sync health
puppyone access status ~/projects/my-appSync multiple folders
Run multiple sync daemons at the same time:
puppyone access up ~/workspace
puppyone access up ~/projects/blog
puppyone access up ~/docs
# Show all daemons
puppyone psUse in scripts
#!/bin/bash
# Start sync and wait for the first sync to complete
puppyone access up ~/workspace --key cli_xxx -y
# Check status
puppyone access status ~/workspace --json | jq '.status'