personal AI agent in 5 minutes. deploy on railway, chat on telegram or web.
gooseclaw is a personal AI agent by Haseeb, built on Goose. it runs on Railway, talks to you on Telegram and via a web UI, and learns who you are over time.
- web UI + telegram bot — chat from your browser or phone
- interactive onboarding on first message (no config files to edit)
- persistent memory that survives redeploys (Railway volume + optional git backup)
- 30+ LLM providers supported (Claude, GPT, Gemini, Groq, self-hosted, etc.)
- scheduled tasks — morning briefings, daily summaries, or anything you ask for
click the deploy button above. no environment variables needed.
or manually: fork this repo, connect to Railway, add a volume mounted at /data, deploy.
visit your Railway URL. the setup wizard walks you through:
- pick a provider (Claude, Anthropic, OpenAI, Google, Groq, OpenRouter, or custom endpoint)
- enter credentials with one-click validation
- optional settings (model override, timezone, Telegram, auth token)
the agent starts automatically after setup.
on first message, the agent runs a quick onboarding Q&A to learn your name, preferences, and communication style. after that, it's your personal agent.
want a Telegram bot too? create one with @BotFather, add the token in the setup wizard or set TELEGRAM_BOT_TOKEN in Railway, and redeploy. check logs for the pairing code. one-time step.
the setup wizard handles provider configuration, so no env vars are required for a basic deploy. for advanced use or CI/CD, you can set these instead:
| variable | description |
|---|---|
CLAUDE_SETUP_TOKEN |
Claude subscription token from claude setup-token |
GOOSE_PROVIDER + GOOSE_API_KEY |
API key provider (anthropic, openai, google, groq, openrouter) |
CUSTOM_PROVIDER_URL |
any OpenAI-compatible endpoint (+ CUSTOM_PROVIDER_MODEL, CUSTOM_PROVIDER_KEY) |
| variable | default | description |
|---|---|---|
GOOSE_MODEL |
provider default | model override |
TZ |
UTC |
timezone |
TELEGRAM_BOT_TOKEN |
— | Telegram bot token from @BotFather |
GITHUB_PAT |
— | GitHub PAT for git-based state persistence |
GITHUB_REPO |
— | repo for git persistence (e.g. username/my-agent) |
┌──────────────────────────────────────────┐
│ Railway Container │
│ │
│ gateway.py (reverse proxy on $PORT) │
│ ├── /setup → setup wizard │
│ ├── /api/setup/* → config API │
│ └── /* → goose web (port 3001) │
│ │
│ entrypoint.sh │
│ ├── gateway.py (setup + proxy) │
│ ├── goose web (chat UI) │
│ ├── goose gateway (telegram bot) │
│ └── persist loop (git push, optional) │
│ │
│ /data/ (Railway volume) │
│ ├── identity/ │
│ │ ├── soul.md ← personality │
│ │ ├── user.md ← your profile │
│ │ ├── tools.md ← capabilities │
│ │ ├── memory.md ← learned facts │
│ │ └── journal/ ← daily logs │
│ ├── recipes/ ← scheduled tasks │
│ ├── config/ ← goose config │
│ └── sessions/ ← session state │
└──────────────────────────────────────────┘
inspired by OpenClaw's bootstrap pattern. identity files are loaded every session so the agent maintains continuity of self.
| file | purpose | who writes |
|---|---|---|
soul.md |
personality, values, communication style | onboarding, then you |
user.md |
your name, role, timezone, preferences | onboarding, then you |
tools.md |
platform info | template |
memory.md |
long-term facts learned over time | agent |
journal/ |
daily session logs | agent |
on first message, the agent detects that identity files haven't been configured and starts an interactive Q&A:
- what's your name?
- what do you do?
- what timezone are you in?
- how should I talk to you?
- what do you want help with?
answers are written to soul.md and user.md. subsequent messages use the populated identity.
identity state persists two ways:
- Railway volume (
/data): survives redeploys, always active - Git auto-push (optional): commits
memory.md,journal/,soul.md,user.mdto your fork every 5 minutes
# clone
git clone https://github.com/hmseeb/gooseclaw.git
cd gooseclaw
# copy env
cp .env.example .env
# edit .env with your values
# build and run
docker build -t gooseclaw .
docker run --env-file .env -p 8080:8080 -v gooseclaw-data:/data gooseclawafter onboarding, you can ask the agent to update its identity:
- "update your personality to be more formal"
- "add to your memory that I prefer python over javascript"
- "change your communication style to be more concise"
if you have Railway CLI access:
railway shell
cat /data/identity/soul.md
# edit as neededfor deeper customization, fork this repo and modify:
identity/persistent-instructions.md(always-on agent instructions)
- Goose by Block. the AI agent framework that powers everything
- Railway for one-click container deployment
- Identity architecture inspired by OpenClaw
MIT