{
  "schemaVersion": "1.0",
  "item": {
    "slug": "multi-user-workspace",
    "name": "Multi User Workspace",
    "source": "tencent",
    "type": "skill",
    "category": "效率提升",
    "sourceUrl": "https://clawhub.ai/shun-dong/multi-user-workspace",
    "canonicalUrl": "https://clawhub.ai/shun-dong/multi-user-workspace",
    "targetPlatform": "OpenClaw"
  },
  "install": {
    "downloadMode": "redirect",
    "downloadUrl": "/downloads/multi-user-workspace",
    "sourceDownloadUrl": "https://wry-manatee-359.convex.site/api/v1/download?slug=multi-user-workspace",
    "sourcePlatform": "tencent",
    "targetPlatform": "OpenClaw",
    "installMethod": "Manual import",
    "extraction": "Extract archive",
    "prerequisites": [
      "OpenClaw"
    ],
    "packageFormat": "ZIP package",
    "includedAssets": [
      "SKILL.md"
    ],
    "primaryDoc": "SKILL.md",
    "quickSetup": [
      "Download the package from Yavira.",
      "Extract the archive and review SKILL.md first.",
      "Import or place the package into your OpenClaw setup."
    ],
    "agentAssist": {
      "summary": "Hand the extracted package to your coding agent with a concrete install brief instead of figuring it out manually.",
      "steps": [
        "Download the package from Yavira.",
        "Extract it into a folder your agent can access.",
        "Paste one of the prompts below and point your agent at the extracted folder."
      ],
      "prompts": [
        {
          "label": "New install",
          "body": "I downloaded a skill package from Yavira. Read SKILL.md from the extracted folder and install it by following the included instructions. Tell me what you changed and call out any manual steps you could not complete."
        },
        {
          "label": "Upgrade existing",
          "body": "I downloaded an updated skill package from Yavira. Read SKILL.md from the extracted folder, compare it with my current installation, and upgrade it while preserving any custom configuration unless the package docs explicitly say otherwise. Summarize what changed and any follow-up checks I should run."
        }
      ]
    },
    "sourceHealth": {
      "source": "tencent",
      "status": "healthy",
      "reason": "direct_download_ok",
      "recommendedAction": "download",
      "checkedAt": "2026-04-23T16:43:11.935Z",
      "expiresAt": "2026-04-30T16:43:11.935Z",
      "httpStatus": 200,
      "finalUrl": "https://wry-manatee-359.convex.site/api/v1/download?slug=4claw-imageboard",
      "contentType": "application/zip",
      "probeMethod": "head",
      "details": {
        "probeUrl": "https://wry-manatee-359.convex.site/api/v1/download?slug=4claw-imageboard",
        "contentDisposition": "attachment; filename=\"4claw-imageboard-1.0.1.zip\"",
        "redirectLocation": null,
        "bodySnippet": null
      },
      "scope": "source",
      "summary": "Source download looks usable.",
      "detail": "Yavira can redirect you to the upstream package for this source.",
      "primaryActionLabel": "Download for OpenClaw",
      "primaryActionHref": "/downloads/multi-user-workspace"
    },
    "validation": {
      "installChecklist": [
        "Use the Yavira download entry.",
        "Review SKILL.md after the package is downloaded.",
        "Confirm the extracted package contains the expected setup assets."
      ],
      "postInstallChecks": [
        "Confirm the extracted package includes the expected docs or setup files.",
        "Validate the skill or prompts are available in your target agent workspace.",
        "Capture any manual follow-up steps the agent could not complete."
      ]
    },
    "downloadPageUrl": "https://openagent3.xyz/downloads/multi-user-workspace",
    "agentPageUrl": "https://openagent3.xyz/skills/multi-user-workspace/agent",
    "manifestUrl": "https://openagent3.xyz/skills/multi-user-workspace/agent.json",
    "briefUrl": "https://openagent3.xyz/skills/multi-user-workspace/agent.md"
  },
  "agentAssist": {
    "summary": "Hand the extracted package to your coding agent with a concrete install brief instead of figuring it out manually.",
    "steps": [
      "Download the package from Yavira.",
      "Extract it into a folder your agent can access.",
      "Paste one of the prompts below and point your agent at the extracted folder."
    ],
    "prompts": [
      {
        "label": "New install",
        "body": "I downloaded a skill package from Yavira. Read SKILL.md from the extracted folder and install it by following the included instructions. Tell me what you changed and call out any manual steps you could not complete."
      },
      {
        "label": "Upgrade existing",
        "body": "I downloaded an updated skill package from Yavira. Read SKILL.md from the extracted folder, compare it with my current installation, and upgrade it while preserving any custom configuration unless the package docs explicitly say otherwise. Summarize what changed and any follow-up checks I should run."
      }
    ]
  },
  "documentation": {
    "source": "clawhub",
    "primaryDoc": "SKILL.md",
    "sections": [
      {
        "title": "Friends",
        "body": "Configure per-user sessions with sandbox isolation, friend profiles, and relationship awareness."
      },
      {
        "title": "Core Concepts",
        "body": "UserId: Lowercase unique identifier (e.g., alice, bob). Used in session keys, filenames, and cross-references.\nSession: One session per user, named agent:<agentId>:<mainKey> where mainKey typically contains the userId.\nSandbox: Optional Docker isolation per session, configured in openclaw.json.\nFRIENDS/: User profile directory (one file per user, named {userId}.md).\nRELATIONS/: Relationship directory (files named {userId1}-{userId2}.md, alphabetically sorted, can be mutiple users)."
      },
      {
        "title": "Example Workspace Structure",
        "body": "workspace/\n├── USER.md              # User registry with permissions\n├── AGENTS.md            # Multi-user guidance for assistant\n├── FRIENDS/\n│   ├── alice.md        # alice's profile\n│   └── bob.md          # bob's profile\n├── RELATIONS/\n│   └── alice-bob.md    # Relationship between alice and bob\n├── private/            # Admin-only files (optional)\n..."
      },
      {
        "title": "USER.md",
        "body": "Registry of all users. The assistant reads this to identify users and extract userId and Name.\n\nFormat:\n\n# User Registry\n\n## Users\n\n### alice\n- UserId: alice\n- Name: Alice\n- Role: administrator\n\n### bob\n- UserId: bob\n- Name: Bob\n- Role: guest\n\nNote: userId is unique and in lower case. Use Role to determine sandbox configuration in openclaw.json."
      },
      {
        "title": "FRIENDS/",
        "body": "User profiles. One Markdown file per user, named {userId}.md.\n\nContent is flexible. Common sections include:\n\n# Alice\n\n## Info\n- UserId: alice\n- Name: Alice\n- Role: administrator\n- Emails: alice@example.com\n...\n## Assistant Relationship\n- How the user prefers to interact with the assistant\n- Preferred communication style\n- Ongoing projects or interests\n\n## Notes\nFree-form information about the user."
      },
      {
        "title": "RELATIONS/",
        "body": "Interpersonal relationships. Files named {userId1}-{userId2}.md (alphabetical order, can be mutiple users).\n\nContent is flexible. Example:\n\n# Alice & Bob\n\n## Users\n- **alice**: Alice\n- **bob**: Bob\n\n## Relationship\nFriends who collaborate on projects.\n\n## Information Sharing\n- Can mention each other's public projects\n- Do not share private details without asking"
      },
      {
        "title": "AGENTS.md",
        "body": "Instructions for the assistant. Add this section:\n\n## User Identification\n\nWhen a session starts (after `/new`):\n\n1. Get current session via `session_status`\n2. Extract userId from the session key (e.g., `agent:main:alice` → `alice`)\n3. Read `FRIENDS/{userId}.md` for user profile\n4. Read `RELATIONS/*{userId}*.md` for all relationships involving this user\n5. Greet the user by name\n\n## Cross-User Boundaries\n\n- Default: Information does not flow between users\n- Exception: Only when explicitly defined in RELATIONS/"
      },
      {
        "title": "Session Configuration",
        "body": "Each user gets an isolated session with configurable sandbox and tool permissions. Configure via openclaw.json."
      },
      {
        "title": "Administrator Configuration",
        "body": "Full access, no sandbox restrictions:\n\n{\n  agents: {\n    defaults: {\n      workspace: \"~/.openclaw/workspace\",\n    },\n    list: [\n      {\n        id: \"main\",\n        // Administrator: no sandbox, all tools allowed\n        sandbox: { mode: \"off\" },\n      },\n    ],\n  },\n  bindings: [\n    // Route admin sessions to main agent without sandbox\n    { agentId: \"main\", match: { session: { regex: \"alice$\" } } },\n  ],\n}"
      },
      {
        "title": "Guest Configuration",
        "body": "Sandboxed session with isolated workspace. Guest can read/write/execute in their own directory only:\n\n{\n  agents: {\n    defaults: {\n      workspace: \"~/.openclaw/workspace\",\n    },\n    list: [\n      {\n        id: \"main\",\n        // Guest: sandbox enabled, isolated directory\n        sandbox: {\n          mode: \"all\",\n          scope: \"session\",\n          workspaceAccess: \"none\",  // Don't mount main workspace\n          docker: {\n            binds: [\n              // Mount guest's own directory as /workspace\n              \"~/.openclaw/workspace/guests/bob:/workspace:rw\"\n            ]\n          }\n        },\n        tools: {\n          allow: [\"read\", \"write\", \"edit\", \"exec\", \"process\"],\n          deny: [\"browser\", \"canvas\", \"nodes\", \"cron\", \"gateway\"],\n        },\n      },\n    ],\n  },\n  bindings: [\n    // Route guest sessions to sandboxed agent\n    { agentId: \"main\", match: { session: { regex: \"bob$\" } } },\n  ],\n}\n\nDirectory Setup:\n\nmkdir -p ~/.openclaw/workspace/guests/bob\n\nNotes:\n\nGuest sees /workspace as their root (isolated from main workspace)\nCan read/write/execute freely within their directory\nCannot access USER.md, FRIENDS/, RELATIONS/, or other guests' data"
      },
      {
        "title": "Configuration Options",
        "body": "Sandbox:\n\nmode: \"off\" | \"all\" — Disable or enable sandbox\nscope: \"session\" — One container per user session\nworkspaceAccess: \"none\" | \"ro\" | \"rw\" — Workspace file access\n\nTools:\n\nallow: Array of permitted tool names\ndeny: Array of prohibited tool names (overrides allow)\n\nRouting:\n\nbindings[].match.session.regex: Match session key pattern (e.g., alice$ matches sessions ending with \"alice\")"
      }
    ],
    "body": "Friends\n\nConfigure per-user sessions with sandbox isolation, friend profiles, and relationship awareness.\n\nCore Concepts\nUserId: Lowercase unique identifier (e.g., alice, bob). Used in session keys, filenames, and cross-references.\nSession: One session per user, named agent:<agentId>:<mainKey> where mainKey typically contains the userId.\nSandbox: Optional Docker isolation per session, configured in openclaw.json.\nFRIENDS/: User profile directory (one file per user, named {userId}.md).\nRELATIONS/: Relationship directory (files named {userId1}-{userId2}.md, alphabetically sorted, can be mutiple users).\nExample Workspace Structure\nworkspace/\n├── USER.md              # User registry with permissions\n├── AGENTS.md            # Multi-user guidance for assistant\n├── FRIENDS/\n│   ├── alice.md        # alice's profile\n│   └── bob.md          # bob's profile\n├── RELATIONS/\n│   └── alice-bob.md    # Relationship between alice and bob\n├── private/            # Admin-only files (optional)\n...\n\nUSER.md\n\nRegistry of all users. The assistant reads this to identify users and extract userId and Name.\n\nFormat:\n\n# User Registry\n\n## Users\n\n### alice\n- UserId: alice\n- Name: Alice\n- Role: administrator\n\n### bob\n- UserId: bob\n- Name: Bob\n- Role: guest\n\n\nNote: userId is unique and in lower case. Use Role to determine sandbox configuration in openclaw.json.\n\nFRIENDS/\n\nUser profiles. One Markdown file per user, named {userId}.md.\n\nContent is flexible. Common sections include:\n\n# Alice\n\n## Info\n- UserId: alice\n- Name: Alice\n- Role: administrator\n- Emails: alice@example.com\n...\n## Assistant Relationship\n- How the user prefers to interact with the assistant\n- Preferred communication style\n- Ongoing projects or interests\n\n## Notes\nFree-form information about the user.\n\nRELATIONS/\n\nInterpersonal relationships. Files named {userId1}-{userId2}.md (alphabetical order, can be mutiple users).\n\nContent is flexible. Example:\n\n# Alice & Bob\n\n## Users\n- **alice**: Alice\n- **bob**: Bob\n\n## Relationship\nFriends who collaborate on projects.\n\n## Information Sharing\n- Can mention each other's public projects\n- Do not share private details without asking\n\nAGENTS.md\n\nInstructions for the assistant. Add this section:\n\n## User Identification\n\nWhen a session starts (after `/new`):\n\n1. Get current session via `session_status`\n2. Extract userId from the session key (e.g., `agent:main:alice` → `alice`)\n3. Read `FRIENDS/{userId}.md` for user profile\n4. Read `RELATIONS/*{userId}*.md` for all relationships involving this user\n5. Greet the user by name\n\n## Cross-User Boundaries\n\n- Default: Information does not flow between users\n- Exception: Only when explicitly defined in RELATIONS/\n\nSession Configuration\n\nEach user gets an isolated session with configurable sandbox and tool permissions. Configure via openclaw.json.\n\nAdministrator Configuration\n\nFull access, no sandbox restrictions:\n\n{\n  agents: {\n    defaults: {\n      workspace: \"~/.openclaw/workspace\",\n    },\n    list: [\n      {\n        id: \"main\",\n        // Administrator: no sandbox, all tools allowed\n        sandbox: { mode: \"off\" },\n      },\n    ],\n  },\n  bindings: [\n    // Route admin sessions to main agent without sandbox\n    { agentId: \"main\", match: { session: { regex: \"alice$\" } } },\n  ],\n}\n\nGuest Configuration\n\nSandboxed session with isolated workspace. Guest can read/write/execute in their own directory only:\n\n{\n  agents: {\n    defaults: {\n      workspace: \"~/.openclaw/workspace\",\n    },\n    list: [\n      {\n        id: \"main\",\n        // Guest: sandbox enabled, isolated directory\n        sandbox: {\n          mode: \"all\",\n          scope: \"session\",\n          workspaceAccess: \"none\",  // Don't mount main workspace\n          docker: {\n            binds: [\n              // Mount guest's own directory as /workspace\n              \"~/.openclaw/workspace/guests/bob:/workspace:rw\"\n            ]\n          }\n        },\n        tools: {\n          allow: [\"read\", \"write\", \"edit\", \"exec\", \"process\"],\n          deny: [\"browser\", \"canvas\", \"nodes\", \"cron\", \"gateway\"],\n        },\n      },\n    ],\n  },\n  bindings: [\n    // Route guest sessions to sandboxed agent\n    { agentId: \"main\", match: { session: { regex: \"bob$\" } } },\n  ],\n}\n\n\nDirectory Setup:\n\nmkdir -p ~/.openclaw/workspace/guests/bob\n\n\nNotes:\n\nGuest sees /workspace as their root (isolated from main workspace)\nCan read/write/execute freely within their directory\nCannot access USER.md, FRIENDS/, RELATIONS/, or other guests' data\nConfiguration Options\n\nSandbox:\n\nmode: \"off\" | \"all\" — Disable or enable sandbox\nscope: \"session\" — One container per user session\nworkspaceAccess: \"none\" | \"ro\" | \"rw\" — Workspace file access\n\nTools:\n\nallow: Array of permitted tool names\ndeny: Array of prohibited tool names (overrides allow)\n\nRouting:\n\nbindings[].match.session.regex: Match session key pattern (e.g., alice$ matches sessions ending with \"alice\")"
  },
  "trust": {
    "sourceLabel": "tencent",
    "provenanceUrl": "https://clawhub.ai/shun-dong/multi-user-workspace",
    "publisherUrl": "https://clawhub.ai/shun-dong/multi-user-workspace",
    "owner": "shun-dong",
    "version": "1.0.0",
    "license": null,
    "verificationStatus": "Indexed source record"
  },
  "links": {
    "detailUrl": "https://openagent3.xyz/skills/multi-user-workspace",
    "downloadUrl": "https://openagent3.xyz/downloads/multi-user-workspace",
    "agentUrl": "https://openagent3.xyz/skills/multi-user-workspace/agent",
    "manifestUrl": "https://openagent3.xyz/skills/multi-user-workspace/agent.json",
    "briefUrl": "https://openagent3.xyz/skills/multi-user-workspace/agent.md"
  }
}