AI Agent Onboarding Guide — FalahOS
Purpose: This document is a full onboarding prompt for any new AI agent (Hermes, Claude Code, OpenCode, Codex, Pi, OpenClaude, etc.) joining the FalahOS infrastructure. It covers everything needed to operate autonomously: where credentials live, how to access infrastructure, what LLM providers are available, Git/Gitea setup, SSH, and key workflows.
Table of Contents
- Infrastructure Overview
- Hermes Agent
- Bitwarden (Password Manager)
- Gitea (Git)
- LLM Providers & API Keys
- SSH Access & Keys
- GitHub Access
- Telegram Bot
- n8n Automation
- Key Files & Locations
- Quick-Start Workflows
1. Infrastructure Overview
Machines
| Host |
IP / Hostname |
Role |
Access |
| MacBook Air (this) |
localhost |
Primary agent host: Hermes, Pi, JCode, CrewAI, Graphify, Fincept |
Direct terminal |
| Mac Mini |
192.168.0.10 |
Odysseus, OpenClaw, HeadlessX, Bridge (port 5001) |
SSH via local |
| MacBook Pro |
192.168.0.27 |
OpenHands, OMP gateway, Bridge (port 5002) |
SSH via local |
| Synology DSM7 |
192.168.0.30 |
OpenClaude Docker (port 4501) |
SSH via local |
| Contabo VPS |
13.140.161.244 |
Swarm leader: Traefik, Mautic, Ghost (~6k subs), Listmonk, Garage S3, Termix |
SSH via SSH key |
| cPanel |
webhosting2018.is.cc |
Legacy hosting: PHP sites, email |
Password auth |
Network Notes
- All machines are on the same local LAN (192.168.0.x)
*.falahos.my wildcard DNS → Contabo VPS 13.140.161.244
- Colima (Docker on Mac) auto-forwards container ports through SSH multiplexer — these bypass macOS Application Firewall
- Mac Mini OpenClaw gateway is loopback-only, port 18789 — needs SSH tunnel to reach from other machines
- Contabo VPS has intermittent SSH timeouts — retry if fails
2. Hermes Agent
Version: v0.20.0 (2026.8.3)
Config: ~/.hermes/config.yaml
Profile: default (at ~/.hermes/)
Default Model
Key Config Sections
- MCP Servers — 15 servers (see
wmj/agent-configs/mcp-integration-guide.md)
- LLM Providers — 26 configured providers
- Custom Provider:
omp at http://192.168.0.27:20128
- Model Aliases:
omp → minimax-m3
- Fallback Chain:
opencode-zen → openai-codex → openrouter → anthropic
Useful Hermes Commands
Telegram Connection
- Bot token:
/tmp/.telegram_token — NEVER put in env vars
- Bot username:
@falahos_bot
3. Bitwarden (Password Manager)
| Property |
Value |
| Server URL |
https://bitwarden.falahos.my |
| Email |
wanjauhari@gmail.com |
| Master Password |
Abedib@99123 |
| CLI Binary |
~/.local/bin/bw |
CLI Usage
What's Stored in Bitwarden
Bitwarden is the canonical source of truth for ALL secrets:
- LLM provider API keys (OpenAI, Anthropic, Google, Alibaba, etc.)
- Server SSH passwords & keys
- Domain registrar credentials
- Email account passwords (SMTP/IMAP)
- CMS admin logins (Ghost, WordPress)
- Social media account credentials
- Cloudflare API tokens
- Payment processor keys (Stripe, Gumroad)
- n8n encryption keys
Rule: NEVER hardcode secrets in config files or scripts. Always fetch from Bitwarden via CLI at startup or session-initialization time.
4. Gitea (Git)
| Property |
Value |
| URL |
https://git.falahos.my |
| Primary Org |
falah-os |
| User |
wmj (admin) |
| Auth Tokens |
Stored in ~/.netrc_quran |
Gitea Tokens (in ~/.netrc_quran)
| Token Username |
Scope |
Use Case |
anyuser |
Pull-only |
Read/clone public repos (agent defaults) |
wmj |
Full access |
Push to repos, PRs, issues (password: Abedib@99) |
falah-os |
Full access |
Org-level pushes |
falah |
Limited |
Specific repo access |
hermes-bot |
Bot operations |
Automated git ops |
Gitea Token Format
The .netrc_quran file contains Gitea tokens as HTTPS URLs:
Use these directly as git remote URLs for push access.
Key Repositories
| Repo |
Description |
falah-os/nur-muslim-companion |
Nur — Muslim Companion PWA (Svelte) — Phase 1 |
falah-os/nur-muslim-companion-v2 |
Nur v2 — expanded features |
wmj/agent-configs |
Agent configs, provider setups, onboarding docs |
wmj/digital-khalifah |
Digital Khalifah content |
wmj/digital-mujtahid |
Digital Mujtahid content |
wmj/digital-waqif |
Digital Waqif content |
wmj/kitab-kuning-covers |
3D book cover assets |
hermes-macbookair/nur-falah |
Nur Falah — Muslim Companion PWA (latest) |
Git Global Config
5. LLM Providers & API Keys
Provider Matrix
| Provider |
Models Available |
How to Access Keys |
| opencode-zen |
deepseek-v4-pro/flash, gpt-5.x, claude-opus-4, gemini-3, qwen-3.7, kimi-k2, minimax-m3 |
Free tier available — no key needed for most models |
| opencode-go |
minimax-m3/m2.7, kimi-k3/k2.7, glm-5.2, deepseek-v4, qwen-3.x, mimo-v2, hy3, gpt-5.6, grok-4.5 |
Free tier |
| alibaba |
qwen-3.x family, deepseek-v4, kimi-k2.5, glm-5, minimax-m2.5 |
API key in Bitwarden |
| copilot |
gpt-5.x, claude-sonnet-4.6/5, gemini-3.x |
Key in Bitwarden |
| openai-api |
gpt-5.6 sol/terra/luna, gpt-5.5/5.4, gpt-5-codex |
Key in Bitwarden |
| openai-codex |
gpt-5.6, gpt-5.5, gpt-5.4-mini, gpt-5.3-codex |
Key in Bitwarden |
| anthropic |
claude-fable-5, claude-sonnet-5, claude-opus-4.x, claude-haiku |
Key in Bitwarden |
| gemini |
gemini-3.5-flash, gemini-2.5-pro, gemini-3.x |
Key in Bitwarden |
| openrouter |
deepseek, claude, openai, google (fallback) |
Key in config (empty) |
Default Fallback Chain
Adding a New LLM Key
- Open Hermes config
~/.hermes/config.yaml
- Find the provider section (e.g.,
openai:, anthropic:)
- Set the API key — either directly in config or via env var
- Verify with
hermes model list
Key storage policy:
- Keys go in Bitwarden as the canonical source
- For Hermes config, prefer env vars over inline (but the config supports inline for active providers)
- The
api_key: '' entries in config mean the key comes from env or is unused
6. SSH Access & Keys
SSH Key Pair
| Key |
Path |
Purpose |
| ED25519 |
~/.ssh/id_ed25519 (public: ~/.ssh/id_ed25519.pub) |
Primary auth key for all servers |
| RSA |
~/.ssh/id_rsa |
Fallback/compatibility |
Hosts Accessed via SSH
| Host |
User |
Auth Method |
Notes |
13.140.161.244 (Contabo VPS) |
root |
SSH key + password (in Bitwarden) |
Intermittent timeouts — retry |
192.168.0.10 (Mac Mini) |
wanjauhari24 or delegated |
SSH key |
LAN |
192.168.0.27 (MacBook Pro) |
wanjauhari24 or system user |
SSH key |
LAN |
192.168.0.30 (Synology DSM7) |
Admin user |
SSH key |
LAN; Docker containers via SSH then docker exec |
colima (via ~/.colima/ssh_config) |
Lima VM user |
SSH key via ssh -F ~/.colima/ssh_config colima |
Colima Docker VM |
Colima SSH
Contabo VPS (Troubleshooting)
- Connection timeouts are common — retry 2-3 times with
-o ConnectTimeout=10
- The VPS runs: Docker Swarm (Traefik, Mautic, Ghost, Listmonk, Garage S3)
- Termix web terminal at
termix.falahos.my (user: falahosadmin / pass: FalahOSAdmin2026)
7. GitHub Access
GitHub CLI (gh)
GitHub auth is handled via the gh CLI credential helper registered in ~/.gitconfig:
Note: GitHub access is primarily read-only for FalahOS. All active development repos are on self-hosted Gitea (git.falahos.my).
8. Telegram Bot
| Property |
Value |
| Bot Token Location |
/tmp/.telegram_token (file) |
| Bot Username |
@falahos_bot |
| Token Value |
Read from file: cat /tmp/.telegram_token |
Rules
- NEVER put the bot token in environment variables or shell history
- Read it from
/tmp/.telegram_token when needed
- The token starts with
8750645268:
Using the Bot API
9. n8n Automation
| Property |
Value |
| URL |
http://13.140.161.244:5678 |
| Encryption Key |
falahos-n8n-key-2026 |
Notes
- Self-hosted n8n on Contabo VPS (Docker)
- Used for automation workflows, not for Publora or Composio (those are direct)
- Warm up before broadcast — first request may be slow
10. Key Files & Locations
| File |
Purpose |
~/.hermes/config.yaml |
Main Hermes agent configuration |
~/.netrc_quran |
Gitea tokens (HTTPS URLs with credentials) |
~/.ssh/id_ed25519 |
SSH private key |
~/.ssh/config |
SSH config (includes colima) |
~/.gitconfig |
Git user config + credential helpers |
~/.hermes/skills/ |
All available skills (loaded per-session) |
~/.hermes/cron/ |
Scheduled cron jobs |
~/.hermes/plans/ |
Saved plans |
/tmp/.telegram_token |
Telegram bot token |
~/.openclaw/openclaw.json |
OpenClaw gateway config (port 18789, token inside) |
~/.local/bin/bw |
Bitwarden CLI |
11. Quick-Start Workflows
🆕 First-Time Setup Checklist
🔍 Finding Credentials
When you need a credential:
- Check memory first (if previously saved)
- Check Bitwarden via CLI:
bw list items --search "keyword"
- Check config files in
~/.hermes/, ~/.ssh/, ~/.netrc*
- Check
/tmp/ for transient secrets
- Ask the user as last resort
🚀 Preferred Model Routing
| Task |
Recommended Model / Provider |
| General chat, quick tasks |
deepseek-v4-flash (opencode-zen) |
| Complex coding |
gpt-5.3-codex (openai-codex) or claude-sonnet-5 (anthropic) |
| Heavy reasoning |
deepseek-v4-pro (opencode-zen) |
| Content creation |
gpt-5.5 or gpt-5.6-terra (openai-api) |
| Free / experimental |
Free-tier models on opencode-zen: deepseek-v4-flash-free, mimo-v2.5-free |
| Cheap inference |
qwen3.6-flash or gemini-3.5-flash |
| Vision tasks |
qwen-vl-max, gemini-3.5-flash |
| Image generation |
qwen-image-3.0-pro (alibaba) |
🐛 Common Issues & Fixes
| Issue |
Fix |
hermes mcp test fails |
Known bug — use hermes mcp list + curl instead |
| Gitea API times out |
API often slow; use git clone directly instead |
| Contabo SSH timeout |
Retry 2-3x with short timeout; check termix.falahos.my |
| Bitwarden locked |
bw unlock --passwordenv BW_PASSWORD or prompt user |
| APFS dataless purge (scripts vanish) |
Check ls -lO for 'dataless' flag; restore from session history |
Infrastructure Quick Reference
Remember: When in doubt about a credential, ask the user. Better to ask than to guess wrong and break something.