OpenClaw is a powerful AI Agent framework. By installing the MoreLogin skill into your OpenClaw workspace, your agent gains the ability to fully manage browser profiles and cloud phones autonomously.
- Node.js v18 or later
- OpenClaw installed and initialized
- MoreLogin desktop app running on the same machine (Local API at
http://localhost:40000)
npm install -g openclaw
openclaw init # Creates ~/.openclaw/workspace/After initialization, the workspace structure looks like this:
~/.openclaw/
├── workspace/
│ ├── skills/ ← Skill plugins live here
│ │ └── morelogin/ ← MoreLogin skill (you will create this)
│ ├── TOOLS.md ← Tool configuration file
│ └── ...
└── config.yaml ← OpenClaw global configClone the official skill repository into the OpenClaw skills directory:
# Clone the skill into the correct location
git clone https://github.com/MoreLoginBrowser/morelogin-local-api-skill.git \
~/.openclaw/workspace/skills/morelogin
# Install dependencies
cd ~/.openclaw/workspace/skills/morelogin
npm installWhere does the skill come from?
The skill source code is hosted on GitHub at MoreLoginBrowser/morelogin-local-api-skill. This repository contains the CLI wrapper and API bindings that OpenClaw uses to interact with MoreLogin.
Add the MoreLogin tool definition to your ~/.openclaw/workspace/TOOLS.md file:
### Morelogin
- Install Path: /Applications/Morelogin.app (macOS) or C:\Program Files\MoreLogin (Windows)
- Default CDP Port: 9222
- Local API: http://localhost:40000Run a quick test to confirm the skill is installed correctly:
openclaw morelogin browser list --page 1 --page-size 5If the MoreLogin app is running, you should see a JSON response with your browser profiles (or an empty list).
To update to the latest version:
cd ~/.openclaw/workspace/skills/morelogin
git pull origin main
npm installCheck for breaking changes in the release notes before upgrading.
The MoreLogin skill exposes CLI commands directly to the OpenClaw environment. The agent invokes these automatically during reasoning, but you can also run them manually for testing.
# List profiles
openclaw morelogin browser list --page 1 --page-size 20
# Start a profile (Returns debugPort for CDP connection)
openclaw morelogin browser start --env-id abc123def
# View running status
openclaw morelogin browser status --env-id abc123def
# Close profile
openclaw morelogin browser close --env-id abc123def# List cloud phones
openclaw morelogin cloudphone list --page 1 --page-size 20
# Start/Stop
openclaw morelogin cloudphone start --id <cloudPhoneId>
openclaw morelogin cloudphone stop --id <cloudPhoneId>
# Get details (Includes ADB connection info)
openclaw morelogin cloudphone info --id <cloudPhoneId>
# Execute cloud phone command via ADB
openclaw morelogin cloudphone exec --id <cloudPhoneId> --command "ls /sdcard"# Proxy
openclaw morelogin proxy list
openclaw morelogin proxy add --payload '{"proxyIp":"1.2.3.4","proxyPort":8000,"proxyType":0}'
# Group
openclaw morelogin group list
openclaw morelogin group create --name "US-Group"Below is a complete example that creates a browser profile, launches it, visits a URL via CDP, and closes the profile — all orchestrated by the OpenClaw agent.
"Create a new MoreLogin browser profile, open google.com, take a screenshot, and close it."
# 1. Create a browser profile
openclaw morelogin browser create --name "demo-profile"
# → Returns: {"envId": "abc123def"}
# 2. Start the profile
openclaw morelogin browser start --env-id abc123def
# → Returns: {"debugPort": "9222", "webdriver": "/path/to/chromedriver"}
# 3. Connect via CDP (agent uses Puppeteer internally)
# The agent connects to ws://127.0.0.1:9222 and runs:
# - page.goto("https://www.google.com")
# - page.screenshot({path: "screenshot.png"})
# 4. Close the profile
openclaw morelogin browser close --env-id abc123defconst { execSync } = require('child_process');
const puppeteer = require('puppeteer-core');
async function main() {
// 1. Create profile
const createResult = JSON.parse(
execSync('openclaw morelogin browser create --name "demo-profile"').toString()
);
const envId = createResult.data.envId;
// 2. Start profile
const startResult = JSON.parse(
execSync(`openclaw morelogin browser start --env-id ${envId}`).toString()
);
const debugPort = startResult.data.debugPort;
// 3. Connect via CDP and automate
const browser = await puppeteer.connect({
browserURL: `http://127.0.0.1:${debugPort}`,
defaultViewport: null
});
const page = (await browser.pages())[0];
await page.goto('https://www.google.com');
await page.screenshot({ path: 'screenshot.png' });
console.log('Screenshot saved.');
// 4. Cleanup
await browser.disconnect();
execSync(`openclaw morelogin browser close --env-id ${envId}`);
console.log('Profile closed.');
}
main().catch(console.error);When you ask the OpenClaw agent to "create a profile and log into example.com", the agent will:
- Call
openclaw morelogin browser create(or API equivalent) to get anenvId. - Call
openclaw morelogin browser startto get thedebugPort. - Use a CDP tool (like Puppeteer/Playwright) to connect to the
debugPortand perform the login steps. - Verify the success via
openclaw morelogin browser status.
| Symptom | Solution |
|---|---|
command not found: openclaw | Ensure OpenClaw is installed globally: npm install -g openclaw |
Error: connect ECONNREFUSED 127.0.0.1:40000 | Start the MoreLogin desktop app before running commands |
| Skill directory missing | Run openclaw init to create the workspace, then clone the skill |
| Stale data after update | Run npm install again in the skill directory after git pull |