Field SOP
Field SOP

Octop Self-Hosted AI Assistant Deployment SOP

A hands-on SOP for deploying Octop: it starts with a decision framework on whether to self-host at all, then walks four install paths (one-line script, Windows PowerShell, Docker Compose, and the Tencent Cloud Lighthouse or CVM official image marketplace), runs octop init and octop run verbatim from the official README (default port 8088), changes default credentials on first login (the README hardcodes none, third-party reviews report admin/octop, and Docker init generates a random one), then configures models (OpenAI-compatible, Ollama, nearly 20 providers), experts with MBTI personas, connectors (Tencent Docs, OAuth, MCP) and IM channels, and closes with Docker Compose and PostgreSQL productionization plus a six-item pitfall table and a ten-item pre-launch checklist.

Published September 17, 20268 min read
<!-- octop-deploy-sop | sop | Octop Self-Hosted AI Assistant Deployment SOP -->

Tencent Cloud released Octop 1.0 GA on 2026-09-17, an open-source, self-hosted, multi-user AI assistant (source: official WeChat account; GitHub TencentCloud/Octop, Python, MIT, 3,198 stars measured on release day). It packs a web console, a CLI, IM channels, and cron automation into one process; all state lives under ~/.octop/, with SQLite as the default control-plane database (PostgreSQL optional). This is a no-hype, hands-on SOP that walks the deployment steps from "should I self-host at all" to a pre-launch checklist. Every install command, config path, and default port is quoted verbatim from the official README. For the backstory of this GA release, see the Octop 1.0 GA launch hotspot.

Should you self-host

Start with a decision, then touch the keyboard. Octop fits three profiles. Profile one: data-sensitive users who want chats, workspaces, and credentials on their own machine, local-first and offline-capable, with PII redacted before it leaves. Profile two: families sharing one admin account while each member keeps an independent memory, workspace, and expert config. Profile three: solo founders or small teams willing to run a server in exchange for control, offline access, and auditability. It is not for people who just want AI without ops; if port forwarding already annoys you, a cloud assistant is the calmer choice.

The only test that matters: are you willing to pay the ops cost for data in your own hands? If yes, keep reading. If no, close this and use a SaaS. If you are still torn between self-hosting and cloud, read the self-hosted AI assistant comparison review first and price the cost. Remember Octop is single-process: the web console, CLI, IM channels, and cron all run in one process, and on restart it rebuilds all state from the control-plane database. That is convenient, but it also means the availability of this machine is the availability of the service.

Install path choice (table 1: method comparison)

README offers four install methods for different audiences and hardware. Verdict first: for long-running, multi-user production, go straight to Docker Compose; for a quick local try, the one-line script on macOS or Linux is the least friction; Windows users take the PowerShell script; domestic users who hate the command line get the smoothest path from the Tencent Cloud Lighthouse and CVM marketplace images that went live on GA day (source: official WeChat account, one-command deploy).

MethodPlatformFor whomMinimum hardware
One-line script (curl pipe)macOS / LinuxDevelopers, quick tryModern multi-core CPU, a few GB RAM for process plus model and embedding caches; installer uses uv to build an isolated Python 3.12+ venv under ~/.octop/, no system Python required
Windows PowerShell scriptWindows 10 / 11Windows usersSame as above; installer also builds an isolated uv venv
Docker ComposeAny (production recommended)Long-running, multi-userSame as above; containerized for easy backup and upgrade, data mounted to ~/.octop or OCTOP_DATA
Tencent Cloud Lighthouse / CVM imageDomestic users (new GA channel)Want one-command deploy, no CLIFollow the image marketplace instance spec (source: official WeChat account, live on GA day)

On macOS and Linux the recommended installer is one line, copied verbatim from the README:

bash
curl -fsSL https://finnie-1258344699.cos.ap-guangzhou.myqcloud.com/octop/install.sh | bash

Windows uses the PowerShell one-liner:

powershell
irm https://finnie-1258344699.cos.ap-guangzhou.myqcloud.com/octop/install.ps1 | iex

For production, use Docker Compose, also from the README:

bash
docker compose -f docker/docker-compose.yml up -d

After install on macOS or Linux, open a new terminal or reload the shell so ~/.octop/bin enters the PATH:

bash
source ~/.zshrc   # Zsh
# or
source ~/.bashrc  # Bash

README also ships optional extras such as browser automation (Playwright Chromium) and the Feishu channel, enabled with a --extras flag; details follow the README scripts notes. On hardware floors, README's wording is "a modern multi-core CPU, a few GB of RAM for the process plus model or embedding caches, enough disk for the database, agent workspaces, and document corpora". It does not pin a core count, so do not run production on a Raspberry Pi.

Initialize: octop init and octop run

The first step after install is init, which builds the database, the JWT secret, and the first admin, all under ~/.octop/:

bash
octop init

README calls this an interactive wizard that creates the SQLite database, JWT secret, and first admin account. Next, start it to bring up the API and web console in the foreground:

bash
# Foreground (API + web console)
octop run

# Custom host / port
octop run --host 0.0.0.0 --port 8088

# Register as a system service (systemd / launchd / Windows service)
octop service start

After start, open http://127.0.0.1:8088. The default port is 8088, written in the README; do not misremember it as something else. With Docker, the first init generates a random admin password written to /data/.octop/credential.txt unless you set OCTOP_DEFAULT_PASSWORD; the interactive octop init or setup wizard asks you to pick a password of at least 8 characters with letters and digits.

Want API docs? README is explicit: /api/docs is off by default and only turns on when you set enable_api_docs to true in config.json. Leaving it off is the right default; do not expose it to the public net just for debugging.

First security hardening

This is where most people crash. The default admin account is admin; the README does not hardcode a default password, third-party reviews report octop, and a Docker first init generates a random password written to credential.txt. Whichever default you get, change it on first login without exception. Exposing admin / octop to the public internet is leaving the door open for scanners. Octop's password policy requires at least 8 characters with both letters and digits; weak or common passwords are rejected and fall back to a random one.

Hardening is more than a password:

  • Tool approval and shell guardrails: risky tools and shell commands need explicit approval; guardrail rules are editable under ~/.octop/security/tool_guard/. In production, turn this on so the AI never runs rm -rf on your behalf.
  • PII redaction: sensitive data is redacted before it leaves the workspace; this is part of the local-first design, so confirm it is on.
  • Surface reduction: if you only use it on your own machine, octop run --host 127.0.0.1 is enough; do not bind 0.0.0.0 and run naked on the public net just for convenience. To expose it, put a reverse proxy with TLS in front; never serve plaintext HTTP to the public.
  • Multi-user isolation: the admin creates member accounts with JWT isolation, each having independent memory, workspace, and expert config. Do not share the admin account across the family out of laziness.

Security is a selling point of Octop (local-first and offline, tool approval, shell guardrails, PII redaction), but selling points do not turn themselves on; you have to flip the switches.

Connect models

Octop supports OpenAI-compatible endpoints, DashScope (Qwen), Ollama local models, and other presets; README's wording is "nearly 20 vendors". Two ways to configure: per agent in the web console, or via CLI. First inspect what is supported:

bash
# LLM providers and models
octop models
octop provider list

For Ollama local models: start the service on the Ollama side and point Octop's provider config at its address; the exact field names are not listed line by line in the README, so follow the official docs. OpenAI-compatible endpoints work by filling base_url and key, which makes it easy to plug into any compatible gateway. The key point is per-agent keys with least privilege: do not hand one all-powerful shared key to every agent, because one leak takes down the whole line. README does not spell out each vendor's exact fields, so key and endpoint formats follow the official docs.

Basic model choice: general chat and writing use a general model, code generation uses a code-oriented model, and private data stays local through Ollama without leaving the machine. For wiring Octop into an existing Harness stack, see the Harness tech-stack resource.

Experts, connectors, and IM channels

Octop's differentiation is the expert library and connectors. The expert library is scanned at boot from infra/agents/experts/library/, ships 16 MBTI persona templates, and accepts a custom system prompt; pick an expert or persona per agent so different tasks switch to different "characters". Connectors ride OAuth plus an MCP gateway and cover Tencent Docs, Tencent Cloud OpenAPI, and news hot search, extending the resource boundary outward.

IM channels let Octop work inside group chats. Supported channels and credentials (from README):

ChannelCredentials
FeishuApp ID, App Secret
DingTalkApp Key, App Secret
QQBot AppID, Token
DiscordBot Token
WeComCorp ID, Agent Secret
Web consoleEnabled by default

Install and list channels via CLI:

bash
# List IM channels
octop channel list

# Install a channel
octop channel install

The most common IM pitfall is the callback config: channels that need a public callback, such as Feishu and WeCom, require you to check the App Secret, callback URL, and egress IP; miss one and you receive nothing. QQ and Discord are simpler, just fill the token. How to write MCP extensions and how to authorize connector OAuth are not given verbatim in the README, so follow the official docs.

Production and operations

For real production, Docker Compose is the shape README explicitly recommends. All data lives under ~/.octop/, which holds config.json (process config), octop.db (SQLite: users, agents, channels, cron), secrets/ (JWT secret and channel tokens), agents/<agent_id>/ (per-agent workspace), security/tool_guard/ (shell allow or deny rules), logs/, venv/, and bin/octop.

Switch to PostgreSQL: set the database section in config.json, or use OCTOP_DATABASE_* environment variables, or fill it in the first-run wizard. Note README is explicit: with PostgreSQL, agent memory reuses the same DSN by default (a per-agent schema); to keep file-based memory, set "memory": { "backend": { "type": "sqlite" } } in the agent config.

Backup and upgrade:

bash
# Export / restore backups
octop backup

# Upgrade: replaces only the wheel or binary; database, workspaces, secrets, config.json preserved
octop update

octop update replaces only the wheel or binary; the database, workspaces, secrets, and config.json under ~/.octop/ are preserved, and the schema migrates automatically on next boot; run octop init only when the wizard prompts for a migration. Before a cross-version upgrade, always octop backup first. The second table lists the high-frequency pitfalls.

PitSymptomFix
Default or weak credentials (such as admin / octop) scanned on public netChange on first login; policy needs at least 8 chars with letters and digits
Port not hardened8088 naked on public net, no TLSReverse proxy with TLS, or bind to LAN only; use octop run --host 127.0.0.1
SQLite concurrency ceilingLock waits and stalls under concurrent writesSwitch to PostgreSQL via database section in config.json or OCTOP_DATABASE_*
IM callback misconfiguredFeishu / WeCom receive no messagesCheck App Secret, callback URL, egress IP; follow official docs
Model key over-privilegedOne all-powerful key leak takes down allPer-agent keys, least privilege; isolate via octop provider
Workspace migration missedMemory / experts lost after moving machineMove the whole ~/.octop/ tree including secrets and agents; octop backup first

Pre-launch checklist

  • Changed the default admin password (at least 8 chars, letters plus digits)
  • Public exposure behind a TLS reverse proxy, or bound to 127.0.0.1 only
  • Tool approval and shell guardrails on (~/.octop/security/tool_guard/)
  • PII redaction enabled
  • Model keys split per agent with least privilege, no shared all-powerful key
  • Database backend chosen (SQLite single-user / PostgreSQL multi-user)
  • IM channel callbacks and egress allowlist configured
  • First octop backup done, ~/.octop/ archived
  • System service registered (octop service start) or Docker auto-start
  • octop backup before upgrade, then octop update

FAQ

Q1: Should I self-host Octop at all? A1: Self-host if you are data-sensitive, share with family, or run a solo company and accept server ops; use a cloud assistant if you want AI without maintenance. The only test is whether you will pay the ops cost for data in your own hands.

Q2: What is the minimum hardware? A2: README gives no fixed core count, only "a modern multi-core CPU, a few GB of RAM for the process plus model or embedding caches, enough disk for the database, agent workspaces, and document corpora". The installer builds an isolated Python 3.12+ venv under ~/.octop/ via uv, no system Python required. Do not run production on low-end hardware.

Q3: What are the default credentials, and must I change them? A3: Default admin account is admin; the README does not hardcode a default password, third-party reviews report octop, and Docker init generates a random one in credential.txt. Either way, change it on first login without exception. The policy needs at least 8 characters with both letters and digits, and weak passwords are rejected and fall back to random. Leaving it exposed is an open door.

Q4: Is SQLite enough, and when do I move to PostgreSQL? A4: Single user, low frequency, few writers is fine. When concurrent writes stall or lock, move to PostgreSQL by setting the database section in config.json or OCTOP_DATABASE_*. Note that under PostgreSQL, agent memory reuses the same DSN by default; to keep file-based memory, set it separately in the agent config.

Q5: Does upgrade lose data? A5: No. octop update replaces only the wheel or binary; the database, workspaces, secrets, and config.json under ~/.octop/ are preserved, and the schema migrates on next boot. But before a cross-version upgrade, always octop backup first.


References

  • Octop official README (install commands, ports, paths, vendor and channel credentials quoted verbatim): TencentCloud/Octop
  • Octop 1.0 GA and Tencent Cloud Lighthouse / CVM marketplace one-command deploy: Tencent Cloud official WeChat account (2026-09-17)
  • Harness stack (harness-agent / harness-gateway / harness-memory / harness-browser): README related projects section

This article is AI-assisted and human-edited. Last updated: 2026-09-17

FAQ

Should I self-host Octop at all?
Self-host if you are data-sensitive, share with family, or run a solo company and accept server ops; use a cloud assistant if you want AI without maintenance. The only test is whether you will pay the ops cost for data in your own hands.
What is the minimum hardware?
README gives no fixed core count, only "a modern multi-core CPU, a few GB of RAM for the process plus model or embedding caches, enough disk for the database, agent workspaces, and document corpora". The installer builds an isolated Python 3.12+ venv under ~/.octop/ via uv, no system Python required. Do not run production on low-end hardware.
What are the default credentials, and must I change them?
Default admin account is admin; the README does not hardcode a default password, third-party reviews report octop, and Docker init generates a random one in credential.txt. Either way, change it on first login without exception. The policy needs at least 8 characters with both letters and digits, and weak passwords are rejected and fall back to random. Leaving it exposed is an open door.
Is SQLite enough, and when do I move to PostgreSQL?
Single user, low frequency, few writers is fine. When concurrent writes stall or lock, move to PostgreSQL by setting the database section in config.json or OCTOP_DATABASE_*. Note that under PostgreSQL, agent memory reuses the same DSN by default; to keep file-based memory, set it separately in the agent config.
Does upgrade lose data?
No. octop update replaces only the wheel or binary; the database, workspaces, secrets, and config.json under ~/.octop/ are preserved, and the schema migrates on next boot. But before a cross-version upgrade, always octop backup first.

Related

Field SOP

Intern-S2 in practice: from free API to scientific workflows

A hands-on SOP for accessing Intern-S2: for individuals and small teams the realistic path is the free API (chat.intern-ai.org.cn for online use, internlm.intern-ai.org.cn/api/strategy for quota), while institutions with compute can run the HuggingFace weights at internlm/Intern-S2-397B. It gives a three-way access comparison table, a minimal runnable Python call for the free API, an HF inference skeleton, two copy-paste prompt templates for scientific long-horizon tasks (molecule binder design, materials structure generation), plus Memory Decoder mounting notes and a ten-item pitfall list (free-tier rate limits, 397B out-of-memory, long-context truncation, the Preview model's 2026-10-31 shutdown and migration). Bottom line: start free on the API, do not jump straight to self-hosting a 397B model.

Sep 17, 202611 min read
Field SOP

Self-Hosting OpenMAIC: From Zero-Deploy to Agent Workbench

A complete SOP for getting OpenMAIC running from zero: (1) zero-deploy hosted mode with an access code from open.maic.chat; (2) standard local setup (pnpm >= 10: clone, pnpm install, .env, pnpm dev); (3) production (pnpm build && pnpm start, one-click Vercel, docker compose up --build); (4) advanced (Postgres persistence profile, ACCESS_CODE, MP4 export profile, Lemonade/FunASR local providers); (5) wiring it into agent workbenches (clawhub install openmaic or importing skills/openmaic/, generating classrooms from Feishu/Slack messages). Includes 6 pitfalls and a 10-item pre-launch checklist, with every command copied verbatim from the official README.

Sep 8, 202611 min read
Field SOP

Qwen3.8-Flash-Next Full-Stack Deployment SOP: 125B Main Model plus 51B N-gram Embeddings, Three Tiers from Hosted API to Apple Silicon

A three-tier route for taking Qwen3.8-Flash-Next from "it runs" to "it runs cheaply". The managed tier needs no ops: the QwenCloud API speaks both OpenAI and Anthropic specs, and QwenWork's Standard mode is powered by this model. For self-hosted serving, four commands quoted verbatim from the official README: transformers serve (--continuous-batching), SGLang (--tp-size 4 --context-length 262144 --reasoning-parser qwen3 --tool-call-parser qwen3_coder), vLLM (--tensor-parallel-size 4 --max-model-len 262144 --enable-auto-tool-choice) and TokenSpeed, all exposing an OpenAI-compatible API at localhost:8000/v1. Local and edge paths include GGUF builds via llama.cpp, mlx-vlm on Apple Silicon, and Unsloth. The engineering detail most worth remembering: the extra 51B of N-gram embeddings can be offloaded to host memory and overlapped with model compute through async prefetch. Because the README gives no official VRAM baseline, this SOP refuses to guess a hardware floor and marks it as "defer to the official recipe and your own measurements". Also covers the trade-offs of YaRN extrapolation to 1M, fine-tuning framework choices (Unsloth, Swift, Llama-Factory) and seven pitfalls - the first being that the GitHub repo ships no LICENSE file, so check the model page before commercial use.

Aug 30, 202612 min read