tiger-agent
v0.3.3
Published
Cognitive AI agent with persistent memory, multi-provider LLM, and Telegram bot
Maintainers
Readme
🐯 Tiger Agent
Agentic Swarm AI Agent with persistent long-term memory, multi-provider LLM support, token management, self-learning, and Telegram bot integration — designed for 24/7 autonomous operation on Linux.
Made by AI Research Group, Department of Civil Engineering, KMUTT
🆕 What's New — v0.3.4
- YAML swarm architecture — swarm flow is now configurable in
swarm/architecture/*.yamlwith orchestrator, agents, stages, and judgment matrix - YAML task style — task routing style is configurable in
tasks/styles/*.yamland can select which architecture file to use - Telegram architecture editing — added
/architectureand/taskstylecommands so Telegram users can list/show/write YAML and switch default architecture - Parallel design orchestration default — default architecture runs 3 designers in parallel, reviewer selects best, revision loop applies, then spec writer finalizes
v0.2.5
- Context-file mirror compatibility — if legacy root files like
./soul.mdor./ownskill.mdalready exist, Tiger now mirrors updates to them automatically while continuing to useDATA_DIRas the canonical source - README path clarification — docs now explicitly distinguish canonical
DATA_DIRfiles from optional legacy root mirrors
v0.2.4
- ClawHub skill install fixed —
clawhub_installandclawhub_searchnow work correctly when installed vianpm install -g - No required API keys —
tiger onboardskips providers with no key; any single provider is enough to start /limitTelegram command — set per-provider daily token limits from chat without restarting- Soul & ownskill refresh fixed — 24-hour regeneration timer now uses DB timestamps, not file mtime, so reflection appends no longer block the update cycle
v0.2.0
- npm global install —
npm install -g tiger-agent, no git clone needed - Multi-provider LLM — 5 providers (Kimi, Z.ai, MiniMax, Claude, Moonshot) with auto-fallback
- Daily token limits — per-provider limits with automatic switching at UTC midnight
tigerCLI — unified command:tiger onboard,tiger start,tiger telegram,tiger stop- Telegram
/api,/tokens,/limit— manage providers and usage from chat - Encrypted secrets — optional at-rest encryption for API keys
🎯 Why Tiger?
| Feature | Tiger | Generic AI Assistants | |---------|-------|-----------------------| | Memory | Persistent lifetime memory (Vector DB) | Forgets when session ends | | Learning | Self-training every 12 hours | Static, never improves | | Security | Audit logs + Encryption + Hardened perms | No audit trail | | Channels | CLI + Telegram simultaneously | Single channel only | | Execution | Chains multiple skills autonomously | Single command only |
📊 Dimension Comparison
| Dimension | Tiger v0.3.4 🐯 | OpenClaw 🔧 | NanoClaw 🪐 |
|---|---|---|---|
| Language | JS + Python | TypeScript | TypeScript |
| Platform | Linux + Docker | macOS/Linux/Win | macOS/Linux/Win |
| Install | npm install -g tiger-agent | npm install -g openclaw | git clone + Claude Code |
| LLM Providers | 5 (Kimi, Z.ai, MiniMax, Claude, Moonshot) | OpenAI + Claude | Claude only |
| Multi-provider Failover | ✅ Auto on 429/403 | ✅ | ❌ |
| Token Budgeting | ✅ Per-provider daily limits | ❌ | ❌ |
| Predefined Agents | ✅ Role-based, customizable via Markdown files | ✅ Built-in typed agents | ❌ User-defined only |
| Swarm Architecture | ✅ YAML configurable | ❌ | ❌ |
| Parallel Execution | ✅ Fault-tolerant min_success threshold | ✅ | ✅ |
| Judgment Matrix | ✅ Weighted criteria + review-revise loop | ❌ | ❌ |
| Task Resume | ✅ /task continue <id> | ❌ | ❌ |
| Crash Detection | ✅ 60s heartbeat; 5-min stale -> restart worker | ❌ | ✅ 5-min -> reclaim tasks |
| Container Isolation | ✅ Docker hardened (cap_drop: ALL, read-only FS) | Optional Docker | ✅ Docker default |
| Memory Persistence | ✅ Cross-session SQLite + 30-day backup | Session only | Team lifetime only |
| Self-learning | ✅ 12h reflection + 24h regeneration | ❌ | ❌ |
| Vector Retrieval | ✅ sqlite-vec / cosine fallback | ❌ | ❌ |
| Audit Logging | ✅ | ❌ | ❌ |
| Voice / Browser | ❌ / ❌ | ✅ / ✅ | ❌ / ❌ |
| Channel Coverage | Telegram, WhatsApp, CLI | All + iMessage + Teams | Most major |
| Core Strength | Cost control + YAML swarm + self-learning | Channel breadth + voice + sync A2A | Security + formal swarm lifecycle |
| Core Weakness | Linux-primary; no cross-task DAG | High complexity; app-layer security | Single-provider lock-in |
📋 Requirements
- Node.js 18+ (20+ recommended)
- npm
- Python 3 (for SQLite memory helper)
📦 Installation
npm install -g tiger-agentAll config and runtime data is stored in ~/.tiger/ — nothing written to the npm global directory.
🐳 Docker (Safer Runtime Isolation)
Run Tiger in a hardened container with:
- non-root user (
node) - dropped Linux capabilities (
cap_drop: [ALL]) no-new-privileges- read-only root filesystem
- persistent writable volume only for
TIGER_HOME(/home/node/.tiger)
Build image:
docker build -t tiger-agent:local .Run CLI mode:
docker run --rm -it \
--env-file .env \
--read-only \
--tmpfs /tmp \
--security-opt no-new-privileges:true \
--cap-drop ALL \
-e TIGER_HOME=/home/node/.tiger \
-v tiger_home:/home/node/.tiger \
tiger-agent:local startRun Telegram mode via Compose:
docker compose up -d
docker compose logs -f tigerDefault compose command is telegram. Change command: in docker-compose.yml if you want start instead.
🚀 Quick Start
1. Run the setup wizard (npm, not npn)
tiger onboardIf you cloned this repo and run locally (without global install), use:
npm run onboardThe wizard will ask for:
- Active provider — which LLM to use by default (e.g.
zai,claude) - Fallback order — comma-separated list tried when the active provider is rate-limited
- API keys — enter only the providers you have keys for; others are skipped automatically
- Telegram bot token — from @BotFather on Telegram
- Daily token limits — per-provider caps (0 = unlimited); auto-switches on breach
- Shell / skill-install — optional tool permissions
Config is saved to ~/.tiger/.env (mode 600).
MiniMax starter (quick setup):
# during onboard: choose active provider = minimax
tiger onboard
# local repo alternative
# npm run onboardSet at least:
ACTIVE_PROVIDER=minimaxMINIMAX_API_KEY=...
2. Start
CLI chat:
tiger start
# local repo
npm run startExit with /exit or /quit.
Telegram bot (foreground):
tiger telegram
# local repo
npm run telegramUse foreground mode only for testing/log watching in the current terminal session.
Telegram bot (background daemon):
tiger telegram --background # start
tiger status # check if running
tiger stop # stop
# local repo
npm run telegram:bg # start
npm run telegram:stop # stopRecommended for daily use: run background mode so Tiger keeps running after you close the terminal.
Restart background bot (after editing .env in this repo):
cd /root/tiger
npm run telegram:stop
npm run telegram:bgLogs: ~/.tiger/logs/telegram.out.log
🎮 Run Modes
| Mode | Command | Description |
|------|---------|-------------|
| CLI | tiger start | Interactive terminal chat |
| Telegram | tiger telegram | Telegram bot (foreground) |
| Background | tiger telegram --background | 24/7 daemon with auto-restart |
| Stop | tiger stop | Stop background daemon |
| Status | tiger status | Check daemon status |
| Onboard | tiger onboard | Re-run setup wizard |
Background crash detection:
- Telegram worker now emits a heartbeat every 60 seconds.
- Supervisor watchdog checks heartbeat every minute.
- If heartbeat is stale for 5 minutes, supervisor force-restarts the worker.
🔧 Setup Wizard Details
tiger onboard writes ~/.tiger/.env with all settings. You can re-run it at any time to update config.
| Wizard prompt | What it sets |
|---------------|-------------|
| Active provider | ACTIVE_PROVIDER |
| Fallback order | PROVIDER_ORDER |
| API keys | ZAI_API_KEY, CLAUDE_API_KEY, etc. |
| Telegram token | TELEGRAM_BOT_TOKEN |
| Token limits | ZAI_TOKEN_LIMIT, CLAUDE_TOKEN_LIMIT, etc. |
| Shell tool | ALLOW_SHELL |
| Skill install | ALLOW_SKILL_INSTALL |
Tip: You can also edit
~/.tiger/.envdirectly and restart the bot to apply changes.
🔑 Environment Variables
| Variable | Default | Description |
|----------|---------|-------------|
| ACTIVE_PROVIDER | — | Active LLM provider (kimi, zai, minimax, claude, moonshot) |
| PROVIDER_ORDER | — | Fallback order, comma-separated |
| TELEGRAM_BOT_TOKEN | — | Telegram bot token |
| ALLOW_SHELL | false | Enable shell tool |
| ALLOW_SKILL_INSTALL | false | Enable ClawHub skill install |
| VECTOR_DB_PATH | ~/.tiger/db/memory.sqlite | SQLite vector DB path |
| DATA_DIR | ~/.tiger/data | Canonical context files directory |
| OWN_SKILL_UPDATE_HOURS | 24 | Hours between ownskill.md regenerations (min 1) |
| SOUL_UPDATE_HOURS | 24 | Hours between soul.md regenerations (min 1) |
| REFLECTION_UPDATE_HOURS | 12 | Hours between reflection cycles (min 1) |
| MEMORY_INGEST_EVERY_TURNS | 2 | Ingest durable memory every N conversation turns |
| MEMORY_INGEST_MIN_CHARS | 140 | Minimum combined chars in a turn to trigger memory ingest |
Config lives in ~/.tiger/.env after running tiger onboard.
🌐 Multi-Provider LLM
Tiger supports 5 providers with automatic fallback and daily token limits.
Supported Providers
| Provider | ID | Default Model | API Key Variable |
|----------|----|--------------|-----------------|
| Kimi Code | kimi | k2p5 | KIMI_CODE_API_KEY |
| Kimi Moonshot | moonshot | kimi-k1 | MOONSHOT_API_KEY |
| Z.ai (Zhipu) | zai | glm-4.7 | ZAI_API_KEY (format: id.secret) |
| MiniMax | minimax | MiniMax-M2.5 | MINIMAX_API_KEY |
| Claude (Anthropic) | claude | claude-sonnet-4-6 | CLAUDE_API_KEY |
.env Example
ACTIVE_PROVIDER=zai
PROVIDER_ORDER=zai,claude,kimi,minimax,moonshot
KIMI_CODE_API_KEY=<key>
ZAI_API_KEY=<key>
MINIMAX_API_KEY=<key>
CLAUDE_API_KEY=<key>
MOONSHOT_API_KEY=<key>
# Daily token limits per provider (0 = unlimited)
KIMI_TOKEN_LIMIT=100000
ZAI_TOKEN_LIMIT=100000
MINIMAX_TOKEN_LIMIT=100000
CLAUDE_TOKEN_LIMIT=500000
MOONSHOT_TOKEN_LIMIT=100000
# Provider request timeouts (ms)
KIMI_TIMEOUT_MS=120000
ZAI_TIMEOUT_MS=120000
# Swarm worker-step timeout (0 = no extra swarm timeout)
SWARM_AGENT_TIMEOUT_MS=120000
# Swarm only: on timeout/network/API error, retry via next provider
SWARM_ROUTE_ON_PROVIDER_ERROR=true
# Swarm execution resilience
SWARM_STEP_MAX_RETRIES=2
SWARM_CONTINUE_ON_ERROR=true
# Swarm task entry policy
SWARM_DEFAULT_FLOW=auto
SWARM_FIRST_AGENT_POLICY=auto
# Used only when SWARM_FIRST_AGENT_POLICY=fixed
SWARM_FIRST_AGENT=designerAuto-Switch Behaviour
- Uses
ACTIVE_PROVIDERfor all requests - On 429 (rate limit) or 403 (quota exceeded) — switches to next in
PROVIDER_ORDER - When a provider's daily token limit is reached — skipped for the rest of the day
- Providers with no API key configured are silently skipped
- Token usage resets at UTC midnight (
~/.tiger/db/token_usage.json)
💬 Telegram Commands
| Command | Description |
|---------|-------------|
| /api | Show all providers with token usage |
| /api <id> | Switch active provider (e.g. /api claude) |
| /tokens | Show today's token usage per provider |
| /limit | Show daily token limits per provider |
| /limit <provider> <n> | Set daily token limit (0 = unlimited, e.g. /limit zai 100000) |
| /swarm | Show agent swarm status (ON/OFF) |
| /swarm <on|off> | Enable or disable internal swarm routing for normal messages |
| /status | Show swarm task queues (pending, in_progress, done, failed) |
| /task | List swarm tasks across queues |
| /task continue <task_id> | Resume a failed/stuck swarm task from the last failed agent |
| /task retry <task_id> | Alias of /task continue <task_id> |
| /task delete <task_id> | Delete a swarm task file from queue storage |
| /agents | Show internal swarm agents and availability |
| /cancel <task_id> | Cancel a swarm task |
| /ask <agent> <question> | Ask a specific internal agent role directly |
| /architecture | List swarm architecture YAML files |
| /architecture show <file> | Show one architecture YAML file |
| /architecture use <file> | Set default task-style architecture file |
| /architecture write <file> + newline + yaml | Save architecture YAML from Telegram |
| /taskstyle | List task-style YAML files |
| /taskstyle show <file> | Show one task-style YAML file |
| /taskstyle write <file> + newline + yaml | Save task-style YAML from Telegram |
| /help | Show all commands |
Swarm Settings (/swarm)
Tiger v0.3.4 includes an internal agent swarm for Telegram message routing.
- Default: swarm is OFF when the Telegram bot starts (
SWARM_ENABLED=false) /swarm on: regular user messages are routed through the YAML architecture inswarm/architecture/*.yaml(selected bytasks/styles/default.yaml)/swarm off: regular user messages skip the swarm and go directly to the standard Tiger agent reply path- Scope: this toggle affects only normal chat messages (not admin commands like
/api,/tokens,/limit) - Current persistence: the
/swarmtoggle is currently in-memory only and resets toSWARM_ENABLEDvalue after bot restart - Task resume: use
/task continue <task_id>(or/task retry <task_id>) to continue a failed timeout/API-error task without starting over
Swarm Timeout / Failover (.env)
SWARM_AGENT_TIMEOUT_MS: timeout per swarm worker step (e.g. onedesignerturn).0disables the extra swarm timeout.SWARM_ENABLED=true|false: default/swarmstate at bot startup.SWARM_ROUTE_ON_PROVIDER_ERROR=true|false: swarm-only provider failover on timeout/network/API errors.SWARM_STEP_MAX_RETRIES: retries per failed worker/stage before giving up.SWARM_CONTINUE_ON_ERROR=true|false: iftrue, swarm continues on degraded path after retries are exhausted (instead of hard failing).- Provider timeouts are separate and provider-specific, for example
KIMI_TIMEOUT_MS,ZAI_TIMEOUT_MS,CLAUDE_TIMEOUT_MS.
Swarm Entry Policy (.env)
SWARM_DEFAULT_FLOW=auto|design|research_build: default flow for new Telegram swarm tasks.SWARM_FIRST_AGENT_POLICYcontrols who starts first:auto(default): Tiger/orchestrator picks based on the goal textflow: use flow mapping (research_build -> scout, otherwisedesigner)fixed: useSWARM_FIRST_AGENT- or set a direct agent name (for example
designer,scout,coder)
SWARM_FIRST_AGENTis used whenSWARM_FIRST_AGENT_POLICY=fixed
Examples:
/swarm
/swarm off
/swarm on
/task
/task retry task_xxx
/task delete task_xxxSwarm Agent Files (Manual Customization)
Tiger creates a local swarm workspace so you can manually customize each agent's behavior.
Default folders (project/runtime root):
agents/
tiger/
designer/
senior_eng/
spec_writer/
scout/
coder/
critic/
tasks/
pending/
in_progress/
done/
failed/Each agent folder includes files such as:
soul.md— the agent's personality, rules, and mindsetownskill.md— what the agent is good at / preferred workflowexperience.json— learned lessons and task statsmemory.md— long-form notes/patternshuman.md— only foragents/tiger/(user preferences)
Manual setup / editing:
- Start the bot once (
tiger telegramortiger start) and Tiger will auto-create missingagents/andtasks/folders - You can then open and edit files like
agents/designer/soul.mdoragents/senior_eng/soul.mdmanually - Your edits are used on future swarm runs (for example
/ask designer ...or normal swarm-routed messages) - Keep edits in plain Markdown/JSON and avoid deleting required files while the bot is running
Example customization ideas:
- Make
designermore creative / visual - Make
senior_engstricter about security, error handling, and scalability - Make
spec_writerproduce a specific document format your team uses
Swarm Architecture YAML (v0.3.4)
Default files:
swarm/architecture/tiger_parallel_design.yaml
tasks/styles/default.yamlDefault architecture behavior:
- Orchestrator:
tiger - Stage 1: send task simultaneously to
designer_a,designer_b,designer_c(different souls/personalities)designer_a: senior conservativedesigner_b: balanced, around 40 styledesigner_c: young aggressive, higher risk appetite
- Stage 2:
reviewerevaluates with the judgment matrix and picks best candidate - Stage 3: selected designer revises based on reviewer feedback (loop until approved)
- Stage 4:
spec_writerwrites final output in two sections: Calculation Report and Executive Summary
Resilient execution behavior:
- Parallel stages are fault-tolerant: one failed role does not abort the whole stage.
type: parallelnow supportsmin_success(default1) to define how many successful role outputs are required.- Failed parallel-role errors are stored in context as
<store_as>_errors. - Worker/stage retries are controlled by
SWARM_STEP_MAX_RETRIES. - If retries are exhausted and
SWARM_CONTINUE_ON_ERROR=true, swarm continues on a degraded path instead of hard fail.
Example swarm/architecture/tiger_parallel_design.yaml:
version: 1
name: tiger_parallel_design
main_orchestrator: tiger
start_stage: design_parallel
agents:
- id: designer_a
runtime_agent: designer_a
role: designer
- id: designer_b
runtime_agent: designer_b
role: designer
- id: designer_c
runtime_agent: designer_c
role: designer
- id: reviewer
runtime_agent: senior_eng
role: reviewer
- id: spec_writer
runtime_agent: spec_writer
role: spec_writer
stages:
- id: design_parallel
type: parallel
roles:
- designer_a
- designer_b
- designer_c
min_success: 2
store_as: design_candidates
next: review_best
- id: review_best
type: judge
role: reviewer
candidates_from: design_candidates
selected_role_key: selected_role
feedback_key: reviewer_feedback
calculation_report_key: best_calculation_report
pass_next: final_spec
fail_next: revise_selected
- id: revise_selected
type: revise
role_from_context: selected_role
feedback_from_context: reviewer_feedback
candidates_from: design_candidates
update_context_keys_from_revised:
- best_calculation_report
next: review_best
- id: final_spec
type: final
role: spec_writer
source_from_context: best_calculation_report
output_sections:
- Calculation Report
- Executive Summary
output_notes: Include formulas, assumptions, step-by-step calculations, final values, and concise recommendations.
next: tiger_done
judgment_matrix:
criteria:
- name: objective_fit
weight: 0.35
description: How well the design satisfies the objective.
- name: feasibility
weight: 0.25
description: Delivery realism and technical viability.
- name: clarity
weight: 0.2
description: Readability and implementation clarity.
- name: risk
weight: 0.2
description: Risk exposure and mitigation quality.
pass_rule: reviewer_approvalTask Style YAML
Task style is the selector/policy layer for swarm execution.
architecture: which file inswarm/architecture/to runflow: flow label for task routing modeobjective_prefix: text prepended to the user objective before processing
Default file:
tasks/styles/default.yamlExample:
version: 1
name: default
architecture: tiger_parallel_design.yaml
flow: architecture
objective_prefix: "Objective:"🧠 Memory & Context
Context Files
Loaded on every turn from DATA_DIR (default: ~/.tiger/data/):
| File | Purpose |
|------|---------|
| soul.md | Agent identity, principles, and stable preferences |
| human.md | User profile — goals, patterns, preferences |
| human2.md | Running update log written after every conversation turn |
| ownskill.md | Known skills, workflows, and lessons learned |
v0.2.5 compatibility note: If root-level legacy files already exist (for example
./soul.md,./ownskill.md), Tiger mirrors updates to those files automatically. The canonical source remainsDATA_DIR.
Auto-Refresh Cycles
Tiger periodically regenerates these files using the LLM. All durations are configurable in .env (minimum 1 hour).
| Cycle | .env Variable | Default | What It Does |
|-------|----------------|---------|--------------|
| Skill summary | OWN_SKILL_UPDATE_HOURS | 24 | Rewrites ownskill.md with updated skills, workflows, and lessons derived from recent conversations |
| Soul refresh | SOUL_UPDATE_HOURS | 24 | Rewrites soul.md to reflect any evolved identity, operating rules, or preferences |
| Reflection | REFLECTION_UPDATE_HOURS | 12 | Extracts long-term memory bullets from recent messages and appends them to soul.md, human.md, ownskill.md, and the vector DB |
| Memory ingest | MEMORY_INGEST_EVERY_TURNS | 2 | After every N conversation turns, distils durable preference or workflow facts into the vector DB |
Note: Refresh timers for
soul.mdandownskill.mdare tracked in the DB (not file modification time), so reflection appends do not reset the 24-hour clock.
Example .env — tighten cycles for an active bot:
OWN_SKILL_UPDATE_HOURS=12
SOUL_UPDATE_HOURS=12
REFLECTION_UPDATE_HOURS=6
MEMORY_INGEST_EVERY_TURNS=2
MEMORY_INGEST_MIN_CHARS=140Vector Memory
Stored in ~/.tiger/db/memory.sqlite. Optional sqlite-vec extension enables fast ANN search:
SQLITE_VEC_EXTENSION=/path/to/sqlite_vecWithout it, Tiger falls back to cosine similarity in Python — slower but fully functional.
🛠️ Built-in Tools
| Category | Tools |
|----------|-------|
| Files | list_files, read_file, write_file |
| Shell | run_shell (requires ALLOW_SHELL=true) |
| Skills | list_skills, load_skill, clawhub_search, clawhub_install |
| Orchestration | run_sub_agents |
ClawHub Skills
Tiger can search and install skills from ClawHub — a community registry of reusable agent skills. The clawhub CLI is bundled with Tiger, no separate install needed.
Enable skill install in ~/.tiger/.env:
ALLOW_SKILL_INSTALL=trueThen just ask Tiger in chat:
Search for a web search skill on clawhub
Install the web-search skillSkills are installed to ~/.tiger/skills/ and loaded automatically on demand.
Note:
ALLOW_SKILL_INSTALL=truemust be set duringtiger onboardor added manually to~/.tiger/.env.
🔒 Security
| Feature | Detail |
|---------|--------|
| Credential Storage | ~/.tiger/.env.secrets with mode 600 |
| Database Security | ~/.tiger/db/ with hardened permissions |
| Audit Logging | Sanitized skill logs at ~/.tiger/logs/audit.log |
| Auto Backup | Daily SQLite backups, 30-day retention |
| Secret Rotation | Built-in 90-day rotation reminders |
Optional: Encrypted Secrets
# Run from ~/.tiger after onboard
export SECRETS_PASSPHRASE='your-passphrase'
node $(npm root -g)/tiger-agent/scripts/encrypt-env.js \
--in .env.secrets --out .env.secrets.enc
rm .env.secrets🆚 Tiger vs OpenClaw
| Feature | Tiger 🐯 | OpenClaw 🔧 |
|---------|-------------|-----------------|
| Identity | Persistent AI persona | Skill marketplace |
| Memory | Text files + SQLite vector | Skill-based only |
| Self-Training | ✅ 12h auto-reflection | ❌ Manual only |
| Skill Orchestration | Multi-skill pipelines | Single execution |
| Context Retention | ✅ Cross-session | Session-only |
| Security | ✅ Encryption + audit logs | Basic |
| Installation | npm install -g tiger-agent | clawhub install |
🐛 Troubleshooting
| Issue | Solution |
|-------|----------|
| Bot stuck on one provider | /api <name> in Telegram to switch manually |
| Provider silently skipped | No API key set, or daily limit reached — check /tokens |
| 401 auth error | Wrong or missing API key |
| 403 quota error | Daily quota exhausted — auto-switches; raise *_TOKEN_LIMIT |
| 429 rate limit | Auto-switches to next provider in PROVIDER_ORDER |
| Z.ai auth fails | Key must be id.secret format (from Zhipu/BigModel console) |
| Telegram bot runs but does not respond | Ensure only one polling instance is running for the same bot token (stop old/global service copies) |
| soul.md / ownskill.md look stale | Check DATA_DIR first (default ~/.tiger/data). In v0.2.5+, existing root legacy copies are mirrored automatically |
| Shell tool disabled | Set ALLOW_SHELL=true in ~/.tiger/.env |
| Stuck processes | pkill -f tiger-agent then restart |
| Reset token counters | Delete ~/.tiger/db/token_usage.json and restart |
📁 Data Directory
All runtime data lives in ~/.tiger/:
~/.tiger/
├── .env # Settings
├── .env.secrets # API keys (mode 600)
├── data/ # Context files (soul.md, human.md, ...)
├── db/
│ ├── agent.json # Conversation state
│ ├── memory.sqlite # Vector memory
│ └── token_usage.json # Daily token counters
└── logs/
├── audit.log
└── telegram-supervisor.log👥 Authors
AI Research Group Department of Civil Engineering King Mongkut's University of Technology Thonburi (KMUTT) Bangkok, Thailand
📜 License
[虎 - Hǔ - The Tiger: Powerful, agile, and relentless in pursuit of goals]
