Core autonomous agent framework for building AI agents.
All commands run from the classic/ directory (parent of this directory):
# Install (one-time setup)
cd classic
poetry install
# Configure
cp .env.example .env
# Edit .env with your OPENAI_API_KEY
# Run
poetry run python -m forgeThe agent server runs on http://localhost:8000 by default.
# Required
OPENAI_API_KEY=sk-...
# Optional LLM settings
SMART_LLM=gpt-4o # Model for complex reasoning
FAST_LLM=gpt-4o-mini # Model for simple tasks
EMBEDDING_MODEL=text-embedding-3-small
# Optional search providers
TAVILY_API_KEY=tvly-...
SERPER_API_KEY=...
GOOGLE_API_KEY=...
GOOGLE_CUSTOM_SEARCH_ENGINE_ID=...
# Optional infrastructure
LOG_LEVEL=DEBUG # DEBUG, INFO, WARNING, ERROR
DATABASE_STRING=sqlite:///agent.db # Agent Protocol database
PORT=8000 # Server port
FILE_STORAGE_BACKEND=local # local, s3, or gcsWorkspace-wide permissions for all agents:
allow:
- read_file({workspace}/**)
- write_to_file({workspace}/**)
- list_folder({workspace}/**)
- web_search(*)
deny:
- read_file(**.env)
- read_file(**.key)
- execute_shell(rm -rf:*)
- execute_shell(sudo:*)Agent-specific permission overrides:
allow:
- execute_python(*)
deny:
- execute_shell(*){workspace}/
├── .autogpt/
│ ├── autogpt.yaml # Workspace permissions
│ ├── ap_server.db # Agent Protocol database
│ └── agents/
│ └── AutoGPT-{agent_id}/
│ ├── state.json # Agent state
│ ├── permissions.yaml # Agent permissions
│ └── workspace/ # Agent's working directory
Permission checks follow this order (first match wins):
- Agent deny list → Block
- Workspace deny list → Block
- Agent allow list → Allow
- Workspace allow list → Allow
- Prompt user → Interactive approval
Format: command_name(glob_pattern)
| Pattern | Description |
|---|---|
read_file({workspace}/**) |
Read any file in workspace |
execute_shell(python:**) |
Execute Python commands |
web_search(*) |
All web searches |
Special tokens:
{workspace}- Replaced with workspace path**- Matches any path including/*- Matches any characters except/
The tutorial series guides you through building a custom agent: