Forest
森 forest is a lightweight intelligence layer to track your workspace knowledge.
Install / Use
/learn @forest-fs/ForestREADME
森 forest
森 forest is a lightweight intelligence layer that manages your workspace knowledge directly from your chats, so that you don't have to.
Naturally, teams will share files from different platforms and discuss them in chat — forest listens and organizes.
<p align="center"> <img src="public/forest-flow.png" alt="Teams share files and discuss them in Slack — forest connects to those conversations and builds a knowledge layer." /> </p>Say sayionara to organizing these yourself (or even worse, having someone else organize them!); just let your teammates create/store them in their platforms of preference, and let 森 forest manage the rest.
Usage
Browse your workspace tree with @forest show, or fomd any file by context with @forest find.
Self Hosting
For full privacy, we let you host it — it's simple to set up, just follow the steps below.
Requirements
- Python 3.11+
- Poetry
- Docker (for local Postgres + pgvector)
Slack
Create a Slack app, add the required scopes and event subscriptions, then copy the bot token and signing secret into .env. Full walkthrough: docs/slack-app-setup.md.
Local setup
-
Copy environment template and fill in secrets:
cp .env.example .envSet
SLACK_BOT_TOKEN,SLACK_SIGNING_SECRET,LLM_API_KEY(orOPENROUTER_API_KEY),CHAT_MODEL_ID, andEMBEDDING_MODEL_ID. Default URL is OpenRouter; to use direct OpenAI or another OpenAI-compatible API instead, setLLM_BASE_URL— see docs/llm-configuration.md. -
Run everything with Docker Compose (Postgres + Forest):
docker compose up --buildOr run only Postgres and use Poetry on the host:
docker compose up -d postgres poetry install poetry run alembic upgrade head poetry run forestHTTP is on port 8000.
GET /healthzfor liveness,GET /readyfor DB readiness. -
Slack needs a public HTTPS URL. For local dev, use cloudflared:
cloudflared tunnel --url http://127.0.0.1:8000Copy the
https://….trycloudflare.comURL and set it as your Slack app's Event Subscriptions → Request URL (https://<tunnel-host>/slack/events).
Full local setup details (migrations, embedding dimensions, troubleshooting): docs/installation.md. LLM endpoints and model IDs: docs/llm-configuration.md.
Remote setup (AWS / GCP)
Forest is a single container + managed Postgres — the pattern is the same on any cloud:
- Provision PostgreSQL with pgvector (RDS on AWS, Cloud SQL on GCP).
- Push the Docker image to a container registry (ECR / Artifact Registry).
- Deploy the container with environment variables pointing at the database and your Slack/LLM credentials (
LLM_API_KEYorOPENROUTER_API_KEY; see LLM configuration). - Point Slack at the public HTTPS endpoint (
https://<host>/slack/events).
| | AWS | GCP |
|---|---|---|
| Database | RDS PostgreSQL 16 (CREATE EXTENSION vector) | Cloud SQL PostgreSQL 16 (cloudsql.enable_pgvector=on) |
| Compute | ECS Fargate + ALB, or App Runner | Cloud Run |
| Registry | ECR | Artifact Registry |
| HTTPS | ALB with ACM cert, or App Runner built-in | Cloud Run built-in |
| Secrets | Secrets Manager / SSM Parameter Store | Secret Manager |
Full step-by-step CLI commands for both providers: docs/deployment.md.
Tests
poetry run pytest
For DB integration tests, set FOREST_RUN_DB_INTEGRATION=1 with Postgres running.
More Documentation
Longer-form docs (purpose, architecture, installation, LLM setup, FAQ) live under docs/.
License
森 forest is released under the GNU Affero General Public License v3.0 (AGPL-3.0).
This means you are free to use, modify, and self-host it — but if you distribute or run it as a network service, you must release your modifications under the same license.
TODOs
- Semantic search (
@forest find) and pgvector ANN tuning (repository search, query embeddings, ANN index). - Telemetry (
/metrics, OpenTelemetry, or similar) and a small observability facade.
Related Skills
imsg
354.5kiMessage/SMS CLI for listing chats, history, and sending messages via Messages.app.
node-connect
354.5kDiagnose OpenClaw node connection and pairing failures for Android, iOS, and macOS companion apps
slack
354.5kUse when you need to control Slack from OpenClaw via the slack tool, including reacting to messages or pinning/unpinning items in Slack channels or DMs.
taskflow
354.5kUse when work should span one or more detached tasks but still behave like one job with a single owner context. TaskFlow is the durable flow substrate under authoring layers like Lobster, ACPX, plugins, or plain code. Keep conditional logic in the caller; use TaskFlow for flow identity, child-task linkage, waiting state, revision-checked mutations, and user-facing emergence.
