Back to program

Day 1 – Installation and First Conversation

Installing an AI agent on a VPS, connecting to Telegram, getting acquainted, first conversation. 90 minutes.

Copy this page and send it to your Claude Code or ChatGPT – they will help you complete this day

Contents

Note: technical issues during the stream

There were technical difficulties connecting to VPS via terminal during the live stream. From around minute 55 the content is outdated – watch the video tutorial below instead, it shows the full process without errors.

Timecodes

0:00 Welcome, recording starts
1:47 Day plan: why agents, VPS setup, Telegram
5:00 Who already uses Claude Code (poll)
10:01 Why Claude Code, models, subscriptions
15:01 Skills, ecosystem, use cases
25:03 Telegram as interface, multi-agent setup
30:03 Payment, VPN, connection options
35:04 Buying VPS on Hetzner Cloud
40:05 What is SSH, connecting to server
50:08 SSH keys, terminal connection
55:08 EdgeLab installer, agent setup
1:00:13 Connecting to VPS (technical difficulties)
1:10:14 Creating Telegram bot via BotFather
1:15:14 Anthropic API key
1:20:15 Claude Code authorization
1:25:15 First conversation with the agent
1:35:17 Connecting Telegram Gateway
1:40:19 Gateway works, chatting via Telegram
1:55:19 Connecting second agent (Richard)
2:20:33 Q&A: bypass permissions, settings
2:35:48 Connecting via Cursor (Remote-SSH)
2:58:01 Bypass Permissions, simplified instructions
3:08:12 Cursor installation, final questions
Download stream transcript (MD) Open workshop mindmap Leave feedback

Lesson: how to set up your first agent from scratch

Timecodes

00:00Start. What we will do
01:30Connecting to VPS via SSH
04:50Running the EdgeLab installer
09:20Creating Telegram bot via BotFather
12:00Finding your Telegram ID
14:30Claude Code authorization (OAuth)
20:15First conversation with the agent
25:40Installation check – tests
30:10Skills and Superpowers
38:00Getting acquainted – onboarding and USER.md
44:20Configuring personality – CLAUDE.md
50:00Richard – root agent for repairs
55:30Summary and homework
Download lesson transcript (MD) Open workshop mindmap Leave feedback

1. Introduction and architecture – 10 min

What is an AI agent

An AI agent is not a chat. It is a program that performs actions on its own: writes code, runs commands, creates files, remembers context between sessions.

Regular ChatGPT is a conversationalist. Claude Code is an executor. You say "do it" – it does.

Agent-Native approach: you don't type commands yourself

The previous scenario was "terminal + a couple of long commands". The new one – you talk to Claude through Cursor, and it runs commands on VPS itself. The curl edgelab.su/install | sudo bash command will also be entered not by you, but by the agent.

This is training: by the end of Day 1 you will get used to delegating to the agent instead of typing manually.

Three Claude Code instances on one VPS

By the end of the lesson, three independent Claude Code instances will be running on VPS. One Anthropic Max subscription, three separate OAuth tokens in three ~/.claude/ folders – this is allowed by Anthropic.

┌─────────────────────────────────────────────────────────┐
│ VPS (Ubuntu 22/24)                                       │
│                                                          │
│  user=root                    user=edgelab               │
│  ┌────────────────────┐       ┌─────────────────────┐    │
│  │ Claude Code #1     │       │ Claude Code #2      │    │
│  │ (temporary)        │       │ JARVIS              │    │
│  │                    │       │ ├─ Bot Jarvis       │    │
│  │ only for block 4   │       │ ├─ ~/.claude-lab/   │    │
│  │ – runs installer   │       │ └─ systemd: gateway │    │
│  │   then goes away   │       │ (main agent)        │    │
│  │                    │       └─────────────────────┘    │
│  │                    │       ┌─────────────────────┐    │
│  │                    │       │ Claude Code #3      │    │
│  │                    │       │ RICHARD             │    │
│  │                    │       │ ├─ Bot Richard      │    │
│  │                    │       │ ├─ /opt/richard/    │    │
│  │                    │       │ └─ systemd: richard │    │
│  │                    │       │ (silent, revives    │    │
│  │                    │       │  Jarvis when it     │    │
│  │                    │       │  crashes)           │    │
│  └────────────────────┘       └─────────────────────┘    │
│                                                          │
│  Anthropic Max – one subscription for all three          │
└─────────────────────────────────────────────────────────┘

Why two Telegram bots

  • Jarvis (bot #1) – you communicate with it every day. Voice, text, reminders, skills, onboarding. Has bypassPermissions – can modify files and run commands without confirmation. This is "your Jarvis".
  • Richard (bot #2) – silent 99% of the time. Needed only when Jarvis gateway crashes and stops responding. Then you write to Richard: "Jarvis is silent, check logs and bring it up". Richard lives in a separate process, has its own Telegram bridge, so Jarvis crashing does not affect it. It also has full permissions – it's a backup, not a sandbox.

Why not one bot with two roles: if Jarvis crashes, you can't write "fix yourself" through the same bot – the bot doesn't respond. You need a separate communication channel that can be used at that moment.

What we will have by end of day

  • VPS with working Jarvis – voice, text, 10 skills + Superpowers
  • Richard – backup on a neighboring process
  • Two bots in Telegram, both responding
  • Jarvis knows who you are (completed /onboarding) and how to communicate with you
  • Cursor on your laptop, connected to VPS – this is how you will work going forward

Readiness check

  • VPS with Ubuntu 22 or 24 (from Day 0), root password or SSH key
  • Cursor (or VSCode) on your laptop – both free for our scenario
  • VPN with a European IP – for Anthropic OAuth
  • Gmail account for signing into Anthropic
  • Anthropic Max or Pro subscription – registered on the same Gmail
  • Telegram on your phone – to create bots via @BotFather and get your ID

Which Gmail to use

  1. Already have an Anthropic account (you've used Claude before) use it.
  2. No Anthropic account, but have a main Gmail register Claude on it.
  3. No Gmail create a new one (you can buy a ready-made one) and register Claude on it.

Important: subscribe to Anthropic Max or Pro BEFORE starting the workshop. Without a subscription, Claude Code will not work, and you will get stuck at the OAuth step.

2. Cursor + Remote-SSH as root – 15 min

Goal: install Cursor, connect to your VPS as root directly from Cursor. After this, all work happens in one window – terminal, files, Claude.

Step 1. Install Cursor (or VSCode)

Cursor is a VSCode fork with built-in AI. We use it as an editor + terminal + Remote-SSH. Cursor's AI features are not needed on VPS – Claude Code runs there.

Commands below are for Cursor; VSCode works the same way.

Step 2. Install Remote-SSH extension

Open Cursor → sidebar "Extensions" (Ctrl/Cmd+Shift+X) → search "Remote - SSH" (by Microsoft) → Install.

Step 3. Generate SSH key (if you don't have one)

?What is an SSH key and why you need it

SSH key is a pair of two files: private (secret, stays on your machine) and public (placed on VPS). The server authenticates by matching the pair – no password needed.

Private (id_ed25519) – never share. Public (id_ed25519.pub) – open, copied to servers.

Open Cursor's built-in terminal (Ctrl/Cmd+`) and run on your laptop:

ssh-keygen -t ed25519 -C "your_email@example.com"

Press Enter for all prompts. Key appears in ~/.ssh/id_ed25519 and ~/.ssh/id_ed25519.pub. On Windows – PowerShell, same command.

View public key:

# macOS / Linux
cat ~/.ssh/id_ed25519.pub

# Windows PowerShell
Get-Content $HOME\.ssh\id_ed25519.pub

Step 4. Place public key on VPS

Two methods – pick one.

Method A (recommended): via hosting panel. In Timeweb / VDSina / Hetzner / DigitalOcean / AdminVPS there's an "SSH key" field when creating a VPS – paste id_ed25519.pub contents there.

Method B: to an existing VPS via password.

ssh-copy-id root@YOUR_VPS_IP

Replace YOUR_VPS_IP with your real IP. The command will ask for root password once.

Step 5. Connect to VPS via Cursor Remote-SSH

  1. In Cursor press F1 (or Ctrl/Cmd+Shift+P) – command palette opens
  2. Type "Remote-SSH: Connect to Host..." and select it
  3. Select "+ Add New SSH Host..."
  4. Enter: ssh root@YOUR_VPS_IP
  5. Select config file (usually ~/.ssh/config)
  6. F1 again → "Remote-SSH: Connect to Host..." → select your server
  7. New Cursor window opens, blue indicator "SSH: root@..." at bottom left

Open the built-in terminal (Ctrl/Cmd+`) – you're on the VPS as root. Verify:

whoami       # expected: root
hostname     # should show VPS name
echo $HOME   # expected: /root

From this point on, everything you do in Cursor's terminal happens on the VPS as root. This is your workspace for the rest of Day 1.

Can't connect? Copy and paste into your Claude

If SSH is not connecting, copy the prompt below and send it to Claude Code or ChatGPT – it will help you figure it out.

Help me connect to VPS via SSH through Cursor (Remote-SSH).

My details:
- VPS IP: [INSERT YOUR VPS IP]
- VPS OS: Ubuntu (22.04 or 24.04)
- My computer: [macOS / Windows / Linux]
- Connecting as: root

What I have already done:
1. Installed Cursor (or VSCode)
2. Installed the Remote-SSH extension
3. [Describe what you did and where you got stuck]

Error:
[Paste error text, if any]

Help me step by step:
1. Check if I have an SSH key (~/.ssh/id_ed25519 or id_rsa)
2. If not – help me generate one
3. Help me copy the key to VPS
4. Check that the connection works (ssh root@IP)
5. Help me set up Remote-SSH in Cursor – config file, connection
6. If there is an error – explain the cause and how to fix it

Test: connection works

Check all three conditions in Cursor terminal:

whoami && hostname && cat /etc/os-release | grep PRETTY_NAME

Expected: root, VPS name, Ubuntu 22.04 or 24.04.

3. Claude Code under root – temporary – 10 min

This Claude Code instance is temporary. We install it under root so it can run the installer in the next block. After the installer, it's no longer needed – everything important will be under the edgelab user. Don't configure it deeply – it's a utility.

Step 1. Install Claude Code

In Cursor terminal (you're under root, verified in block 2):

curl -fsSL https://claude.ai/install.sh | bash
export PATH="$HOME/.local/bin:$PATH"
echo 'export PATH="$HOME/.local/bin:$PATH"' >> ~/.bashrc
claude --version

claude --version should show a version number (e.g. 2.1.114). Binary is installed at /root/.local/bin/claude.

Step 2. Authorization – claude login

claude login

5 OAuth steps

  1. Menu with 3 options – select the first: "Subscription (Claude Max, Pro)". Do NOT select "Console" or "3rd-party".
  2. Terminal prints a long URL and Paste code here if prompted >. Copy the URL, open in browser via VPN, sign in with your Gmail (the one with Max subscription). Browser shows an authorization code.
  3. Copy the code from browser and paste back into Cursor terminal. Press Enter.
  4. Security notes – terminal prints security rules, press Enter.
  5. You'll enter Claude Code chat (prompt appears). Authorization complete. To exit – type /exit or press Ctrl+C.

Token is saved at /root/.claude/.credentials.json.

Common mistake: students type login or /login inside Claude chat – this is NOT needed, you're already authorized. Just type /exit.

Step 3. Verify root-Claude works

In terminal (not inside chat, but in regular shell):

claude --version && ls -la /root/.claude/.credentials.json

Version should be visible, .credentials.json file should exist.

Test: root-Claude is ready

Launch claude and ask it:

What user are you running as? Run whoami and echo $HOME. It should be root – if not, I made a mistake, warn me.

Expected: agent shows root and /root. If not – go back to block 2, check Remote-SSH session.

4. root-Claude runs the installer – 20 min

The most interesting part. You don't type a single long command – you delegate to root-Claude, it runs the installer, answers its questions, checks the result.

Step 1. Launch root-Claude in bypass mode

Under root, the regular --dangerously-skip-permissions doesn't work (it's intentionally blocked by Anthropic). But Claude Code can still execute commands – it will just ask for confirmation. For our scenario this is enough: you confirm with one or two Enter presses.

Run:

cd /root && claude

Step 2. Give the agent a task – EdgeLab installer

Send a message to Claude chat (copy the entire block):

Copy and paste into your Claude

You are root-Claude, a temporary agent on this VPS. One task: run
the official EdgeLab installer and make sure it completed successfully.

Command:
  curl -fsSL https://edgelab.su/install | sudo bash

The installer is idempotent, you can rerun it without worry.

During the process it will ask:
- agent name – I will tell you below
- agent role – I will tell you below
- my name (how to address me)
- timezone in IANA format (e.g. Europe/Moscow)
- communication language (English)
- Telegram bot token for Jarvis – press Enter (we will add it in the next block)
- My Telegram user id – press Enter
- Groq API key (for voice) – press Enter

Verify at the end:
1. User edgelab created: id edgelab
2. Node 22 and Python 3.12+ installed
3. Jarvis gateway installed (claude-gateway.service): systemctl status claude-gateway
4. Richard bridge installed (claude-richard.service): systemctl status claude-richard
5. Workspace created: ls /home/edgelab/.claude-lab/
6. Sudoers file exists: ls /etc/sudoers.d/edgelab-agents
7. Claude under edgelab is NOT logged in yet – this is normal, we will log in next
8. Show the installer's final banner.

Agent name: Jarvis
Role: personal AI assistant
My name: [ENTER YOUR NAME HERE]
Timezone: [E.G. Europe/Moscow]
Language: English

If you see an error – show it and explain how to fix it.

If the command hangs on "Connection timed out"

Some Russian ISPs block the IP of the server hosting the edgelab.su/install redirect. In that case ask root-Claude to use the direct GitHub URL – it serves the same installer:

curl -fsSL https://raw.githubusercontent.com/qwwiwi/edgelab-install/main/install.sh | sudo bash

If this URL is also unreachable – enable VPN and retry.

Claude will execute curl ... | sudo bash, the installer will start. Claude will confirm steps – sometimes it will stop and ask "allow?" – answer y or "yes". This is normal Claude Code protection under root.

What the installer will do (you don't need to memorize this)

  • Update the system, install base packages
  • Create system user edgelab with home /home/edgelab
  • Install Node.js 22 and Python 3.12+ globally
  • Install claude at /home/edgelab/.local/bin/claude (this is Claude Code for Jarvis and Richard)
  • Deploy Jarvis workspace: /home/edgelab/.claude-lab/jarvis/ (CLAUDE.md, USER.md, skills, memory)
  • Install Jarvis Telegram gateway from qwwiwi/jarvis-telegram-gateway
  • Install Richard bridge from RichardAtCT/claude-code-telegram at /opt/richard/
  • Create two systemd services: claude-gateway (Jarvis) and claude-richard (Richard)
  • Set up passwordless sudo for both agents in /etc/sudoers.d/edgelab-agents – narrow set: systemctl, journalctl, apt for required services
  • Configure 10 base skills + Superpowers plugin
  • Show the final banner with two tasks for the next block: create Jarvis bot, create Richard bot, pass tokens to the agent

Semantic memory (OpenViking / Cognee) is configured on Day 2. Today – only Jarvis and Richard.

What if the installer failed

Most likely root-Claude will show the error and suggest restarting. If it's silent – write to it:

Show the last 50 lines of journalctl -u claude-gateway and journalctl -u claude-richard. If the installer crashed – rerun curl -fsSL https://edgelab.su/install | sudo bash and continue from where it stopped.

Test: installer completed

Ask root-Claude:

Check everything the installer should have done. Format – table:

[Check | Command | Expected | Actual | OK/FAIL]

1. User edgelab exists – id edgelab – uid>=1000
2. Node.js 22+ – node -v – v22.x
3. Python 3.12+ – python3 --version – 3.12 or higher
4. claude for edgelab – sudo -u edgelab bash -lc 'which claude' – /home/edgelab/.local/bin/claude
5. Workspace Jarvis – ls /home/edgelab/.claude-lab/jarvis/.claude/ – CLAUDE.md, USER.md, skills/
6. Jarvis service – systemctl is-active claude-gateway – active
7. Richard service – systemctl is-active claude-richard – active
8. Sudoers – ls -la /etc/sudoers.d/edgelab-agents – file exists, permissions 0440
9. Skills – ls /home/edgelab/.claude-lab/jarvis/.claude/skills/ | wc -l – 10
10. Superpowers – ls /home/edgelab/.claude/plugins/superpowers/skills/ | wc -l – about 15

If any item is FAIL – explain what exactly broke and how to fix it.

Expected result: all 10 items OK. Bots haven't started yet (no tokens) – this is normal, we'll fix it in the next block.

5. Two Telegram bots + OAuth for Jarvis – 15 min

The installer has set up two services, but they don't start – no tokens and Claude is not logged in under edgelab. Let's fix it.

Step 1. Create two bots in @BotFather

Open Telegram → find @BotFather → and create two different bots, one for each agent.

Bot #1 – Jarvis (your main one):

  1. Send /newbot
  2. Bot name (display name): for example "Jarvis" or "My AI Agent"
  3. Username: must end with bot, for example my_jarvis_agent_bot
  4. Copy the Jarvis token – a string like 7123456789:AAHx...

Bot #2 – Richard (backup):

  1. Again /newbot
  2. Name: for example "Richard" or "My Server Doctor"
  3. Username: for example my_richard_doctor_bot
  4. Copy the Richard token

Step 2. Find your Telegram ID

  1. Find @userinfobot in Telegram
  2. Send it any message
  3. It will reply with your ID – a number like 164795011

Step 3. Give root-Claude three values and let it configure both

Return to Cursor → same chat with root-Claude (or launch claude again) → send:

Copy and paste into your Claude

Configure both Telegram bots: Jarvis (main) and Richard (backup).

Jarvis bot token:      [INSERT JARVIS TOKEN]
Richard bot token:     [INSERT RICHARD TOKEN]
My Telegram user_id:   [INSERT ID]

What needs to be done:
1. Jarvis gateway:
   - Set bot_token and allowed_user_ids=[id] in /home/edgelab/claude-gateway/config.json
   - Change file owner to edgelab:edgelab
   - Restart: systemctl restart claude-gateway
   - Show journalctl -u claude-gateway -n 30 – make sure there are no errors

2. Richard bridge:
   - Set TELEGRAM_BOT_TOKEN and ALLOWED_USERS=id in /opt/richard/.env
   - Change owner to edgelab:edgelab
   - Restart: systemctl restart claude-richard
   - Show journalctl -u claude-richard -n 30

3. Check tokens via Telegram API (without revealing them back to me, only first 10 characters):
   curl -s https://api.telegram.org/botTOKEN/getMe | jq .result.username
   – for both

After everything, write a summary: both services active, both getMe returned username.

root-Claude will enter tokens into configs. Files are owned by edgelab:edgelab – this is important, otherwise services won't read them.

Step 4. OAuth #2 – claude login under edgelab

Now – log into Claude Code under the edgelab user. This serves Jarvis and Richard (they both run under edgelab, sharing one OAuth token in /home/edgelab/.claude/). The command opens an interactive chat, so run it in a separate Cursor terminal – not through root-Claude:

sudo -u edgelab -i bash -lc 'claude login'

Complete OAuth the same way as in block 3 (menu → URL → code → security notes → /exit). Same Max subscription, but a separate token for user edgelab.

After exiting the chat – restart both services to pick up the token:

systemctl restart claude-gateway claude-richard
systemctl status claude-gateway claude-richard --no-pager

Step 5. Check: both bots respond

Open your Jarvis bot in Telegram, send any message, for example "Hello". It should respond. Then open the Richard bot, send "/start" or "connection check" – it should also respond.

If one is silent – return to Cursor and ask root-Claude:

Jarvis [or Richard] is not responding in Telegram. Show journalctl -u claude-gateway -n 50 [or -u claude-richard], find the error, fix it and restart. Check the token via api.telegram.org/getMe.

Test: both agents online

Ask root-Claude:

Final check of both agents. Format – table [Component | Status | Details]:

1. Jarvis service active – systemctl is-active claude-gateway
2. Richard service active – systemctl is-active claude-richard
3. Jarvis token works – curl getMe username
4. Richard token works – curl getMe username
5. OAuth under edgelab – sudo -u edgelab test -f /home/edgelab/.claude/.credentials.json
6. Passwordless sudo for edgelab – sudo -u edgelab sudo -n systemctl is-active claude-gateway (should work without password)
7. Jarvis config file permissions – stat -c '%U:%G %a' /home/edgelab/claude-gateway/config.json (edgelab:edgelab, 600)
8. Richard .env file permissions – stat -c '%U:%G %a' /opt/richard/.env (edgelab:edgelab, 600)

At the end – verdict: READY / NOT READY.

Expected: all 8 items OK. Both bots respond in Telegram.

6. First conversation with Jarvis – 15 min

From this point on, Cursor and root-Claude are not needed. Communicate with Jarvis through its Telegram bot – voice or text. Keep Cursor open just in case.

Step 1. Introduce yourself

Open the Jarvis bot in Telegram and send a voice message:

Copy and send to Jarvis

Hi, my name is [your name], I am a [your occupation / what you do]. I want you to help me with [what exactly]. Start the onboarding.

What will happen

  • Jarvis will launch the onboarding skill – it will ask clarifying questions
  • You answer with voice, the self-compiler skill works in the background and updates USER.md and CLAUDE.md
  • Jarvis will remember your name, communication style, goals

Talk with it for 5-10 minutes. Tell it what you do, what tasks you solve, how you want it to communicate (formal/informal, brief/detailed, with emoji/without).

Step 2. Ask what it can already do

Send (text or voice):

List what skills you have out of the box. For each one – one line: what it does and when it activates.

Jarvis will read its SKILL.md files and show the list. Pre-installed:

Skill What it does When it activates
onboardingStep-by-step setup wizardFirst conversation
self-compilerLearns from your conversations, updates CLAUDE.mdIn background, always
groq-voiceVoice message transcriptionOn voice message
presentBeautiful HTML documentsOn "make a presentation" command
markdown-newExtracts web pages into clean MarkdownWhen linking to an article
quick-remindersReminders up to 48 hours"Remind me in 2 hours"
perplexity-researchReal-time web research"Google it", "find"
datawrapperCharts and tablesWhen visualizing data
excalidrawDiagrams and schemasWhen creating diagrams
youtube-transcriptVideo transcriptionWhen linking to YouTube

Plus the Superpowers plugin works automatically – 15 capabilities on top of these skills (task-tracking, TDD, subagents, brainstorming). Activates by itself, nothing to do.

Step 3. Reminder – quick skill test

Remind me in 1 minute to check Jarvis

In one minute you'll get a message "check Jarvis". This works via cron – no token costs.

Step 4. External skill – skill-finder

Ask Jarvis to install a public skill – this is a basic capability, needed all week:

Install the skill-finder skill from https://github.com/qwwiwi/skill-finder into my skills directory. Then find me a skill for Google Docs.

skills.sh is a skill marketplace with 100,000+ skills that skill-finder uses as a source. On Day 2 you'll install skills for your tasks.

Test: Jarvis knows you and what it can do

Send to Jarvis:

Brief report on the onboarding results:

1. Show my profile from USER.md (name, what I do, goals)
2. What communication style I requested – formal/informal, brief/detailed, emoji yes/no
3. List the skills you have installed (how many)
4. Name the plugin that works on top of them

If USER.md is empty, style is not set, or there are fewer than 10 skills – say what exactly needs to be finished.

Expected result: USER.md is filled, style is defined, 10 base skills + Superpowers.

7. When to call Richard + summary – 5 min

Richard – your backup

On a normal day you don't write to Richard. It lives, consumes tokens only when you write to it. You write to it in two cases:

  1. Jarvis is silent / doesn't respond in Telegram. This means the Jarvis gateway crashed (or OAuth expired, or Telegram token was revoked). Jarvis physically cannot respond "fix yourself" – the bot itself is dead. Then you write to Richard.
  2. Jarvis responds with nonsense after an update or config change. Richard is the same Claude Code, same access, but in a separate process. It can diagnose Jarvis without being it.

Typical requests to Richard

Jarvis is silent. Show the last 50 lines of journalctl -u claude-gateway. If you see an obvious error – fix it and restart the service.
Check /home/edgelab/.claude/.credentials.json – is the OAuth token still valid. If it has expired – tell me how to re-login Jarvis.
Jarvis is running out of disk space. Show df -h, du -sh in ~/.cache and ~/.claude-lab/jarvis/logs/, suggest what to clean up.

Richard can do everything Jarvis can: read files, edit configs, run systemctl, journalctl, apt via passwordless sudo from /etc/sudoers.d/edgelab-agents. Their permissions are identical – only the process and Telegram bot differ.

Day 1 Checklist

  • Cursor connects to VPS as root via Remote-SSH
  • root-Claude installed and authorized (OAuth #1)
  • EdgeLab installer completed – user edgelab created, both agents installed
  • Jarvis gateway active, Jarvis Telegram bot responds
  • Richard bridge active, Richard Telegram bot responds
  • Claude under edgelab authorized (OAuth #2)
  • Passwordless sudo configured for both agents
  • Jarvis knows who you are (USER.md filled via /onboarding)
  • 10 base skills + Superpowers in place
  • skill-finder installed

Final self-diagnostics

Ask Jarvis (your main agent, in its Telegram bot):

Copy and send to Jarvis

Full Day 1 self-diagnostics. Format – table [Component | Status | Details]:

1. I (Jarvis) am running as edgelab – whoami should be edgelab
2. Richard is alive – systemctl is-active claude-richard
3. I (gateway) am alive – systemctl is-active claude-gateway
4. OAuth edgelab – ls /home/edgelab/.claude/.credentials.json
5. CLAUDE.md and USER.md in ~/.claude-lab/jarvis/.claude/
6. 10 base skills + 1 skill-finder = 11 in skills/
7. Superpowers – ls ~/.claude/plugins/superpowers/skills/ | wc -l – about 15
8. Passwordless sudo works – sudo -n systemctl is-active claude-gateway without password
9. Memory rotation cron – crontab -u edgelab -l
10. Telegram API available – curl -s api.telegram.org | head -c 50
11. CLAUDE.md check – download reference from https://github.com/qwwiwi/edgelab-claude-md (templates/global-claude.md and templates/workspace-claude.md), compare with your ~/.claude/CLAUDE.md and ~/.claude-lab/jarvis/.claude/CLAUDE.md. Show differences.
12. Architecture check – download reference from https://github.com/qwwiwi/public-architecture-claude-code, compare ~/.claude-lab/jarvis/ folder structure with the reference. Show which files/folders are missing.
13. Jarvis gateway check – download https://github.com/qwwiwi/jarvis-telegram-gateway, compare with ~/claude-gateway/. Verify: config.json is filled (bot_token, user_id are not empty), gateway.py is up to date, systemd unit claude-gateway is active. Show differences.

At the end – overall verdict: READY FOR DAY 2 / NOT READY. If not ready – list what needs to be fixed.

Copy and send to Richard

Copy the prompt below and send it to Richard in its Telegram bot. Richard runs under user edgelab and has passwordless sudo for system commands – it will fix things. Alternative – send the same prompt to Claude Code in Cursor terminal.

Richard, my self-diagnostics found errors. I need your help.

Diagnostics result:
[paste the table your agent sent here]

Sources of truth (download and compare with what I have on VPS):

- CLAUDE.md (global + agent): https://github.com/qwwiwi/edgelab-claude-md
- Architecture (folders, hooks, settings.json): https://github.com/qwwiwi/public-architecture-claude-code
- Gateway (Jarvis Telegram bot): https://github.com/qwwiwi/jarvis-telegram-gateway

Task:

1) Install skill-finder so I can search for ready-made solutions on skills.sh:
   mkdir -p ~/.claude/skills/skill-finder
   curl -fsSL https://raw.githubusercontent.com/qwwiwi/skill-finder/main/SKILL.md \
     -o ~/.claude/skills/skill-finder/SKILL.md

2) Download all three repositories above and compare with what I have on VPS:

   CLAUDE.md:
   - Compare ~/.claude/CLAUDE.md with the GLOBAL.md template from edgelab-claude-md
   - Compare ~/.claude-lab/<agent-name>/.claude/CLAUDE.md with the WORKSPACE.md template

   Architecture:
   - Compare settings.json, hooks (PreToolUse, PostToolUse, SessionStart)
   - Compare skills in ~/.claude-lab/<agent-name>/.claude/skills/
   - Check FILES-REFERENCE.md and HOOKS.md from public-architecture-claude-code

   Gateway:
   - Compare ~/claude-gateway/ with jarvis-telegram-gateway
   - Check config.json, systemd unit, gateway.py

3) Discrepancies that caused errors from my diagnostics – fix them.
   Do not touch what is working correctly.

4) After fixing, run the self-diagnostics again and send me the result.

Explain as you go what and why you are fixing. If you cannot fix something – describe the problem and suggest what I should do manually.

Homework

  1. Talk with Jarvis for 15 minutes – ask it to do something useful for your work (find information, make a list, build a chart).
  2. Find and install 2-3 skills for your tasks via skill-finder.
  3. Open CLAUDE.md (Jarvis will show it) and fix manually if the response style doesn't quite match yours.
  4. Intentionally stop Jarvis oncesudo systemctl stop claude-gateway – and ask Richard to bring it up. This is practice for the "Jarvis crashed" scenario.

By the evening: two AI agents on VPS, Jarvis knows you and is ready to work, Richard – backup on a neighboring process. Cursor remains your window to the server.

Day 2 preview: the author's method for configuring Jarvis – role, rules, context. Filling CLAUDE.md and USER.md for your tasks, adding semantic memory.