#Starter help

1 messages ยท Page 1 of 1 (latest)

versed saddle
#

Hi,

Iโ€™m totally new to all of this. I bought a Hostinger VPS and installed OpenClaw from their catalog. Normally I keep trying until I fix things, but this is my 6th attempt (including reinstalling), and I keep running into a new issue every time even though I follow the same steps.

On the first day, I installed everything and it was going okay with a few issues. Then I reinstalled everything thinking Iโ€™d start fresh, but I ran into a Telegram pairing issue. Even after setting it up properly, it wouldnโ€™t fix. It actually worked fine the first time.

Then the second time, I had a Discord setup issue, and that didnโ€™t work either. Usually, I just ask the bot to pair things, set APIs, and approve everything.

Iโ€™ve reinstalled multiple times now, and this time Iโ€™m getting:
โ€œYou are not authorized to use this command.โ€

The weird part is, it was working fine before, and I did the exact same steps again.

The problem is, I rely on the bot to do everything, and I donโ€™t really know where to manually configure things if the bot does something wrong. I also donโ€™t know how to check or fix it myself.

I really need a proper guide for setting this up on Hostinger like:

  • Where to configure Discord and Telegram manually
  • Where to manage permissions and approvals
  • Where to add API keys
  • Where to add OpenRouter models
  • Where to change bot settings or names manually

Basically, I want to understand where everything is, not just rely on the bot. Also, Iโ€™m not sure how to access or use the terminal properly since itโ€™s running through Docker.

At this point, Iโ€™m just a beginner trying to learn and use this for some basic automation. I usually donโ€™t give up easily, but this is getting frustrating because it feels like Iโ€™m doing everything right and still failing.

Sorry for the long post, and Iโ€™d really appreciate any help.

Thank you.

wind notchBOT
sick nimbusBOT
#

To help others find answers, you can mark your question as solved via Right click solution message -> Apps -> โœ… Mark Solution

charred shadowBOT
#

Youโ€™re not doing anything stupid here. Iโ€™m pretty sure this is a state/permissions problem, not you โ€œdoing the steps wrongโ€.

Also, Iโ€™d stop reinstalling for now. Reinstalls often wipe or reshuffle the exact pairing/auth state we need to inspect.

What lives where on Hostinger + Docker

If you installed OpenClaw on a Hostinger VPS, Hostinger runs it in Docker, and you manage the container from Docker Manager in hPanel.

Inside the container, OpenClawโ€™s persistent state lives here:

/home/node/.openclaw/

Important files there:

  • openclaw.json , main config
#

Permissions / command auth

API keys

OpenRouter models

  • model selection lives under:
#

Bot name / settings

  • actual Discord bot name/avatar is changed in the Discord Developer Portal
  • actual Telegram bot name/username is changed in BotFather
  • OpenClaw-side reply prefix is messages.responsePrefix

Why youโ€™re seeing โ€œYou are not authorized to use this command.โ€

That message usually means command authorization is blocking you, not that Discord/Telegram is broken.

Most common causes:

#
  1. commands.allowFrom is set, and your user is not in it.
  2. You are using an owner-only command, but commands.ownerAllowFrom does not include you.
  3. Reinstall/reset wiped pairing or allowlist state.

So if it worked before and broke after reinstall, Iโ€™d suspect missing allowlist/owner config first.

How to access the terminal

If Hostinger gives you a VPS terminal/SSH, do this:

docker ps
docker exec -it <your-openclaw-container> sh

Then inside the container run:

#
openclaw --version
openclaw status --all
openclaw gateway status
openclaw channels status --probe
openclaw config file
openclaw pairing list telegram
openclaw devices list
openclaw approvals get

For logs:

openclaw logs --follow
#

If you donโ€™t know the container name, docker ps will show it.

What I need from you next

Please paste these:

openclaw --version
openclaw status --all
openclaw gateway status
openclaw channels status --probe

And also tell me:

  • the exact command that replies with You are not authorized to use this command.
  • whether youโ€™re using Hostinger OpenClaw VPS or 1-click managed OpenClaw
#
  • if possible, a screenshot or paste of the Docker Manager logs

Once you send that, I can usually tell you exactly which setting is blocking you.

versed saddle
#

Can you help me go through the step-by-step process, one step at a time, until the next one?

charred shadowBOT
#

Yep, we can do that. One step at a time, no rushing.

Step 1

Open your Hostinger VPS terminal (or SSH into the VPS) and run this:

docker ps

Then look at the NAMES column, pick the OpenClaw container name, and run:

docker exec -it <THAT_CONTAINER_NAME> sh
openclaw --version
#

Paste the output here.

If any part of that fails, paste the exact error and Iโ€™ll adjust the next step.
Also, please donโ€™t reinstall again while we debug this.

versed saddle
#

CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
bcb16a5eb2c8 ghcr.io/hostinger/hvps-openclaw:latest "/entrypoint.sh nodeโ€ฆ" 6 hours ago Up 3 hours 0.0.0.0:46022->46022/tcp, [::]:46022->46022/tcp openclaw-urge-openclaw-1
666f785f701e traefik:latest "/entrypoint.sh --apโ€ฆ" 7 hours ago Up 7 hours traefik-vjda-traefik-1
root@srv1584299:~#

charred shadowBOT
#

Nice, that helps. Your OpenClaw container is:

openclaw-urge-openclaw-1

Step 2

Run this next:

docker exec -it openclaw-urge-openclaw-1 sh
openclaw --version

Then paste the version output here.

#

If openclaw --version says command not found, paste that exact error and stop there.

versed saddle
#

OpenClaw 2026.4.12 (1c0672b)

charred shadowBOT
#

Perfect, thanks.

Step 3

Still inside the container, run:

openclaw status --all

Paste the full output here.

If itโ€™s very long, paste the part starting at Gateway and the part showing Channels.

versed saddle
#

Channels
โ”Œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ฌโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”
โ”‚ Channel โ”‚ Enabled โ”‚ State โ”‚ Detail โ”‚
โ”œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ผโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ผโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ผโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ค
โ”‚ Discord โ”‚ ON โ”‚ OK โ”‚ token configร—2 (sha256:5e0f1b56 ยท len 72) ยท accounts 2/2 โ”‚
โ”‚ Telegram โ”‚ ON โ”‚ OK โ”‚ token config (sha256:1a0ab647 ยท len 46) ยท accounts 1/1 โ”‚
โ””โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ดโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ดโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”ดโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€

charred shadowBOT
#

Good news, this already tells us a lot: Discord and Telegram tokens are loaded correctly. So the problem is probably authorization/pairing, not a broken bot token.

Step 4

Run this next:

openclaw config get commands --json

Paste the output here.

Also, if you can, tell me the exact slash command that gives you:

You are not authorized to use this command.

That part will matter a lot.

versed saddle
#

openclaw config get commands --json

{
"native": "auto",
"nativeSkills": "auto",
"text": true,
"bash": true,
"config": true,
"plugins": true,
"restart": true,
"useAccessGroups": false,
"ownerDisplay": "raw"

#

I get this with every comman:

You are not authorized to use this command.

charred shadowBOT
#

Aha, I think we found the problem.

Your commands config has no ownerAllowFrom set.

That means owner-only commands will fail with:

You are not authorized to use this command.

So if you were using things like /config or /plugins, this is very likely the reason.

Step 5

In the Discord chat/thread with OpenClaw, run:

/id
#

(or /whoami if /id doesnโ€™t appear)

Paste the result here.

That should give us your Discord sender ID, then the next step will be adding you to commands.ownerAllowFrom.

#

Got it, thatโ€™s useful. If every command is blocked, then this is not just the owner-only /config problem.

That points more toward Discord command authorization / allowlist / group policy.

Step 6

Back in the container, run this:

openclaw config get channels.discord --json

Paste the output here.

If itโ€™s huge, paste the parts that mention any of these:

  • allowFrom
#
  • groups
  • groupPolicy
  • commands
  • accounts
versed saddle
#

๐Ÿงญ Identity
Channel: discord
User id: 1302991150763999302
Username: @versed saddle
AllowFrom: 1302991150763999302
๐Ÿงญ Identity
Channel: discord
User id: 1302991150763999302
Username: @versed saddle
AllowFrom: 1302991150763999302

charred shadowBOT
#

Perfect. That gives us your Discord user ID, and /id working confirms the bot can see you.

Step 7

Inside the container, run this exact command:

openclaw config set commands.ownerAllowFrom '["discord:1302991150763999302"]' --strict-json

Then paste the output here.

That should make you the authorized owner for owner-only commands like /config and /plugins.

versed saddle
#

openclaw config set commands.ownerAllowFrom '["discord:1302991150763999302"]' --strict-json

๐Ÿฆž OpenClaw 2026.4.12 (1c0672b) โ€” Ah, the fruit tree company! ๐ŸŽ

Config overwrite: /data/.openclaw/openclaw.json (sha256 f0655039e1579b5f31aaf5653202980fe861d7d3ef87ec998efc874392d7d4e7 -> d126e22233d7d628bd0652a878c6fdf619dfa54da1c8ed24ab07ff34d3dc4edc, backup=/data/.openclaw/openclaw.json.bak)
Updated commands.ownerAllowFrom. Restart the gateway to apply.

charred shadowBOT
#

Nice, that worked. Also, this tells us your Hostinger image is storing config at:

/data/.openclaw/openclaw.json

Thatโ€™s useful to know.

Step 8

Restart the OpenClaw container so the new owner setting takes effect.

If you are still inside the container, first leave it:

exit
#

Then on the VPS host run:

docker restart openclaw-urge-openclaw-1

Paste the output here, then weโ€™ll test a command.

versed saddle
#

/data/.openclaw/openclaw.json

sh: 7: /data/.openclaw/openclaw.json: Permission denied

charred shadowBOT
#

Yep, thatโ€™s just because the file path is not a command. You accidentally tried to run the config file itself.

No problem.

Step 8 again

From the VPS host shell, run this exact command:

docker restart openclaw-urge-openclaw-1

Paste the output here.

Do not type /data/.openclaw/openclaw.json by itself. That file is just where the config is stored.

versed saddle
#

I don't know where the section is

charred shadowBOT
#

You donโ€™t need a special section, just the normal VPS terminal prompt where you saw:

root@srv1584299:~#

That is the right place.

Step 8, simplified

At that prompt, type exactly this:

docker restart openclaw-urge-openclaw-1

Then press Enter and paste whatever it prints.

#

If you are still stuck inside the container first, type:

exit

until you get back to the root@srv... prompt, then run the restart command.

versed saddle
#

Can't I just click restart button ?

charred shadowBOT
#

Yes, absolutely. Thatโ€™s the same thing, and honestly easier here.

Step 8, easier version

In Hostinger Docker Manager, click Restart for:

openclaw-urge-openclaw-1

Wait about 20 to 30 seconds for it to come back up, then tell me when thatโ€™s done.

After that, weโ€™ll test whether the authorization error is gone.

versed saddle
#

Still getting: You are not authorized to use this command on my server ID 1495157727146545194

charred shadowBOT
#

Ah, that changes it. Thanks, thatโ€™s actually a really important clue.

If it works here but fails on your own server, then your user is authorized, but your Discord server/guild is probably not allowed in the botโ€™s Discord config.

So now we need to inspect the Discord server access settings.

Step 9

Back in the container, run:

openclaw config get channels.discord --json

Paste the output here.

If itโ€™s long, paste only the parts that mention:

#
  • groups
  • groupPolicy
  • allowFrom
  • accounts
  • requireMention

That should tell us why your server 1495157727146545194 is being blocked.

versed saddle
#

openclaw config get channels.discord --json
openclaw: command not found

charred shadowBOT
#

Yep, that just means youโ€™re back on the VPS host, not inside the OpenClaw container.

No worries, we can do it in one line so itโ€™s easier.

Step 9 again

Run this exact command from the VPS prompt:

docker exec -it openclaw-urge-openclaw-1 sh -lc 'openclaw config get channels.discord --json'

Paste the output here.

That runs the openclaw command inside the container for you.

versed saddle
#

docker exec -it openclaw-urge-openclaw-1 sh -lc 'openclaw config get channels.discord --json'
{
"enabled": true,
"allowBots": true,
"actions": {
"channels": true,
"messages": true,
"threads": true,
"pins": true,
"reactions": true,
"search": true,
"channelInfo": true,
"memberInfo": true,
"roleInfo": true,
"roles": true,
"events": true,
"presence": true,
"moderation": true,
"polls": true,
"stickers": true,
"emojiUploads": true,
"stickerUploads": true,
"permissions": true,
"voiceStatus": true
},
"agentComponents": {
"enabled": true
},
"voice": {
"autoJoin": [],
"enabled": true
},
"accounts": {
"custom-1": {
"ackReactionScope": "all",
"allowFrom": [
"1302991150763999302"
],
"allowBots": true,
"agentComponents": {
"enabled": true
},
"groupPolicy": "allowlist"
},
"default": {
"token": "OPENCLAW_REDACTED",
"allowFrom": [
"GJ7BRSVP",
"1302991150763999302",
"1495157727146545194",
"1495312653156089867"
],
"groupPolicy": "allowlist"
}
},
"allowFrom": [
"1302991150763999302",
"1495157727146545194",
"1495312653156089867",
"1495312602283249806"
],
"capabilities": [
"1302991150763999302"
],
"defaultAccount": "1302991150763999302",
"defaultTo": "1302991150763999302",
"contextVisibility": "all",
"dangerouslyAllowNameMatching": true,
"dmPolicy": "pairing",
"dms": {},
"token": "OPENCLAW_REDACTED",
"groupPolicy": "allowlist"
}
root@srv1584299:~#

charred shadowBOT
#

Okay, I see the issue now.

You have two Discord accounts configured, and the important part is:

  • default account allows your server 1495157727146545194
  • custom-1 account does not
  • custom-1 is set to groupPolicy: "allowlist"

So if your bot in that server is the custom-1 Discord account, it will reject commands there.

Step 10

Run this exact command from the VPS prompt:

docker exec -it openclaw-urge-openclaw-1 sh -lc 'openclaw config set channels.discord.accounts.custom-1.allowFrom "[\"1302991150763999302\",\"1495157727146545194\"]" --strict-json'
#

Paste the output here.

That adds your user ID and your server ID to the custom-1 Discord account allowlist.

versed saddle
#

docker exec -it openclaw-urge-openclaw-1 sh -lc 'openclaw config set channels.discord.accounts.custom-1.allowFrom "["1302991150763999302","1495157727146545194"]" --strict-json'

๐Ÿฆž OpenClaw 2026.4.12 (1c0672b) โ€” Like having a senior engineer on call, except I don't bill hourly or sigh audibly.

Config overwrite: /data/.openclaw/openclaw.json (sha256 061585a4603fd3281d053b7bc444f554ecc998a11d9f557fe6795f2b23fcdb82 -> ad3eb4d191af478dee4ba68ec4697eddaaebee1479505d968a475508fcb2af4e, backup=/data/.openclaw/openclaw.json.bak)
Updated channels.discord.accounts.custom-1.allowFrom. Restart the gateway to apply.
root@srv1584299:~#

charred shadowBOT
#

Nice, that part worked too.

Step 11

Restart the OpenClaw container one more time so that new Discord allowlist applies.

You can just use the Restart button again in Hostinger Docker Manager for:

openclaw-urge-openclaw-1

When itโ€™s back up, tell me, and then weโ€™ll test a command on your own server.

versed saddle
#

You are not authorized to use this command.

Still same

charred shadowBOT
#

I found the real issue, and this oneโ€™s on me, I pointed you at the wrong Discord allowlist earlier.

For Discord servers, OpenClaw does not use allowFrom as the main server allowlist.
With groupPolicy: "allowlist", it expects your server to be listed under:

channels.discord.guilds

Right now your config has groupPolicy: "allowlist" but no guilds block, so server commands get denied.

Step 12

Run this exact command from the VPS prompt:

#
docker exec -it openclaw-urge-openclaw-1 sh -lc 'openclaw config set channels.discord.guilds "{\"1495157727146545194\":{\"requireMention\":true,\"users\":[\"1302991150763999302\"]}}" --strict-json'

Paste the output here.

That adds your server to the Discord guild allowlist and allows your user ID inside it.

versed saddle
#

๐Ÿฆž OpenClaw 2026.4.12 (1c0672b) โ€” Claws out, commit inโ€”let's ship something mildly responsible.

Config overwrite: /data/.openclaw/openclaw.json (sha256 1b77595876e5ec56dbdc6c221a6202b4b3eb5514ace00b1bea9e08489b252255 -> 3be0f54a938719aa2ec5b4607f8511ad990be0277cd7c873c972cd5fcdb3f835, backup=/data/.openclaw/openclaw.json.bak)
Updated channels.discord.guilds. Restart the gateway to apply.

charred shadowBOT
#

Nice, thatโ€™s the right change.

Step 13

  1. Restart the OpenClaw container again in Hostinger Docker Manager.
  2. After it comes back up, go to your own server and run:
/id

Then tell me which one happens:

  • it shows your identity info, or
  • it still says You are not authorized to use this command.

Weโ€™re very close now.

versed saddle
#

OMG it finally worked

charred shadowBOT
#

Hell yes ๐ŸŽ‰

Root cause was:

  1. you were not set as an owner for owner-only commands, and
  2. your Discord server was not in channels.discord.guilds, while Discord was running with groupPolicy: "allowlist".

So the important manual places for Discord were:

  • commands.ownerAllowFrom
  • channels.discord.guilds

Docs for this part: https://docs.openclaw.ai/channels/discord

If you want, next we can do one step at a time for either:

  1. Telegram setup
#
  1. API keys / OpenRouter models
  2. a simple โ€œwhere everything livesโ€ map for Hostinger

And if this fixed the original problem, please right-click the solution message โ†’ Apps โ†’ โœ… Mark Solution so Answer Overflow can index it for the next person.

versed saddle
#

How can i fix it in the future? Possible without coding?

charred shadowBOT
#

Yes, absolutely. This was config, not coding.

For your Hostinger setup, think of it like this:

1. Platform settings

These are outside OpenClaw.

  • Discord bot name/avatar: Discord Developer Portal
  • Telegram bot name/username: BotFather

2. OpenClaw config

This is the main โ€œmanual fixโ€ layer.

On your Hostinger image, the important config file is:

#
/data/.openclaw/openclaw.json

The big ones to remember:

  • Owner permissions
    commands.ownerAllowFrom

  • Discord server access
    channels.discord.guilds

  • Telegram token
    channels.telegram.botToken

  • Discord token
    channels.discord.token

#
  • OpenRouter model choice
    agents.defaults.model.primary
    agents.defaults.models

3. Container control

This is just operations, not coding.

  • Restart: use the Docker Manager Restart button
  • Logs: use Docker Manager logs, or terminal
  • Status: check whether channels/tokens are actually loaded

Best way to avoid this in the future

Do this first, not reinstall

Reinstalling usually hides the real issue.

#

Instead check:

docker exec -it openclaw-urge-openclaw-1 sh -lc 'openclaw status --all'
docker exec -it openclaw-urge-openclaw-1 sh -lc 'openclaw config get commands --json'
docker exec -it openclaw-urge-openclaw-1 sh -lc 'openclaw config get channels.discord --json'
docker exec -it openclaw-urge-openclaw-1 sh -lc 'openclaw config get channels.telegram --json'

If Discord says โ€œnot authorizedโ€

Check these first:

  • commands.ownerAllowFrom
  • channels.discord.guilds
  • channels.discord.groupPolicy

If Telegram breaks

#

Check these first:

  • channels.telegram.botToken
  • pairing / approval state
  • Telegram group policy if using groups

If models/API keys break

Check these first:

  • .env or auth store
  • agents.defaults.model.primary
  • agents.defaults.models

Short answer

#

Yes, future fixes are possible without coding.
You mainly need:

  • the config file
  • the restart button
  • a few read-only openclaw config get ... commands

Thatโ€™s troubleshooting, not programming.

If you want, I can make you a super simple Hostinger cheat sheet next, like:

  • โ€œDiscord broken โ†’ check these 3 thingsโ€
  • โ€œTelegram broken โ†’ check these 3 thingsโ€
  • โ€œModels broken โ†’ check these 3 thingsโ€
versed saddle
#

How can I do it without the config code for discord?

charred shadowBOT
#

Yes, mostly.

For Discord, you have 3 non-coding-ish options:

1. Ask the bot in plain English

Now that your permissions are fixed, this is the easiest one.

Example:

Add my Discord Server ID 1495157727146545194 to the guild allowlist

That pattern is even in the docs for Discord guild setup.
Docs: https://docs.openclaw.ai/channels/discord

2. Use the Control UI in the browser

This is the best โ€œno config codeโ€ option.

#

Open the Control UI from Hostinger, then use:

  • Channels for channel status / per-channel config
  • Config for form-based editing
  • Apply + Restart

The Control UI supports view/edit config and apply with restart, so you do not have to hand-write JSON every time.
Docs: https://docs.openclaw.ai/web/control-ui

3. Use the guided wizard, not raw config

From terminal, instead of editing JSON directly, use:

openclaw configure

or section-based setup like:

#
openclaw config --section channels

Thatโ€™s guided setup, not coding.
Docs: https://docs.openclaw.ai/reference/wizard

Short version

If you mean โ€œcan I avoid writing config JSON by hand?โ€
Yes, usually by using:

  • the bot in plain English
  • the Control UI
  • the guided configure wizard

If you want, I can give you the easiest future workflow for Discord only, like a 3-step โ€œdo this every timeโ€ version.

versed saddle
#

I want ot wipe everything of this discord connection and start again, how to do it? Reset the whole setting I have on OpenClaw setting in Channels, seassions. agentsa, automation etc

charred shadowBOT
#

Yes, you can do that, and you do not need to reinstall the whole VPS.

Iโ€™d use OpenClawโ€™s built-in reset, not a fresh Hostinger reinstall.

Best options

Option A, recommended

Reset OpenClaw config + credentials + sessions, then run setup again.

This is the clean โ€œstart overโ€ option for:

  • channels
  • pairings
  • sessions
  • agents config
  • automation / cron config
  • stored auth / API creds
#

It does not wipe the whole workspace.

From the VPS terminal:

docker exec -it openclaw-urge-openclaw-1 sh
openclaw onboard --reset

Then choose:

Config + credentials + sessions

Option B, nuclear reset

If you want absolutely everything gone, including workspace:

#
docker exec -it openclaw-urge-openclaw-1 sh
openclaw onboard --reset --reset-scope full

That is the real โ€œwipe everythingโ€ button.

My recommendation

Use Option A first.

Itโ€™s much safer, and for your case itโ€™s probably exactly what you want.

Important warning

This will remove the stuff you set up, including things like:

#
  • Discord / Telegram config
  • stored tokens / auth
  • sessions
  • pairings
  • agent config
  • automation config

So only do it if you really want a fresh start.

Docs: https://docs.openclaw.ai/reference/wizard

If you want, I can walk you through the reset one step at a time and make sure you pick the right reset scope.

versed saddle
#
  How do you want to hatch your bot?
โ”‚  Hatch in TUI (recommended)
 openclaw tui - ws://127.0.0.1:18789 - agent main - session main                                                                                                                                                                                                                          
 connecting | idle                                                                                                                                                                                                                                                                        
 gateway disconnected: control ui requires device identity (use HTTPS or localhost secure context) | idle                                                                                                                                                                                 
โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€
gateway connect failed: GatewayClientRequestError: control ui requires device identity (use HTTPS or localhost secure context)  
charred shadowBOT
#

Yep, that error makes sense on a Hostinger VPS.

The fix is:

Do not choose โ€œHatch in TUIโ€ here.
When it asks:

How do you want to hatch your bot?

choose:

Do this later

Thatโ€™s the right choice for this kind of remote setup.

#

Why this happens

The TUI is trying to connect to the gateway over:

ws://127.0.0.1:18789

and your gateway is rejecting it because that path needs proper auth/device identity in this context.

What to do now

If youโ€™re still stuck in the TUI screen:

Ctrl+C
#

Then run the reset/onboarding again, and when the hatch prompt appears, select:

Do this later

After that, continue the reset/setup flow normally.

If you want, I can keep going with you step by step from that exact point.

versed saddle
#

Is it safe to rset fully and reconnect the same api key and bot? or should i create new API key and re add it?

#

Also, Should I install via terminal or Hostinger Docker Catalog?

charred shadowBOT
#

Yes, itโ€™s usually safe to fully reset OpenClaw and reconnect the same bot + same API key.

You do not need new keys/tokens just because you reset OpenClaw.

Reuse the same key/token if:

  • the key was not leaked
  • the bot itself is fine
  • you just want a clean local reset

Create a new key/token only if:

  • you pasted it somewhere public
  • you think it was compromised
  • the provider-side setup is messed up and you want to rotate it on purpose

Simple rule

For your case, Iโ€™d do this:

#
  • same Discord bot
  • same Telegram bot
  • same API keys

Then reconnect them after the reset.

Only rotate if you have a security reason, not just because OpenClaw was reset.

Small warning

If you regenerate a token on the provider side:

  • the old token stops working
  • you must update OpenClaw with the new one

So reusing the same ones is actually the easier path.

If you want, next I can tell you which things are safe to reuse and which things should be recreated in one short checklist.

#

For you, Iโ€™d recommend Hostinger Docker Catalog, not a manual terminal install.

My recommendation

Best for beginners

Hostinger Docker Catalog / Docker Manager

Use that for:

  • initial install
  • restart
  • updates
  • basic logs

Then use the terminal only for:

  • checking status
#
  • guided fixes
  • running openclaw config get/set when needed

Use terminal install only if:

  • you want full custom Docker setup
  • youโ€™re comfortable debugging Docker/CLI issues yourself
  • you want more control than the Hostinger template gives you

Short version

For your case:

  • Install with Hostinger Docker Catalog
  • Troubleshoot with terminal when needed
  • Do not mix two different install methods

Thatโ€™s the cleanest path.

versed saddle
#

Can i pause the old ocker container and setuop a new OpenClaw frm Catalog and add it? So, I can resume old one if something goes wrong

charred shadowBOT
#

Yes, you can, but I would not recommend that as the beginner path.

Short answer

  • Possible? Yes.
  • Best idea? Usually no.
  • Safer approach? Backup the old state, then reset or redeploy one instance.

Why I donโ€™t love the โ€œold + new containerโ€ plan

If you set up a second OpenClaw on the same VPS, you can run into:

  • port conflicts
  • two instances using the same Discord/Telegram bot
  • confusing state/volume mixups
  • โ€œwhich container is the real one?โ€ problems
#

Also, with the same bot token, you really do not want both instances active at the same time.

Better options

Best option

Stop the old container, back up its state, then start fresh.

That gives you a rollback without two live OpenClaws fighting each other.

Advanced option

Run a second OpenClaw only if all of these are true:

  • separate state/volume
  • separate port
  • only one instance active with a given bot token at a time

Important detail

#

If you do this, Iโ€™d use stop, not pause.

  • pause = freezes the process
  • stop = cleaner for this kind of switch

My recommendation

For you, Iโ€™d do this:

  1. Back up the current OpenClaw state
  2. Stop the old container
  3. Set up the new one
  4. Reuse the same bot/API keys if they were not leaked
  5. If the new setup goes badly, restore the backup

Thatโ€™s much safer than juggling two live installs.

#

If you want, I can give you the safest backup-first Hostinger flow, one step at a time.

versed saddle
#

Then should I delete the current container/docker openclaw project and open a new one?

charred shadowBOT
#

I would not delete it first.

My recommendation

Best first move

Use a reset inside the current OpenClaw container.

That is safer and simpler than deleting the whole Docker project.

Only delete/redeploy if:

  • the current container/project itself is broken
  • reset does not help
  • you already made a backup and are okay starting fully fresh

Safer order

  1. Back up the current OpenClaw state
#
  1. Try reset in the current container
  2. If that still feels cursed, then stop/delete/redeploy
  3. Keep the backup so you can roll back

Short version

  • Reset first
  • Delete later only if needed
  • Never delete before backup

For your case, thatโ€™s the least painful path.

If you want, I can give you the exact backup โ†’ reset โ†’ redeploy decision flow in 3 simple steps.

versed saddle
#

Alright, Let's fully reset then. Give me the process

charred shadowBOT
#

Okay. If you want a true full reset, letโ€™s do it safely.

The process

  1. Back up the current OpenClaw state first
  2. Run full reset
  3. During onboarding, choose Do this later when it asks about TUI/hatching
  4. Reconnect the same bot tokens / same API keys if theyโ€™re still valid

Important

A full reset means you are wiping the current OpenClaw state, including workspace-level stuff too.

So letโ€™s do the safety step first.


Step 1, back it up first

#

From your VPS prompt, run this exact command:

docker cp openclaw-urge-openclaw-1:/data/.openclaw ~/openclaw-backup-$(date +%Y%m%d-%H%M%S)

That copies your current OpenClaw state out of the container into your home folder on the VPS.

Paste the output here, or tell me if it returns to the prompt with no error. Then Iโ€™ll give you Step 2, the full reset command.

versed saddle
#
Successfully copied 6.8MB to /root/openclaw-backup-20260420-011227
root@srv1584299:~# 
charred shadowBOT
#

Perfect. Backup is safe now.

Step 2, start the full reset

Run this exact command from the VPS prompt:

docker exec -it openclaw-urge-openclaw-1 sh -lc 'openclaw onboard --reset --reset-scope full'

Important when the wizard asks:

If you see:

How do you want to hatch your bot?
#

choose:

Do this later

Do not choose TUI.

Once the reset wizard starts and you get to the next screen/question, paste it here and Iโ€™ll walk you through the next step.

versed saddle
#
Setup mode
โ”‚  โ— QuickStart (Configure details later via openclaw configure.)
โ”‚  โ—‹ Manual```
charred shadowBOT
#

I need a little more than just base ๐Ÿ˜…

Please paste the full prompt/question youโ€™re seeing now, or a screenshot.

For example, copy the lines right above and below base, so I can tell you exactly which option to pick next.

#

Choose:

QuickStart

Thatโ€™s the right choice for your setup and itโ€™s much easier as a beginner.

Step 3

  • keep QuickStart selected
  • press Enter

Then paste the next screen here and Iโ€™ll tell you the next choice.

versed saddle
#
โ—‡  Existing config detected โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ•ฎ
โ”‚                                         โ”‚
โ”‚  workspace: ~/.openclaw/workspace       โ”‚
โ”‚  model: openrouter/openai/gpt-5.4-mini  โ”‚
โ”‚  gateway.mode: local                    โ”‚
โ”‚  gateway.port: 18789                    โ”‚
โ”‚  gateway.bind: loopback                 โ”‚
โ”‚                                         โ”‚
โ”œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ•ฏ
โ”‚
โ—†  Config handling
โ”‚  โ— Use existing values
โ”‚  โ—‹ Update values
โ”‚  โ—‹ Reset```
charred shadowBOT
#

Choose:

Reset

Thatโ€™s the correct one since weโ€™re doing a full clean start.

Step 4

  • move to Reset
  • press Enter

Then paste the next screen.

versed saddle
#

โ—‡  Reset scope
โ”‚  Full reset (config + creds + sessions + workspace)
Failed to move to Trash (manual delete): ~/.openclaw/openclaw.json
Failed to move to Trash (manual delete): ~/.openclaw/credentials
Failed to move to Trash (manual delete): ~/.openclaw/agents/main/sessions
Failed to move to Trash (manual delete): ~/.openclaw/workspace
โ”‚
โ—‡  QuickStart โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ•ฎ
โ”‚                                      โ”‚
โ”‚  Gateway port: 18789                 โ”‚
โ”‚  Gateway bind: Loopback (127.0.0.1)  โ”‚
โ”‚  Gateway auth: Token (default)       โ”‚
โ”‚  Tailscale exposure: Off             โ”‚
โ”‚  Direct to chat channels.            โ”‚
โ”‚                                      โ”‚
โ”œโ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ”€โ•ฏ
โ”‚
โ—†  Model/auth provider
โ”‚  โ— Anthropic (Claude CLI + API key)
โ”‚  โ—‹ Arcee AI
โ”‚  โ—‹ BytePlus
โ”‚  โ—‹ Chutes
โ”‚  โ—‹ Cloudflare AI Gateway
โ”‚  โ—‹ Copilot Proxy
โ”‚  โ—‹ Custom Provider
โ”‚  โ—‹ DeepSeek
โ”‚  โ—‹ Fireworks
โ”‚  โ—‹ Gemini CLI OAuth
โ”‚  โ—‹ GitHub Copilot
โ”‚  โ—‹ Google
โ”‚  โ—‹ Hugging Face
โ”‚  โ—‹ Kilo Gateway
โ”‚  โ—‹ LiteLLM
โ”‚  โ—‹ LM Studio
โ”‚  โ—‹ Microsoft Foundry
โ”‚  โ—‹ MiniMax
โ”‚  โ—‹ Mistral AI
โ”‚  โ—‹ Moonshot AI (Kimi K2.5)
โ”‚  โ—‹ Ollama
โ”‚  โ—‹ OpenAI
โ”‚  โ—‹ OpenAI Codex
โ”‚  โ—‹ OpenCode
โ”‚  โ—‹ OpenRouter
โ”‚  โ—‹ Qianfan
โ”‚  โ—‹ Qwen Cloud
โ”‚  โ—‹ SGLang
โ”‚  โ—‹ StepFun
โ”‚  โ—‹ Synthetic
โ”‚  โ—‹ Together AI
โ”‚  โ—‹ Venice AI
โ”‚  โ—‹ Vercel AI Gateway
โ”‚  โ—‹ vLLM
โ”‚  โ—‹ Volcano Engine
โ”‚  โ—‹ xAI (Grok)
โ”‚  โ—‹ Xiaomi
โ”‚  โ—‹ Z.AI
โ”‚  โ—‹ Skip for now


charred shadowBOT
#

Stop here for a second.

Those lines:

Failed to move to Trash (manual delete): ...

mean the wizard did not actually remove the old state.

So if you continue from this screen, it will not be a true clean reset.

Step 5

Press:

#
Ctrl+C

to cancel the wizard and go back to the shell prompt.

Then tell me once youโ€™re back at the prompt, and Iโ€™ll give you the safe manual reset step so we really wipe it clean.

versed saddle
#

Yeah I back

charred shadowBOT
#

Great.

Step 6, archive the old OpenClaw state safely

Run this exact command from the VPS prompt:

docker exec -it openclaw-urge-openclaw-1 sh -lc 'mv /data/.openclaw /data/.openclaw-pre-reset-$(date +%Y%m%d-%H%M%S) && mkdir -p /data/.openclaw'

This does not delete the old state, it just moves it aside so we get a real clean slate.

If it works, it may return to the prompt with no message, and thatโ€™s fine.

Paste the output, or tell me if it just returns to the prompt.

versed saddle
#

Let's just delete everything and start fresh

charred shadowBOT
#

Okay. Since you already made a backup, we can do a real wipe.

I still think archive/move is safer, but if you want delete and start truly fresh, use this.

Step 6, destructive wipe

Run this exact command from the VPS prompt:

docker exec -it openclaw-urge-openclaw-1 sh -lc 'find /data/.openclaw -mindepth 1 -maxdepth 1 -exec rm -rf {} +'

This will delete the current OpenClaw state inside the container volume.

Because you already backed it up to:

#
/root/openclaw-backup-20260420-011227

you still have a rollback.

Paste the output, or tell me if it just returns to the prompt.

versed saddle
#

No output

charred shadowBOT
#

Perfect. No output is fine, that usually means it worked.

Step 7

Now restart the OpenClaw container from Hostinger Docker Manager, or from the VPS prompt:

docker restart openclaw-urge-openclaw-1

After it comes back up, tell me, and then Iโ€™ll give you the clean onboarding command for the fresh setup.

versed saddle
#

docker restart openclaw-urge-openclaw-1
openclaw-urge-openclaw-1

charred shadowBOT
#

Nice. That restart worked.

Step 8, start fresh onboarding

Run this exact command:

docker exec -it openclaw-urge-openclaw-1 sh -lc 'openclaw onboard'

When the wizard starts:

  • choose QuickStart
  • if it later asks about hatching/TUI, choose Do this later

Then paste the next screen here, and Iโ€™ll guide you through the setup one choice at a time.

versed saddle
#

what if it's not completed deleted?

charred shadowBOT
#

Good question. Letโ€™s verify first instead of guessing.

Quick check

Run this exact command:

docker exec -it openclaw-urge-openclaw-1 sh -lc 'find /data/.openclaw -mindepth 1 -maxdepth 2 | sed -n "1,40p"'

What we want

  • No output = itโ€™s basically clean
  • Any files/folders listed = something is still there

Paste the output here, then Iโ€™ll tell you whether weโ€™re truly clean before onboarding.

versed saddle
#
docker exec -it openclaw-urge-openclaw-1 sh -lc 'find /data/.openclaw -mindepth 1 -maxdepth 2 | sed -n "1,40p"'
/data/.openclaw/extensions
/data/.openclaw/workspace
/data/.openclaw/workspace/state
/data/.openclaw/workspace/TOOLS.md
/data/.openclaw/workspace/SOUL.md
/data/.openclaw/workspace/.git
/data/.openclaw/workspace/.openclaw
/data/.openclaw/workspace/AGENTS.md
/data/.openclaw/workspace/HEARTBEAT.md
/data/.openclaw/workspace/BOOT.md
/data/.openclaw/workspace/BOOTSTRAP.md
/data/.openclaw/workspace/USER.md
/data/.openclaw/workspace/IDENTITY.md
/data/.openclaw/workspace/memory
/data/.openclaw/workspace/MEMORY.md
/data/.openclaw/telegram
/data/.openclaw/telegram/command-hash-default-1a0ab64749a028d8.txt
/data/.openclaw/tasks
/data/.openclaw/tasks/runs.sqlite-wal
/data/.openclaw/tasks/runs.sqlite-shm
/data/.openclaw/tasks/runs.sqlite
/data/.openclaw/logs
/data/.openclaw/logs/config-audit.jsonl
/data/.openclaw/logs/config-health.json
/data/.openclaw/credentials
/data/.openclaw/openclaw.json.bak
/data/.openclaw/openclaw.json.bak.2
/data/.openclaw/identity
/data/.openclaw/identity/device.json
/data/.openclaw/identity/device-auth.json
/data/.openclaw/openclaw.json.bak.1
/data/.openclaw/devices
/data/.openclaw/devices/pending.json
/data/.openclaw/devices/paired.json
/data/.openclaw/agents
/data/.openclaw/agents/main
/data/.openclaw/canvas
/data/.openclaw/canvas/index.html
/data/.openclaw/openclaw.json
/data/.openclaw/skills
root@srv1584299:~# 
charred shadowBOT
#

Yep, that confirms it. It is not fully clean.

The big giveaways are:

  • openclaw.json
  • openclaw.json.bak*
  • credentials
  • devices
  • agents

So at this point, I would stop fighting this container.

My recommendation now

Create a brand-new OpenClaw project from the Hostinger catalog instead of trying to scrub this one more.

You already have a backup, so this is the cleanest path now.

#

What Iโ€™d do

  1. Keep the backup
  2. Stop or delete the current OpenClaw project/container
  3. Create a brand-new OpenClaw from Hostinger Catalog
  4. Reconnect the same Discord bot / Telegram bot / API keys if they were not leaked
  5. Do not have both old and new using the same bot tokens at the same time

Why Iโ€™m changing the recommendation

Normally I prefer reset first.
But now we have proof that this Hostinger setup is still repopulating old state, so a fresh catalog deployment is cleaner than more surgery.

If you want, I can now give you the exact safest sequence for:

  • stopping the old project
  • creating the new Hostinger catalog project
#
  • reconnecting Discord and Telegram in the right order
versed saddle
#

So delete the old dock project and add again?

charred shadowBOT
#

Yes, at this point, thatโ€™s what I would do.

Recommended path now

  1. Keep your backup

    • do not delete:
    /root/openclaw-backup-20260420-011227
    
  2. Delete the old OpenClaw Docker project/container in Hostinger

  3. Create a brand-new OpenClaw project from the Hostinger Catalog

  4. Reconnect the same Discord bot / Telegram bot / API keys

Important

#

Before reconnecting the same bot tokens, make sure the old OpenClaw is stopped/deleted.

You do not want both old and new instances trying to use the same bot at the same time.

Short answer

Yes. Delete the old OpenClaw Docker project, then create a new one from the Hostinger Catalog.

If you want, I can now give you the exact order in Hostinger UI, one click at a time, so you donโ€™t accidentally remove the wrong thing.

versed saddle
#

One more question, I can anytime restore my claww every history from hostinger vps to some other vps right or if I host to my PC?

charred shadowBOT
#

Yes, mostly yes.

If you keep the OpenClaw state folder backup, you can usually move your setup and history to:

  • another VPS
  • your own PC
  • another Docker host

The important part to back up

On your Hostinger setup, the key thing is the state folder:

/data/.openclaw/

That is the main thing youโ€™d want to migrate.

#

It usually contains things like:

  • config
  • session history
  • auth profiles / stored credentials
  • workspace files
  • device/session state

So, short answer

Yes, your history/config can usually be restored elsewhere by moving that state folder over.

But there are a few caveats

Some things may still need to be redone on the new machine:

  • browser/device pairing
#
  • local paths
  • local model setup
  • skill dependencies / installed binaries
  • anything tied to the old machine environment

Also, donโ€™t run two live instances with the same bot tokens at the same time.

Best migration pattern

  1. Stop old instance
  2. Copy the state folder backup
  3. Install OpenClaw on new machine
  4. Restore the state folder
  5. Start OpenClaw
  6. Re-pair/reapprove anything machine-specific if needed

So yes, your history is portable, just not always perfectly plug-and-play.

#

If you want, I can give you a simple backup/migration checklist for:

  • Hostinger VPS โ†’ new VPS
  • Hostinger VPS โ†’ your PC
versed saddle
#

Alright. I'll delete the docker project and add new and brb here

charred shadowBOT
#

Sounds good.

Just keep these two things in place:

  1. Keep your backup folder

    /root/openclaw-backup-20260420-011227
    
  2. When the new project is up, use only the new instance with your bot tokens

Come back here when the new Hostinger OpenClaw project is ready, and Iโ€™ll help you set it up cleanly from step 1.

wind notchBOT
versed saddle
#

Alright, so I added the OpenClaw and added Claude key for now. But I want to add OpenRouter key with GMT 5.4 Mini and 5.4

charred shadowBOT
#

Yep, you can do that.

Iโ€™d do it without hand-writing config:

  1. add the OpenRouter API key
  2. then pick your primary model and fallback model

One small thing, for the exact OpenRouter model IDs, I would use the exact names shown by the wizard/UI. I donโ€™t want to guess a stale model id from memory.

Step 1

Run this first so I can give you the exact next command for the new container:

docker ps
#

Paste the output here.

Then Iโ€™ll give you the clean command to open the model setup wizard for OpenRouter.

versed saddle
#

CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
19cd050098b5 traefik:latest "/entrypoint.sh --apโ€ฆ" 14 minutes ago Up 14 minutes traefik-i3j1-traefik-1
30f776ff36de ghcr.io/hostinger/hvps-openclaw:latest "/entrypoint.sh nodeโ€ฆ" 16 minutes ago Up 16 minutes 0.0.0.0:41470->41470/tcp, [::]:41470->41470/tcp openclaw-b8wu-openclaw-1

charred shadowBOT
#

Perfect. Your new OpenClaw container is:

openclaw-b8wu-openclaw-1

Step 2, open model setup

Run this exact command:

docker exec -it openclaw-b8wu-openclaw-1 sh -lc 'openclaw configure --section model'

In the wizard

  • choose OpenRouter
  • paste your OpenRouter API key
#
  • when it asks for models, use the exact OpenRouter model names shown by the wizard

Paste the next screen here once you get to the OpenRouter/model part, and Iโ€™ll help with the next choice.

versed saddle
#

I added the 2 models, now how can I set as default openai/gpt-5.4-mini

charred shadowBOT
#

Small but important detail:

If you added those models through OpenRouter, then the default usually should be the OpenRouter model ID, not plain:

openai/gpt-5.4-mini

That plain ID would be for the OpenAI provider, not OpenRouter.

Two different things

  • Change just this chat/session: use /model
  • Change the global default: set agents.defaults.model.primary

Letโ€™s verify the exact model IDs first

#

Run this:

docker exec -it openclaw-b8wu-openclaw-1 sh -lc 'openclaw config get agents.defaults.models --json'

Paste the output here.

Then Iโ€™ll tell you the exact command to set the correct one as the global default.

versed saddle
#

``docker exec -it openclaw-b8wu-openclaw-1 sh -lc 'openclaw config get agents.defaults.models --json'
{
"anthropic/claude-opus-4-6": {
"alias": "Claude Opus 4.6"
},
"anthropic/claude-sonnet-4-6": {
"alias": "Claude Sonnet 4.6"
},
"anthropic/claude-haiku-4-5": {
"alias": "Claude Haiku 4.5"
},
"openrouter/auto": {
"alias": "OpenRouter"
},
"openrouter/openai/gpt-5.4-mini": {},
"openrouter/openai/gpt-5.4": {},
"openrouter/moonshotai/kimi-k2.5": {}```

charred shadowBOT
#

Perfect, now we know the exact ID.

Because you added it through OpenRouter, the default should be:

openrouter/openai/gpt-5.4-mini

If you want:

  • default / primary = GPT 5.4 Mini
  • fallback = GPT 5.4

run this exact command:

docker exec -it openclaw-b8wu-openclaw-1 sh -lc 'openclaw config set agents.defaults.model "{\"primary\":\"openrouter/openai/gpt-5.4-mini\",\"fallbacks\":[\"openrouter/openai/gpt-5.4\"]}" --strict-json'
#

That gives you:

  • primary: openrouter/openai/gpt-5.4-mini
  • fallback: openrouter/openai/gpt-5.4

If you want, after that I can give you one quick command to verify the default was saved correctly.

versed saddle
#

Done, Now I wanna add Temegram. Added the API. got the telegram id and pair code, how to add?

charred shadowBOT
#

Nice, youโ€™re close.

If you already have the Telegram pair code, the next step is to approve the pairing.

Do this

Run this exact command, replacing PAIR_CODE with the actual code you got:

docker exec -it openclaw-b8wu-openclaw-1 sh -lc 'openclaw pairing approve telegram PAIR_CODE'

Optional, if you want to check pending codes first

docker exec -it openclaw-b8wu-openclaw-1 sh -lc 'openclaw pairing list telegram'
#

After approving

Go back to Telegram and send the bot a normal message like:

hi

and it should start replying.

If you want, paste the pair code command output here and Iโ€™ll confirm whether it went through correctly.

versed saddle
#

How can I start a new session like with a new name and different session? Also how can I access the old session? I added her identity and type / new and those chats are gone

charred shadowBOT
#

/new starts a fresh current session. It does not usually delete the old one, but it does stop using it in that chat.

Important distinction

If you mean same running OpenClaw instance

  • /new = new current session
  • old session is usually still in state/history
  • easiest way to see old sessions is the Control UI Sessions list

If you mean the old Hostinger project you deleted

  • those chats are not in the new project
  • they only exist in your backup now

Best way to keep separate sessions with names

#

For a beginner, the easiest method is:

Use separate Discord threads

  • one thread = one conversation/session
  • give the thread a name yourself
  • thatโ€™s your โ€œnamed sessionโ€

That is much easier than trying to juggle hidden session keys.

Docs also support thread/session binding tools like:

  • /focus <target>
  • /unfocus

but I would not start there unless you need it. Separate threads are simpler.


#

Short answer

  • /new = fresh session
  • old session is not necessarily deleted
  • in the same instance, use the Sessions UI to find older sessions
  • in a newly redeployed instance, old chats are only in your backup
  • easiest โ€œnamed sessionsโ€ = use separate Discord threads

If you want, I can show you the simplest workflow for keeping one โ€œmain assistantโ€ thread and one separate โ€œprojectโ€ thread so you donโ€™t lose track again.

versed saddle
#

Can I get back to old chats?

charred shadowBOT
#

Yes, but it depends which โ€œold chatsโ€ you mean.

1. Old chats from before you deleted the old Hostinger project

Those are not in the new live bot now.

But they may still be recoverable from your backup:

/root/openclaw-backup-20260420-011227

So yes, you can get them back, but by restoring the backup, not from the current fresh bot.

2. Old chats from the current live instance, before /new

Those are usually still in the session store, and /new just switched away from them.

In that case, the easiest way back is through the Sessions UI / Control UI.

#

Short answer

  • Deleted old project chats โ†’ recover from backup
  • Current bot + /new chats โ†’ likely still in sessions

If you want, I can help you with one specific recovery path:

  1. recover chats from the backup, or
  2. find chats from the current instance via sessions.
versed saddle
#

The chat was there then I used /new

charred shadowBOT
#

Got it. In that case, it is probably still there.

/new usually starts a new current session, it does not erase the previous one.

The catch

There usually isnโ€™t a simple โ€œundo /newโ€ chat command.

Best way to get it back

Use the Control UI and look in the Sessions list.

You should be able to find the older session from just before you ran /new.

Short answer

  • Yes, probably recoverable
  • No, /new usually did not delete it
  • Use Sessions UI / Control UI to find the older session
#

Best practice for next time

If you want separate conversations you can come back to easily, use:

  • separate Discord threads, or
  • export important chats before resetting

Thatโ€™s much easier than using /new in the same conversation.

If you want, I can walk you step by step through finding that older session in the Control UI.

versed saddle
#

Yes please

charred shadowBOT
#

Yep. Weโ€™ll do it one step at a time.

Step 1

Open your OpenClaw Control UI from Hostinger.

The easiest way is usually:

  • Hostinger hPanel
  • your OpenClaw project
  • click Open

Once the OpenClaw page is open in your browser, tell me what you see.

If it asks for a gateway token, or says pairing required, tell me that exactly and Iโ€™ll guide you through it.

versed saddle
#

Im in the chat interface

wind notchBOT
charred shadowBOT
#

Perfect.

Step 2

Look for Sessions in the Control UI navigation, usually in the sidebar or top navigation.

Click Sessions.

Then tell me:

  • whether you can see a list of sessions, or
  • whether you donโ€™t see Sessions anywhere

If you donโ€™t see it, Iโ€™ll help you find the right place.

versed saddle
#

I see only 1 session named agent:main:main

charred shadowBOT
#

Ah, okay, that tells us a lot.

If you only see:

agent:main:main

then /new likely reset the main session in place instead of creating a second separate session entry.

So in this case, I donโ€™t think thereโ€™s another older session for the UI to switch back to. Iโ€™m sorry, I think that old OpenClaw session is probably gone as a live session.

What that means

  • /new on the main chat likely replaced/reset agent:main:main
  • because of that, there isnโ€™t a second old session showing in Sessions
  • so thereโ€™s nothing in the UI to reopen
#

For next time, safest workflow

If you want to keep old chats accessible:

  1. Use separate Discord threads
  2. or use /export-session before /new
  3. avoid using /new in the one main conversation if you want to preserve that session history

Short answer

I think that specific old chat is gone as an OpenClaw session if it was in agent:main:main and /new replaced it.

If you want, I can give you a simple session workflow so this doesnโ€™t happen again:

  • one main thread
  • one project thread
  • one scratch thread
versed saddle
#

How can i start a new session but in different session way . not replacing the main or other ones

charred shadowBOT
#

The easiest way is:

Donโ€™t use /new in your main chat

Instead:

Use a separate Discord thread for each session

So your setup becomes:

  • main thread = your normal ongoing assistant
  • project thread = one separate project/session
  • scratch thread = testing / temporary stuff

That way you get separate conversations without replacing the main one.

Best simple workflow

#

Main chat

Keep this for your normal/default assistant.

New session

Create a new Discord thread and talk to OpenClaw there.

Give the thread a name like:

  • Website project
  • Telegram setup
  • Ideas / scratch

That thread name becomes your human-readable โ€œsession nameโ€.

Advanced option

If your Discord thread bindings are enabled, commands like these exist:

#
  • /focus
  • /unfocus

But honestly, for you, Iโ€™d keep it simple and just use separate threads.

Short answer

If you want a new session without replacing main, do this:

  1. create a new Discord thread
  2. talk to OpenClaw there
  3. do not use /new in the main thread

Thatโ€™s the safest beginner workflow.

If you want, I can give you a 3-thread setup suggestion you can copy exactly.

versed saddle
#

I generated the Discord Bot Token. Where to add now?

charred shadowBOT
#

Easiest way, donโ€™t hand-edit JSON.

Add it through the channels setup wizard

Run this:

docker exec -it openclaw-b8wu-openclaw-1 sh -lc 'openclaw configure --section channels'

Then:

  1. choose Discord
  2. paste the bot token
  3. save/apply

If youโ€™re asking where it lives manually

#

The config key is:

channels.discord.token

But Iโ€™d use the wizard, not raw config.

If you want, after you paste the token and get the next screen, send me that screen and Iโ€™ll tell you the next choice.

versed saddle
#

I added it through the Add new container and added the name DISCORD_BOT_TOKEN and token. It's showing configured. Good right?

charred shadowBOT
#

Yes, that is the right env var name. ๐Ÿ‘

DISCORD_BOT_TOKEN

So if Hostinger shows it as configured, that part is good.

One important thing

If you added it after the container was already running, do a restart/redeploy once so OpenClaw actually picks it up.

Then verify it

Run:

docker exec -it openclaw-b8wu-openclaw-1 sh -lc 'openclaw channels status --probe'
#

That will tell us whether Discord is actually loading correctly.

Also remember

A correct token alone is not the whole setup. You still need:

  • the bot invited to your Discord server
  • applications.commands scope
  • and, if your server is restricted, the server added to the Discord allowlist

So yes, the token part sounds right.
Next step is just verifying Discord is actually connected.

versed saddle
#
- Discord default: enabled, configured, running, connected, bot:@Miko, token:env, intents:content=limited, works
- Telegram default: enabled, configured, running, mode:polling, bot:@Claw_Miko_by_Wrakeeb_Bot, token:config, works```
charred shadowBOT
#

Yep, thatโ€™s good. ๐ŸŽ‰

Both channels are up:

  • Discord: connected, running, works
  • Telegram: running, works

So the token/config side is fine now.

Next real test for Discord

In your own Discord server, try:

/id
#

If that works there, your Discord setup is live.

Small note

This part:

intents:content=limited

means Discord message-content access is limited. The bot can still work, but if you want smoother normal message handling, itโ€™s worth checking Message Content Intent in the Discord Developer Portal later.

But for now, the big thing is:

your Discord and Telegram are both successfully connected.

If you want, next I can help you do the final Discord server allowlist / test message step so you know itโ€™s fully usable in your server.

versed saddle
#
- Discord default: enabled, configured, running, connected, bot:@Miko, token:env, intents:content=limited, works
- Telegram default: enabled, configured, running, mode:polling, bot:@Claw_Miko_by_Wrakeeb_Bot, token:config, works```
charred shadowBOT
#

Yep, that output is good. Both are connected and working.

Next step

In your own Discord server, try:

/id

If it replies there, Discord is working end to end.

If it does not reply there, then the next thing to fix is the server allowlist, not the token.

versed saddle
#

It's showing

I said: I already set my Discord bot token in config. Please finish Discord setup with User ID <1302991150763999302> and Server ID <1495157727146545194>.

Reply:

I canโ€™t finish that from here right now: the config file is unreadable to the current process, so I canโ€™t safely patch Discord settings.

What I found:

Discord config path is channels.discord
Current config read fails with EACCES on /data/.openclaw/openclaw.json
Fix on the machine, then I can complete it:

chown 1000 "/data/.openclaw/openclaw.json"
restart the gateway
After that, I can apply the Discord user/server setup with:

User ID: 1302991150763999302
Server ID: 1495157727146545194

charred shadowBOT
#

Yep, that reply makes sense.

It means the bot token is fine, but the bot cannot edit the config file because /data/.openclaw/openclaw.json has the wrong permissions.

Do this

Step 1, fix ownership

Run:

docker exec -it openclaw-b8wu-openclaw-1 sh -lc 'chown 1000 /data/.openclaw/openclaw.json'

Step 2, restart OpenClaw

Run:

#
docker restart openclaw-b8wu-openclaw-1

Step 3

Then ask the bot again, but use the IDs without angle brackets:

I already set my Discord bot token in config. Please finish Discord setup with User ID 1302991150763999302 and Server ID 1495157727146545194.

If you want, we can also skip the bot and I can give you the manual terminal commands right after the restart.

versed saddle
#

She said: Done. Discord is set up with your User ID and Server ID.

charred shadowBOT
#

Nice, thatโ€™s what we wanted ๐ŸŽ‰

That means:

  • your Discord token is loaded
  • your user ID is allowlisted
  • your server ID is allowlisted

Final test

Go to your Discord server and try:

/id

or just send a normal test message if your setup is meant to respond there.

#

If it replies there, your Discord setup is properly working end to end.

And if this whole thread helped, please right-click the solution message โ†’ Apps โ†’ โœ… Mark Solution so Answer Overflow can index it for the next person.

versed saddle
#

Me: Approve this Discord pairing code: L9RX2YVV

She: I canโ€™t approve that pairing code from this session right now.

charred shadowBOT
#

Yep, thatโ€™s fine, some pairing approvals wonโ€™t go through from chat.

Do it from the terminal instead.

Approve the Discord pairing code

Run this exact command:

docker exec -it openclaw-b8wu-openclaw-1 sh -lc 'openclaw pairing approve discord L9RX2YVV'

If you want to confirm pending Discord pairings first, run:

docker exec -it openclaw-b8wu-openclaw-1 sh -lc 'openclaw pairing list discord'
#

After approving, try the Discord chat again.

If you want, paste the output here and Iโ€™ll confirm it worked.

versed saddle
#

She's giving me a new code again when texting

charred shadowBOT
#

Yep, thatโ€™s normal in pairing mode.

If you keep messaging before the approval is completed, it can issue a new code and the older one may no longer be the active one.

Do this now

Step 1

List the current pending Discord pairing:

docker exec -it openclaw-b8wu-openclaw-1 sh -lc 'openclaw pairing list discord'

Step 2

Approve the latest/current code it shows.

Example:

#
docker exec -it openclaw-b8wu-openclaw-1 sh -lc 'openclaw pairing approve discord NEW_CODE_HERE'

Important

After that, donโ€™t keep sending new test messages immediately.
Approve the newest code first, then send one test message.

Paste the output of openclaw pairing list discord here if you want, and Iโ€™ll tell you exactly which code to approve.

versed saddle
#

Alright all seems like and the connections step is done. Now the config ones.

I set the activation to โš™๏ธ Group activation set to always. on a testing channel on the server but still getting no response. Only @ works. How can i set it to always reply without @ and also how to set for specific channel

charred shadowBOT
#

Thatโ€™s the key part:

/activation always by itself is not enough for Discord server channels.

Discord guild messages are still controlled by:

channels.discord.guilds.<SERVER_ID>.requireMention

So if it still only replies when @mentioned, that means Discord is still mention-gated.

To allow replies without @ on the whole server

Ask the bot exactly this:

#
Allow my agent to respond on this server without having to be @mentioned.

That matches the Discord docs pattern.

For only one specific channel

You need a channel-level override under your server config, basically:

  • server is allowlisted
  • that specific channel is allowlisted
  • requireMention: false for that channel

So the idea is:

#
channels.discord.guilds.<SERVER_ID>.channels.<CHANNEL_ID>.allow = true
channels.discord.guilds.<SERVER_ID>.channels.<CHANNEL_ID>.requireMention = false

Why itโ€™s happening now

Because Discord server messages are mention-gated by default, and /activation always did not fully override that guild/channel config.

Easiest next step

If you want the whole server to reply without @, ask the bot with that sentence above.

If you want only one testing channel, send me the channel ID and Iโ€™ll give you the exact command/text for that specific channel.

versed saddle
#

But I can also set it when I want by doing the /activation always/metion right? Can't i do like that so I can just do slash and choose when I want

charred shadowBOT
#

Yes, thatโ€™s the idea, but with one important catch:

Short answer

Yes, you can use /activation mention and /activation always to switch behavior.

But it works best only after the Discord guild/channel config is already set up correctly.

What that means

Good setup

  • your server is allowlisted
  • the channel is allowlisted
  • then /activation mention or /activation always can be your day-to-day toggle

Bad setup

If Discord is still hard-configured as mention-only at the guild/channel level, then /activation always may not fully override it, which is exactly what you just saw.

#

Best practical setup for you

For your testing channel:

  1. make sure that channel is allowed in config
  2. then use:
    • /activation always when you want free replies
    • /activation mention when you want it quieter again

So:

  • config = gives the channel permission to behave that way
  • /activation = your convenient toggle after that

If you want, send me the testing channel ID and Iโ€™ll give you the exact setup so that /activation can be your on/off switch there.

versed saddle
#

โš™๏ธ Group activation set to always.

#

I just set always but not getting any messages without the mention

charred shadowBOT
#

Good, that means the session toggle part worked.

So if itโ€™s still not replying without @mention after that, the remaining blocker is almost certainly the Discord guild/channel config, not /activation.

Next step

Send me the testing channel ID.

Then Iโ€™ll give you the exact setup so that channel can use:

  • /activation always for free replies
  • /activation mention when you want it quiet again

If you donโ€™t know the channel ID, enable Discord Developer Mode, then right-click the channel and choose Copy Channel ID.

#

Yep, that confirms it.

/activation always is set, but the channel itself is still mention-gated.

So the problem is not the slash command now, itโ€™s the Discord channel config.

What I need from you

Send me the testing channel ID.

Then Iโ€™ll give you the exact setup so that channel can reply without @mention.

If you donโ€™t know it:

  1. turn on Discord Developer Mode
  2. right-click the testing channel
  3. click Copy Channel ID
versed saddle
#

This is the channel ID: 1495621441461420062

I want the whole channel and it's server to react like that so I can use /slash anytime to change it always to mention

charred shadowBOT
#

Perfect, and since you want the whole server to work that way, the server ID matters more than that one channel ID.

What to do

Tell the bot exactly this:

Allow my agent to respond on this server without having to be @mentioned.

That is the right server-wide baseline.

Then how /activation fits in

Once the server is configured that way:

  • /activation always = free replies in that session/channel
#
  • /activation mention = quieter, only when mentioned

So yes, thatโ€™s the setup you want:

  1. server config allows no-mention replies
  2. /activation becomes your easy toggle whenever you want

Important point

If the server is still hard-configured as mention-only, /activation always wonโ€™t fully behave the way you want.

So the order is:

  1. set the server to allow replies without @mention
  2. then use /activation as your switch

Since you want the whole server, you do not need to configure only that single channel first.

#

If you want, after you send that sentence to the bot, paste the reply here and Iโ€™ll tell you if it applied the correct setting.

versed saddle
#

Me: Allow my agent to respond on this server without having to be @mentioned.

She: Done โ€” your Discord server can now respond without @mentioning the bot.

Now, even if I change the activation via slash to mention it doesn't change. Now replying all the tme

charred shadowBOT
#

Right, and thatโ€™s because the server config was changed, not just the session.

So now the fix is:

If you want to stop the whole server from replying all the time

Tell the bot:

Require @mention on this server again.

That should flip the server-wide Discord config back to mention-only.

Then, if you want only your testing channel to be always-on

After that, tell the bot:

#
Allow my agent to respond in channel 1495621441461420062 without @mentioning the bot.

Important

/activation is not the thing that will undo the server-wide config change on Discord.

So the pattern is:

  • server config controls baseline behavior
  • /activation is not a reliable Discord-wide override here

If you want, do the first sentence now, paste the botโ€™s reply, and Iโ€™ll guide the second step so only your testing channel stays always-on.

versed saddle
#

Alright, this done for now.

So now, I can see that anyone can add her to their Apps and server. So, should I turn off public bot option from the discord developer portal? Will it stops anything to the corrent setup?

charred shadowBOT
#

Yes, if this is meant to be your private/personal bot, Iโ€™d turn Public Bot off.

What happens if you disable Public Bot

It should:

  • stop other people from inviting it to new servers
  • not break your current setup
  • not remove it from servers where it is already installed

So for your current server/setup, it should be fine.

Short recommendation

  • Personal/private bot โ†’ turn Public Bot = off
  • Bot you want others to add freely โ†’ leave it on
#

If later you want to make it public again, you can just turn it back on.

versed saddle
#

I don't want anyone to touch it. Only I can add and removbe, so should I turn off public rbot?

charred shadowBOT
#

Yes, in your case, turn Public Bot off.

That matches exactly what you want:

  • no random people adding it
  • no public installs
  • only you control where it goes

It should not break the current setup you already have.

So for a private personal bot, Public Bot = off is the right move.

versed saddle
#

Alright, so now everything is perfectly set. Now, I wanna back it up so if I lose anytime or run into some issue then i can go back. What's the process?

charred shadowBOT
#

Nice, thatโ€™s the right time to do it.

For your Hostinger setup, the thing you want to back up is:

/data/.openclaw

That is the important state folder.

Best backup process, safest

1. Stop OpenClaw briefly

docker stop openclaw-b8wu-openclaw-1
#

2. Copy the whole state folder out of the container

docker cp openclaw-b8wu-openclaw-1:/data/.openclaw ~/openclaw-backup-$(date +%Y%m%d-%H%M%S)

3. Start OpenClaw again

docker start openclaw-b8wu-openclaw-1

Strong recommendation

After that, also copy that backup off the VPS:

  • your PC
  • cloud storage
  • another VPS
#

Because if the VPS dies, a backup stored only on that same VPS dies with it.

What this backup includes

Usually the important stuff:

  • config
  • session history
  • auth / stored credentials
  • workspace
  • device/pairing state

Restore later

If you ever need to restore:

  1. deploy or stop the target OpenClaw container
  2. put your backup back into /data/.openclaw
  3. start the container again
versed saddle
#

docker cp openclaw-b8wu-openclaw-1:/data/.openclaw ~/openclaw-backup-$(date +%Y%m%d-%H%M%S)
Successfully copied 648kB to /root/openclaw-backup-20260420-042116

Done, now how to move it to my PC>

charred shadowBOT
#

Nice. Next, make it into one file, then download that file.

Step 1, compress it on the VPS

Run:

tar -czf /root/openclaw-backup-20260420-042116.tar.gz -C /root openclaw-backup-20260420-042116

Step 2, move it to your PC

Easiest if you use Mac/Linux terminal

Run this on your PC, not on the VPS:

#
scp root@YOUR_VPS_IP:/root/openclaw-backup-20260420-042116.tar.gz ~/Downloads/

Replace YOUR_VPS_IP with your Hostinger VPS IP.

If youโ€™re on Windows

The easiest option is usually WinSCP:

  1. open WinSCP
  2. connect to your VPS with:
    • host = your VPS IP
    • user = root
    • password = your VPS password
  3. go to:
#
   /root/
  1. download:
    openclaw-backup-20260420-042116.tar.gz
    

Short version

  • compress on VPS
  • use scp or WinSCP
  • download the .tar.gz to your PC

If you want, send me your OS (Windows / Mac / Linux) and Iโ€™ll give you the exact easiest method for your computer.

versed saddle
#

I use Windows

charred shadowBOT
#

Perfect, on Windows the easiest way is WinSCP.

Step 1

If you havenโ€™t already, first make the .tar.gz on the VPS:

tar -czf /root/openclaw-backup-20260420-042116.tar.gz -C /root openclaw-backup-20260420-042116

Step 2

Download WinSCP on your PC:
https://winscp.net/

Step 3

Open WinSCP and connect with:

  • File protocol: SFTP
#
  • Host name: your Hostinger VPS IP
  • User name: root
  • Password: your VPS password
  • Port: 22

Step 4

After connecting, go to:

/root/

You should see:

openclaw-backup-20260420-042116.tar.gz
#

Step 5

Drag that file from WinSCP to your PC, for example:

Downloads

Thatโ€™s it. Now you have an off-VPS backup.

If you want, next I can show you the restore process too, so you know how to put this backup back onto a VPS later.

versed saddle
#

Alright, got the file of 89 kb. It contains everything right? So emprting it next time will also have memories and everything?

charred shadowBOT
#

Mostly yes.

Because you backed up /data/.openclaw, that file should contain the important OpenClaw-side state, including things like:

  • config
  • sessions/chat history
  • workspace files
  • memory/state files
  • pairings/devices
  • stored OpenClaw data

So yes, restoring that later should bring back your OpenClaw-side setup, memory, and history.

But not literally everything

It does not automatically include things outside that state folder, like:

#
  • Discord Developer Portal settings
  • Telegram BotFather settings
  • VPS-wide system config
  • anything stored somewhere else outside /data/.openclaw

About the small file size

If your setup is still pretty fresh, 89 KB is not weird.
A small setup with limited history can still be a valid backup.

Short answer

  • Yes, it should include your OpenClaw memory/history/config
  • No, it does not include every external platform setting on earth
  • restoring it later should get you most of the important stuff back

If you want, I can give you a very simple restore command set next, so you know exactly how to use that backup later.

versed saddle
#

Yeah suee go on

charred shadowBOT
#

Nice. Hereโ€™s the simple restore flow for later.

Restore backup to a VPS / new Hostinger OpenClaw

1. Upload your backup file back to the VPS

Using WinSCP, upload this file to:

/root/

Example:

/root/openclaw-backup-20260420-042116.tar.gz
#

2. Find the OpenClaw container name

On the VPS:

docker ps

Youโ€™ll get something like:

openclaw-xxxxx-openclaw-1

#

3. Stop the OpenClaw container

Replace the name with your real one:

docker stop YOUR_OPENCLAW_CONTAINER

4. Extract the backup on the VPS

Example:

tar -xzf /root/openclaw-backup-20260420-042116.tar.gz -C /root/

That should create a folder like:

#
/root/openclaw-backup-20260420-042116

5. Copy the backup back into OpenClawโ€™s state path

Replace the container name:

docker cp /root/openclaw-backup-20260420-042116/. YOUR_OPENCLAW_CONTAINER:/data/.openclaw/

6. Start the container again

#
docker start YOUR_OPENCLAW_CONTAINER

Short version

Restore later =

  1. upload .tar.gz
  2. docker stop
  3. tar -xzf
  4. docker cp ...:/data/.openclaw/
  5. docker start

Important note

#

If the new VPS already has a setup you care about, back that up first before restoring over it.

If you want, next I can give you the same restore steps rewritten as a tiny checklist you can save in Notepad for future use.

versed saddle
#

One more thing.

I wanna add her to another server anf that server got some ppl. They can chat with her by mentioning @ or always what rules I set i up.

Is it possible to make her only accessible by me and only I can mention her and chat and no one can unless I give them permission?

charred shadowBOT
#

Yes, absolutely. Thatโ€™s possible, and itโ€™s a good idea for a shared server.

What you want

  • bot is in the server
  • only you can trigger it
  • other people can see it, but they canโ€™t use it
  • later, you can add specific people one by one

The Discord setup pattern for that

Use a guild allowlist like this:

{
  channels: {
    discord: {
#
      groupPolicy: "allowlist",
      guilds: {
        "SERVER_ID": {
          requireMention: true,
          users: ["YOUR_USER_ID"],
        },
      },
    },
  },
}

What that does

  • groupPolicy: "allowlist" = the server is controlled by allowlists
  • users: ["YOUR_USER_ID"] = only your Discord user ID can trigger the bot there
#
  • requireMention: true = even you still need to @mention it, which is safer in a shared server

If later you want to allow someone else too

Just add their Discord user ID to the same users list.

Example:

users: ["YOUR_USER_ID", "THEIR_USER_ID"]

Short answer

Yes, you can make it so only you can use the bot in that server.
And yes, you can later give permission to specific people one by one.

If you want, send me that new server ID and Iโ€™ll give you the exact sentence/command to set it up so only you can use it.

versed saddle
#

How can I set it up? Need step by step process.

charred shadowBOT
#

Yep, we can do it step by step.

Step 1

Get the new Discord server ID where you want to add the bot.

If you donโ€™t have it yet:

  1. turn on Discord Developer Mode
  2. right-click the server icon
  3. click Copy Server ID

Then paste that server ID here.

After that, Iโ€™ll give you Step 2.

wind notchBOT
versed saddle
#

Server ID: 1396404029680128001

charred shadowBOT
#

Perfect.

Step 2

In your bot chat, send this exact message:

Set up Discord server 1396404029680128001 so only my user ID 1302991150763999302 can use the bot there, and require @mention.

That should configure the new server so:

  • the bot is present there
  • only you can trigger it
  • people must still @mention it

Paste the botโ€™s reply here, and Iโ€™ll give you Step 3.