gulama 0.2.0__tar.gz
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- gulama-0.2.0/.gitignore +71 -0
- gulama-0.2.0/CHANGELOG.md +39 -0
- gulama-0.2.0/LICENSE +21 -0
- gulama-0.2.0/PKG-INFO +418 -0
- gulama-0.2.0/README.md +308 -0
- gulama-0.2.0/media/Gulama.png +0 -0
- gulama-0.2.0/pyproject.toml +187 -0
- gulama-0.2.0/src/__init__.py +3 -0
- gulama-0.2.0/src/agent/__init__.py +16 -0
- gulama-0.2.0/src/agent/brain.py +615 -0
- gulama-0.2.0/src/agent/context_builder.py +304 -0
- gulama-0.2.0/src/agent/llm_router.py +519 -0
- gulama-0.2.0/src/agent/persona.py +310 -0
- gulama-0.2.0/src/agent/sub_agents.py +268 -0
- gulama-0.2.0/src/agent/tool_executor.py +213 -0
- gulama-0.2.0/src/channels/__init__.py +6 -0
- gulama-0.2.0/src/channels/base.py +45 -0
- gulama-0.2.0/src/channels/cli.py +190 -0
- gulama-0.2.0/src/channels/discord_adapter.py +263 -0
- gulama-0.2.0/src/channels/google_chat.py +85 -0
- gulama-0.2.0/src/channels/matrix.py +113 -0
- gulama-0.2.0/src/channels/scheduler.py +313 -0
- gulama-0.2.0/src/channels/slack.py +322 -0
- gulama-0.2.0/src/channels/teams.py +95 -0
- gulama-0.2.0/src/channels/telegram.py +253 -0
- gulama-0.2.0/src/channels/voice_wake.py +259 -0
- gulama-0.2.0/src/channels/web.py +223 -0
- gulama-0.2.0/src/channels/whatsapp.py +328 -0
- gulama-0.2.0/src/cli/__init__.py +6 -0
- gulama-0.2.0/src/cli/commands.py +560 -0
- gulama-0.2.0/src/cli/doctor.py +380 -0
- gulama-0.2.0/src/cli/setup_wizard.py +279 -0
- gulama-0.2.0/src/constants.py +79 -0
- gulama-0.2.0/src/gateway/__init__.py +6 -0
- gulama-0.2.0/src/gateway/app.py +168 -0
- gulama-0.2.0/src/gateway/auth.py +140 -0
- gulama-0.2.0/src/gateway/config.py +185 -0
- gulama-0.2.0/src/gateway/debug_ws.py +292 -0
- gulama-0.2.0/src/gateway/health.py +43 -0
- gulama-0.2.0/src/gateway/middleware.py +143 -0
- gulama-0.2.0/src/gateway/router.py +478 -0
- gulama-0.2.0/src/gateway/websocket.py +156 -0
- gulama-0.2.0/src/main.py +90 -0
- gulama-0.2.0/src/memory/__init__.py +7 -0
- gulama-0.2.0/src/memory/encryption.py +72 -0
- gulama-0.2.0/src/memory/migration.py +148 -0
- gulama-0.2.0/src/memory/schema.py +70 -0
- gulama-0.2.0/src/memory/store.py +282 -0
- gulama-0.2.0/src/memory/summarizer.py +295 -0
- gulama-0.2.0/src/memory/vector_store.py +304 -0
- gulama-0.2.0/src/security/__init__.py +34 -0
- gulama-0.2.0/src/security/audit_logger.py +198 -0
- gulama-0.2.0/src/security/canary.py +247 -0
- gulama-0.2.0/src/security/compliance.py +325 -0
- gulama-0.2.0/src/security/egress_filter.py +151 -0
- gulama-0.2.0/src/security/input_validator.py +239 -0
- gulama-0.2.0/src/security/policy_engine.py +450 -0
- gulama-0.2.0/src/security/rbac.py +388 -0
- gulama-0.2.0/src/security/sandbox.py +313 -0
- gulama-0.2.0/src/security/secrets_vault.py +225 -0
- gulama-0.2.0/src/security/skill_verifier.py +105 -0
- gulama-0.2.0/src/security/sso.py +296 -0
- gulama-0.2.0/src/security/team.py +360 -0
- gulama-0.2.0/src/security/threat_detector.py +395 -0
- gulama-0.2.0/src/skills/__init__.py +6 -0
- gulama-0.2.0/src/skills/base.py +90 -0
- gulama-0.2.0/src/skills/builtin/__init__.py +21 -0
- gulama-0.2.0/src/skills/builtin/browser.py +430 -0
- gulama-0.2.0/src/skills/builtin/calendar_skill.py +401 -0
- gulama-0.2.0/src/skills/builtin/code_exec.py +229 -0
- gulama-0.2.0/src/skills/builtin/email_skill.py +330 -0
- gulama-0.2.0/src/skills/builtin/file_manager.py +150 -0
- gulama-0.2.0/src/skills/builtin/github_skill.py +304 -0
- gulama-0.2.0/src/skills/builtin/google_docs_skill.py +292 -0
- gulama-0.2.0/src/skills/builtin/image_gen.py +393 -0
- gulama-0.2.0/src/skills/builtin/mcp_bridge.py +385 -0
- gulama-0.2.0/src/skills/builtin/notes.py +152 -0
- gulama-0.2.0/src/skills/builtin/notion_skill.py +287 -0
- gulama-0.2.0/src/skills/builtin/productivity_skill.py +335 -0
- gulama-0.2.0/src/skills/builtin/shell_exec.py +106 -0
- gulama-0.2.0/src/skills/builtin/smart_home.py +332 -0
- gulama-0.2.0/src/skills/builtin/spotify_skill.py +235 -0
- gulama-0.2.0/src/skills/builtin/twitter_skill.py +184 -0
- gulama-0.2.0/src/skills/builtin/voice_skill.py +412 -0
- gulama-0.2.0/src/skills/builtin/web_search.py +208 -0
- gulama-0.2.0/src/skills/marketplace.py +244 -0
- gulama-0.2.0/src/skills/registry.py +110 -0
- gulama-0.2.0/src/skills/scanner.py +322 -0
- gulama-0.2.0/src/skills/self_modifier.py +281 -0
- gulama-0.2.0/src/skills/signer.py +205 -0
- gulama-0.2.0/src/utils/__init__.py +7 -0
- gulama-0.2.0/src/utils/cost_tracker.py +217 -0
- gulama-0.2.0/src/utils/logging.py +88 -0
- gulama-0.2.0/src/utils/platform.py +136 -0
- gulama-0.2.0/web/src/App.tsx +105 -0
- gulama-0.2.0/web/src/Chat.tsx +221 -0
- gulama-0.2.0/web/src/Dashboard.tsx +171 -0
- gulama-0.2.0/web/src/Settings.tsx +216 -0
- gulama-0.2.0/web/src/index.css +45 -0
- gulama-0.2.0/web/src/main.tsx +10 -0
gulama-0.2.0/.gitignore
ADDED
|
@@ -0,0 +1,71 @@
|
|
|
1
|
+
# Python
|
|
2
|
+
__pycache__/
|
|
3
|
+
*.py[cod]
|
|
4
|
+
*$py.class
|
|
5
|
+
*.so
|
|
6
|
+
*.egg-info/
|
|
7
|
+
dist/
|
|
8
|
+
build/
|
|
9
|
+
.eggs/
|
|
10
|
+
|
|
11
|
+
# Virtual environments
|
|
12
|
+
.venv/
|
|
13
|
+
venv/
|
|
14
|
+
env/
|
|
15
|
+
|
|
16
|
+
# IDE
|
|
17
|
+
.idea/
|
|
18
|
+
.vscode/
|
|
19
|
+
*.swp
|
|
20
|
+
*.swo
|
|
21
|
+
*~
|
|
22
|
+
|
|
23
|
+
# Testing
|
|
24
|
+
.pytest_cache/
|
|
25
|
+
.mypy_cache/
|
|
26
|
+
.ruff_cache/
|
|
27
|
+
htmlcov/
|
|
28
|
+
.coverage
|
|
29
|
+
coverage.xml
|
|
30
|
+
|
|
31
|
+
# Environment & Secrets — NEVER commit these
|
|
32
|
+
.env
|
|
33
|
+
.env.local
|
|
34
|
+
.env.production
|
|
35
|
+
*.age
|
|
36
|
+
*.key
|
|
37
|
+
*.pem
|
|
38
|
+
vault.*
|
|
39
|
+
!.env.example
|
|
40
|
+
|
|
41
|
+
# Gulama data directory (may exist during dev)
|
|
42
|
+
.gulama/
|
|
43
|
+
|
|
44
|
+
# OS files
|
|
45
|
+
.DS_Store
|
|
46
|
+
Thumbs.db
|
|
47
|
+
desktop.ini
|
|
48
|
+
nul
|
|
49
|
+
|
|
50
|
+
# Claude Code
|
|
51
|
+
.claude/
|
|
52
|
+
|
|
53
|
+
# PDFs (analysis docs, not source code)
|
|
54
|
+
*.pdf
|
|
55
|
+
|
|
56
|
+
# Docker
|
|
57
|
+
docker-compose.override.yml
|
|
58
|
+
|
|
59
|
+
# Rust
|
|
60
|
+
target/
|
|
61
|
+
|
|
62
|
+
# Node (web UI)
|
|
63
|
+
node_modules/
|
|
64
|
+
web/dist/
|
|
65
|
+
|
|
66
|
+
# Logs
|
|
67
|
+
*.log
|
|
68
|
+
logs/
|
|
69
|
+
|
|
70
|
+
# Cache
|
|
71
|
+
cache/
|
|
@@ -0,0 +1,39 @@
|
|
|
1
|
+
# Changelog
|
|
2
|
+
|
|
3
|
+
All notable changes to Gulama will be documented in this file.
|
|
4
|
+
|
|
5
|
+
## [0.2.0] - 2025-02-15
|
|
6
|
+
|
|
7
|
+
### Added
|
|
8
|
+
- **19 built-in skills**: File Manager, Shell Exec, Web Search, Notes, Code Exec, Browser, Email, Calendar, MCP Bridge, Voice, Image Gen, Smart Home, GitHub, Notion, Spotify, Twitter/X, Google Docs, Productivity (Trello/Linear/Todoist/Obsidian), Self-Modify
|
|
9
|
+
- **8 communication channels**: CLI, Telegram, Discord, Slack, WhatsApp, Matrix (E2E encrypted), Microsoft Teams, Google Chat
|
|
10
|
+
- **GulamaHub marketplace**: Ed25519-signed skill marketplace with search, install, publish
|
|
11
|
+
- **Self-modifying skills**: AI can create/test/register its own skills at runtime with security scanning
|
|
12
|
+
- **Voice wake word**: "Hey Gulama" via Picovoice Porcupine with energy-based fallback
|
|
13
|
+
- **WebSocket debug tools**: Real-time tool call, policy decision, token usage streaming
|
|
14
|
+
- **Docker production deployment**: Multi-stage build, Caddy auto-TLS, Watchtower
|
|
15
|
+
- **Sub-agent manager**: Spawn background agents for parallel tasks
|
|
16
|
+
- **Task scheduler**: Cron, interval, and one-shot task scheduling
|
|
17
|
+
- **29 REST API endpoints**: Full gateway API with TOTP authentication
|
|
18
|
+
- **CI/CD pipeline**: GitHub Actions with lint, test, security scan, Docker build, PyPI publish
|
|
19
|
+
- **Integration tests**: Brain flow, gateway endpoints, skill execution, security pipeline
|
|
20
|
+
|
|
21
|
+
### Security
|
|
22
|
+
- **15+ security mechanisms**: Policy engine, sandbox, canary tokens, audit, DLP, egress filter, RBAC, SSO, threat detection, input validation, security headers
|
|
23
|
+
- **Signed marketplace**: Ed25519 mandatory verification for all community skills
|
|
24
|
+
- **Self-modifier scanning**: Blocks dangerous code patterns (subprocess, eval, exec, ctypes)
|
|
25
|
+
|
|
26
|
+
## [0.1.0] - 2025-02-10
|
|
27
|
+
|
|
28
|
+
### Added
|
|
29
|
+
- Initial release with core agent brain
|
|
30
|
+
- LiteLLM universal LLM support (100+ providers)
|
|
31
|
+
- Encrypted SQLite memory store
|
|
32
|
+
- AES-256-GCM secrets vault
|
|
33
|
+
- Cedar-inspired policy engine
|
|
34
|
+
- bubblewrap sandbox
|
|
35
|
+
- Canary token system
|
|
36
|
+
- Hash-chain audit logger
|
|
37
|
+
- TOTP authentication gateway
|
|
38
|
+
- CLI and Telegram channels
|
|
39
|
+
- 4 core skills: File Manager, Shell Exec, Web Search, Notes
|
gulama-0.2.0/LICENSE
ADDED
|
@@ -0,0 +1,21 @@
|
|
|
1
|
+
MIT License
|
|
2
|
+
|
|
3
|
+
Copyright (c) 2026 Santosh — Astra Fintech Labs Pvt. Ltd.
|
|
4
|
+
|
|
5
|
+
Permission is hereby granted, free of charge, to any person obtaining a copy
|
|
6
|
+
of this software and associated documentation files (the "Software"), to deal
|
|
7
|
+
in the Software without restriction, including without limitation the rights
|
|
8
|
+
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
|
9
|
+
copies of the Software, and to permit persons to whom the Software is
|
|
10
|
+
furnished to do so, subject to the following conditions:
|
|
11
|
+
|
|
12
|
+
The above copyright notice and this permission notice shall be included in all
|
|
13
|
+
copies or substantial portions of the Software.
|
|
14
|
+
|
|
15
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
16
|
+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
|
17
|
+
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
|
18
|
+
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
|
19
|
+
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
|
20
|
+
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
|
|
21
|
+
SOFTWARE.
|
gulama-0.2.0/PKG-INFO
ADDED
|
@@ -0,0 +1,418 @@
|
|
|
1
|
+
Metadata-Version: 2.4
|
|
2
|
+
Name: gulama
|
|
3
|
+
Version: 0.2.0
|
|
4
|
+
Summary: Secure, open-source personal AI agent platform — OpenClaw, but secure.
|
|
5
|
+
Project-URL: Homepage, https://gulama.ai
|
|
6
|
+
Project-URL: Repository, https://github.com/san-techie21/gulama-bot
|
|
7
|
+
Project-URL: Documentation, https://gulama.dev
|
|
8
|
+
Project-URL: Issues, https://github.com/san-techie21/gulama-bot/issues
|
|
9
|
+
Project-URL: Changelog, https://github.com/san-techie21/gulama-bot/blob/main/CHANGELOG.md
|
|
10
|
+
Author-email: Santosh <santosh@astrafintechlabs.com>
|
|
11
|
+
License-Expression: MIT
|
|
12
|
+
License-File: LICENSE
|
|
13
|
+
Keywords: agent,ai,automation,chatbot,llm,personal-assistant,security
|
|
14
|
+
Classifier: Development Status :: 4 - Beta
|
|
15
|
+
Classifier: Intended Audience :: Developers
|
|
16
|
+
Classifier: Intended Audience :: System Administrators
|
|
17
|
+
Classifier: License :: OSI Approved :: MIT License
|
|
18
|
+
Classifier: Programming Language :: Python :: 3.12
|
|
19
|
+
Classifier: Programming Language :: Python :: 3.13
|
|
20
|
+
Classifier: Topic :: Scientific/Engineering :: Artificial Intelligence
|
|
21
|
+
Classifier: Topic :: Security
|
|
22
|
+
Classifier: Typing :: Typed
|
|
23
|
+
Requires-Python: >=3.12
|
|
24
|
+
Requires-Dist: chromadb>=0.6
|
|
25
|
+
Requires-Dist: click>=8.1
|
|
26
|
+
Requires-Dist: cryptography>=44.0
|
|
27
|
+
Requires-Dist: diskcache>=5.6
|
|
28
|
+
Requires-Dist: fastapi>=0.115
|
|
29
|
+
Requires-Dist: httpx>=0.28
|
|
30
|
+
Requires-Dist: keyring>=25.0
|
|
31
|
+
Requires-Dist: litellm>=1.56
|
|
32
|
+
Requires-Dist: pydantic-settings>=2.7
|
|
33
|
+
Requires-Dist: pydantic>=2.10
|
|
34
|
+
Requires-Dist: pyotp>=2.9
|
|
35
|
+
Requires-Dist: python-dotenv>=1.0
|
|
36
|
+
Requires-Dist: python-telegram-bot>=22.0
|
|
37
|
+
Requires-Dist: rich>=13.9
|
|
38
|
+
Requires-Dist: sentence-transformers>=3.3
|
|
39
|
+
Requires-Dist: structlog>=24.4
|
|
40
|
+
Requires-Dist: tomli-w>=1.1
|
|
41
|
+
Requires-Dist: tomli>=2.2
|
|
42
|
+
Requires-Dist: uvicorn[standard]>=0.34
|
|
43
|
+
Requires-Dist: websockets>=14.0
|
|
44
|
+
Provides-Extra: all-channels
|
|
45
|
+
Requires-Dist: discord-py>=2.4; extra == 'all-channels'
|
|
46
|
+
Requires-Dist: matrix-nio[e2e]>=0.24; extra == 'all-channels'
|
|
47
|
+
Requires-Dist: playwright>=1.48; extra == 'all-channels'
|
|
48
|
+
Requires-Dist: slack-sdk>=3.33; extra == 'all-channels'
|
|
49
|
+
Provides-Extra: all-skills
|
|
50
|
+
Requires-Dist: caldav>=1.4; extra == 'all-skills'
|
|
51
|
+
Requires-Dist: google-api-python-client>=2.150; extra == 'all-skills'
|
|
52
|
+
Requires-Dist: google-auth>=2.30; extra == 'all-skills'
|
|
53
|
+
Requires-Dist: openai>=1.50; extra == 'all-skills'
|
|
54
|
+
Requires-Dist: playwright>=1.48; extra == 'all-skills'
|
|
55
|
+
Provides-Extra: browser
|
|
56
|
+
Requires-Dist: playwright>=1.48; extra == 'browser'
|
|
57
|
+
Provides-Extra: browser-ai
|
|
58
|
+
Requires-Dist: browser-use>=0.1; extra == 'browser-ai'
|
|
59
|
+
Requires-Dist: langchain-openai>=0.2; extra == 'browser-ai'
|
|
60
|
+
Requires-Dist: playwright>=1.48; extra == 'browser-ai'
|
|
61
|
+
Provides-Extra: calendar
|
|
62
|
+
Requires-Dist: caldav>=1.4; extra == 'calendar'
|
|
63
|
+
Requires-Dist: google-api-python-client>=2.150; extra == 'calendar'
|
|
64
|
+
Provides-Extra: dev
|
|
65
|
+
Requires-Dist: bandit>=1.7; extra == 'dev'
|
|
66
|
+
Requires-Dist: mypy>=1.13; extra == 'dev'
|
|
67
|
+
Requires-Dist: pip-audit>=2.7; extra == 'dev'
|
|
68
|
+
Requires-Dist: pytest-asyncio>=0.24; extra == 'dev'
|
|
69
|
+
Requires-Dist: pytest-cov>=6.0; extra == 'dev'
|
|
70
|
+
Requires-Dist: pytest>=8.0; extra == 'dev'
|
|
71
|
+
Requires-Dist: ruff<0.16,>=0.15; extra == 'dev'
|
|
72
|
+
Provides-Extra: discord
|
|
73
|
+
Requires-Dist: discord-py>=2.4; extra == 'discord'
|
|
74
|
+
Provides-Extra: email
|
|
75
|
+
Provides-Extra: full
|
|
76
|
+
Requires-Dist: browser-use>=0.1; extra == 'full'
|
|
77
|
+
Requires-Dist: caldav>=1.4; extra == 'full'
|
|
78
|
+
Requires-Dist: discord-py>=2.4; extra == 'full'
|
|
79
|
+
Requires-Dist: google-api-python-client>=2.150; extra == 'full'
|
|
80
|
+
Requires-Dist: google-auth>=2.30; extra == 'full'
|
|
81
|
+
Requires-Dist: langchain-openai>=0.2; extra == 'full'
|
|
82
|
+
Requires-Dist: matrix-nio[e2e]>=0.24; extra == 'full'
|
|
83
|
+
Requires-Dist: openai>=1.50; extra == 'full'
|
|
84
|
+
Requires-Dist: playwright>=1.48; extra == 'full'
|
|
85
|
+
Requires-Dist: slack-sdk>=3.33; extra == 'full'
|
|
86
|
+
Provides-Extra: google-workspace
|
|
87
|
+
Requires-Dist: google-api-python-client>=2.150; extra == 'google-workspace'
|
|
88
|
+
Requires-Dist: google-auth>=2.30; extra == 'google-workspace'
|
|
89
|
+
Provides-Extra: image
|
|
90
|
+
Requires-Dist: openai>=1.50; extra == 'image'
|
|
91
|
+
Provides-Extra: matrix
|
|
92
|
+
Requires-Dist: matrix-nio[e2e]>=0.24; extra == 'matrix'
|
|
93
|
+
Provides-Extra: rust
|
|
94
|
+
Requires-Dist: maturin>=1.7; extra == 'rust'
|
|
95
|
+
Provides-Extra: saml
|
|
96
|
+
Requires-Dist: python3-saml>=1.16; extra == 'saml'
|
|
97
|
+
Provides-Extra: slack
|
|
98
|
+
Requires-Dist: slack-sdk>=3.33; extra == 'slack'
|
|
99
|
+
Provides-Extra: teams
|
|
100
|
+
Requires-Dist: botbuilder-core>=4.15; extra == 'teams'
|
|
101
|
+
Provides-Extra: voice
|
|
102
|
+
Requires-Dist: elevenlabs>=1.0; extra == 'voice'
|
|
103
|
+
Requires-Dist: gtts>=2.5; extra == 'voice'
|
|
104
|
+
Requires-Dist: openai-whisper>=20240930; extra == 'voice'
|
|
105
|
+
Provides-Extra: voice-wake
|
|
106
|
+
Requires-Dist: pvporcupine>=3.0; extra == 'voice-wake'
|
|
107
|
+
Requires-Dist: pyaudio>=0.2; extra == 'voice-wake'
|
|
108
|
+
Provides-Extra: whatsapp
|
|
109
|
+
Description-Content-Type: text/markdown
|
|
110
|
+
|
|
111
|
+
<p align="center">
|
|
112
|
+
<img src="media/Gulama.png" alt="Gulama" width="200"/>
|
|
113
|
+
</p>
|
|
114
|
+
|
|
115
|
+
<h1 align="center">Gulama</h1>
|
|
116
|
+
|
|
117
|
+
<p align="center">
|
|
118
|
+
<strong>Secure, open-source personal AI agent platform — OpenClaw, but secure.</strong>
|
|
119
|
+
</p>
|
|
120
|
+
|
|
121
|
+
<p align="center">
|
|
122
|
+
Gulama is a security-first AI assistant with <b>19 skills</b>, <b>8 channels</b>, a <b>signed skill marketplace</b>, and support for <b>100+ LLM providers</b>. Runs on macOS, Windows, Linux, Docker, and ARM.
|
|
123
|
+
</p>
|
|
124
|
+
|
|
125
|
+
<p align="center">
|
|
126
|
+
<a href="LICENSE"><img src="https://img.shields.io/badge/License-MIT-blue.svg" alt="License: MIT"/></a>
|
|
127
|
+
<a href="https://python.org"><img src="https://img.shields.io/badge/Python-3.12+-green.svg" alt="Python 3.12+"/></a>
|
|
128
|
+
<a href="https://github.com/san-techie21/gulama-bot/actions"><img src="https://github.com/san-techie21/gulama-bot/actions/workflows/ci.yml/badge.svg" alt="CI"/></a>
|
|
129
|
+
<a href="https://pypi.org/project/gulama/"><img src="https://img.shields.io/pypi/v/gulama.svg" alt="PyPI"/></a>
|
|
130
|
+
<img src="https://img.shields.io/badge/Security-15%2B%20mechanisms-red.svg" alt="Security"/>
|
|
131
|
+
</p>
|
|
132
|
+
|
|
133
|
+
## Why Gulama?
|
|
134
|
+
|
|
135
|
+
Personal AI agents handle sensitive data — your files, emails, credentials, and conversations. Most existing solutions (including OpenClaw with its [341 malicious skills](https://www.securityweek.com/openclaw-vulnerabilities/)) treat security as an afterthought. **Gulama is built security-first from the ground up.**
|
|
136
|
+
|
|
137
|
+
### Security Architecture (15+ Mechanisms)
|
|
138
|
+
|
|
139
|
+
- **Encrypted at rest** — AES-256-GCM for all credentials, never plaintext
|
|
140
|
+
- **Sandboxed execution** — bubblewrap/Docker/OS sandbox for every tool
|
|
141
|
+
- **Policy engine** — Deterministic Cedar-inspired authorization
|
|
142
|
+
- **Canary tokens** — Real-time prompt injection detection
|
|
143
|
+
- **Tamper-proof audit logs** — Hash-chain audit trail
|
|
144
|
+
- **Egress filtering + DLP** — Prevents data exfiltration and credential leaks
|
|
145
|
+
- **Signed skills (GulamaHub)** — Ed25519 verification prevents supply-chain attacks
|
|
146
|
+
- **TOTP authentication** — Time-based one-time passwords for API access
|
|
147
|
+
- **Rate limiting** — Per-IP request throttling
|
|
148
|
+
- **Input validation** — Content scanning and sanitization
|
|
149
|
+
- **Loopback binding** — Gateway binds 127.0.0.1 only (never 0.0.0.0 without explicit flag)
|
|
150
|
+
- **Threat detection** — Brute force, privilege escalation, anomaly detection
|
|
151
|
+
- **RBAC** — Role-based access control with team management
|
|
152
|
+
- **SSO/API keys** — OIDC, SAML, API key authentication
|
|
153
|
+
- **Security headers** — HSTS, CSP, X-Frame-Options, and more
|
|
154
|
+
|
|
155
|
+
## Quick Start
|
|
156
|
+
|
|
157
|
+
### One-Line Install
|
|
158
|
+
|
|
159
|
+
```bash
|
|
160
|
+
pip install gulama
|
|
161
|
+
```
|
|
162
|
+
|
|
163
|
+
### With All Features
|
|
164
|
+
|
|
165
|
+
```bash
|
|
166
|
+
pip install gulama[full]
|
|
167
|
+
```
|
|
168
|
+
|
|
169
|
+
### Setup
|
|
170
|
+
|
|
171
|
+
```bash
|
|
172
|
+
gulama setup
|
|
173
|
+
```
|
|
174
|
+
|
|
175
|
+
The setup wizard walks you through:
|
|
176
|
+
1. Creating a master password (encrypts all credentials)
|
|
177
|
+
2. Choosing your LLM provider and entering your API key
|
|
178
|
+
3. Setting your autonomy level
|
|
179
|
+
4. Optional channel configuration
|
|
180
|
+
|
|
181
|
+
### Run
|
|
182
|
+
|
|
183
|
+
```bash
|
|
184
|
+
# Interactive CLI chat
|
|
185
|
+
gulama chat
|
|
186
|
+
|
|
187
|
+
# Start the gateway server (REST API + WebSocket)
|
|
188
|
+
gulama start
|
|
189
|
+
|
|
190
|
+
# Start with specific channel
|
|
191
|
+
gulama start --channel telegram
|
|
192
|
+
gulama start --channel discord
|
|
193
|
+
gulama start --channel matrix
|
|
194
|
+
|
|
195
|
+
# Start with always-on voice
|
|
196
|
+
gulama start --voice-wake
|
|
197
|
+
|
|
198
|
+
# Security health check
|
|
199
|
+
gulama doctor
|
|
200
|
+
```
|
|
201
|
+
|
|
202
|
+
### Docker
|
|
203
|
+
|
|
204
|
+
```bash
|
|
205
|
+
# Standard deployment
|
|
206
|
+
docker compose up -d
|
|
207
|
+
|
|
208
|
+
# With Redis + ChromaDB
|
|
209
|
+
docker compose --profile full up -d
|
|
210
|
+
|
|
211
|
+
# Cloud deployment (auto-TLS via Caddy)
|
|
212
|
+
docker compose -f docker-compose.yml -f docker-compose.cloud.yml up -d
|
|
213
|
+
```
|
|
214
|
+
|
|
215
|
+
## 19 Built-In Skills
|
|
216
|
+
|
|
217
|
+
| Skill | Description | API/Service |
|
|
218
|
+
|-------|-------------|-------------|
|
|
219
|
+
| **File Manager** | Read, write, search files | Local filesystem |
|
|
220
|
+
| **Shell Exec** | Execute commands in sandbox | OS shell |
|
|
221
|
+
| **Web Search** | Search and fetch web pages | DuckDuckGo/SearXNG |
|
|
222
|
+
| **Notes** | Save/recall facts and preferences | Local memory |
|
|
223
|
+
| **Code Exec** | Run Python/JS/Bash snippets | Sandboxed runtime |
|
|
224
|
+
| **Browser** | Navigate, screenshot, AI browsing | Playwright + browser-use |
|
|
225
|
+
| **Email** | Read, compose, send emails | IMAP/SMTP |
|
|
226
|
+
| **Calendar** | Manage events and schedules | Google Calendar/CalDAV |
|
|
227
|
+
| **MCP Bridge** | Connect to MCP servers | Model Context Protocol |
|
|
228
|
+
| **Voice** | Speech-to-text and text-to-speech | Whisper/Deepgram/ElevenLabs |
|
|
229
|
+
| **Image Gen** | Generate images from text | DALL-E/Stability AI/Replicate |
|
|
230
|
+
| **Smart Home** | Control IoT devices | Home Assistant |
|
|
231
|
+
| **GitHub** | Repos, issues, PRs, code search | GitHub API |
|
|
232
|
+
| **Notion** | Pages, databases, search | Notion API |
|
|
233
|
+
| **Spotify** | Playback, search, playlists | Spotify Web API |
|
|
234
|
+
| **Twitter/X** | Tweet search, user info | Twitter API v2 |
|
|
235
|
+
| **Google Docs** | Docs, Sheets, Drive | Google Workspace APIs |
|
|
236
|
+
| **Productivity** | Trello, Linear, Todoist, Obsidian | Multi-service |
|
|
237
|
+
| **Self-Modify** | AI writes its own new skills | Runtime skill authoring |
|
|
238
|
+
|
|
239
|
+
## 8 Communication Channels
|
|
240
|
+
|
|
241
|
+
| Channel | Status | Protocol |
|
|
242
|
+
|---------|--------|----------|
|
|
243
|
+
| **CLI** | Ready | Interactive terminal |
|
|
244
|
+
| **Telegram** | Ready | Bot API |
|
|
245
|
+
| **Discord** | Ready | discord.py |
|
|
246
|
+
| **Slack** | Ready | Slack SDK + Webhooks |
|
|
247
|
+
| **WhatsApp** | Ready | Cloud API |
|
|
248
|
+
| **Matrix** | Ready | matrix-nio (E2E encrypted) |
|
|
249
|
+
| **Microsoft Teams** | Ready | Bot Framework webhooks |
|
|
250
|
+
| **Google Chat** | Ready | Workspace webhooks |
|
|
251
|
+
|
|
252
|
+
Plus: **Web UI** channel and **Voice Wake** (always-on "Hey Gulama" listener).
|
|
253
|
+
|
|
254
|
+
## Universal LLM Support
|
|
255
|
+
|
|
256
|
+
Works with **any** LLM provider via LiteLLM:
|
|
257
|
+
|
|
258
|
+
| Provider | Models |
|
|
259
|
+
|----------|--------|
|
|
260
|
+
| Anthropic | Claude Sonnet 4.5, Opus 4.6, Haiku 4.5 |
|
|
261
|
+
| OpenAI | GPT-4o, o1, o3-mini |
|
|
262
|
+
| Google | Gemini 2.0 Flash, Pro |
|
|
263
|
+
| DeepSeek | DeepSeek Chat, Reasoner |
|
|
264
|
+
| Alibaba | Qwen Plus, Max, Turbo |
|
|
265
|
+
| Groq | Llama 3.3, Mixtral |
|
|
266
|
+
| Ollama | Any local model |
|
|
267
|
+
| Together AI | Llama, Mistral, and more |
|
|
268
|
+
| AWS Bedrock | All Bedrock models |
|
|
269
|
+
| Azure OpenAI | All Azure models |
|
|
270
|
+
| 90+ more | Any OpenAI-compatible endpoint |
|
|
271
|
+
|
|
272
|
+
## GulamaHub — Secure Skill Marketplace
|
|
273
|
+
|
|
274
|
+
Unlike other agent platforms, **every community skill must be Ed25519-signed**. No exceptions.
|
|
275
|
+
|
|
276
|
+
```bash
|
|
277
|
+
# Search skills
|
|
278
|
+
gulama hub search "weather"
|
|
279
|
+
|
|
280
|
+
# Install (signature verified automatically)
|
|
281
|
+
gulama hub install weather-checker
|
|
282
|
+
|
|
283
|
+
# Publish your own (signing required)
|
|
284
|
+
gulama hub publish my-skill --sign
|
|
285
|
+
```
|
|
286
|
+
|
|
287
|
+
The agent can also **write its own skills** at runtime via the Self-Modify skill — with full sandboxing and security scanning.
|
|
288
|
+
|
|
289
|
+
## Architecture
|
|
290
|
+
|
|
291
|
+
```
|
|
292
|
+
┌──────────────────────────────────────────────────────────┐
|
|
293
|
+
│ Channels (8) │
|
|
294
|
+
│ CLI │ Telegram │ Discord │ Slack │ WhatsApp │ Matrix │
|
|
295
|
+
│ Teams │ Google Chat │ Web UI │ Voice Wake │
|
|
296
|
+
├──────────────────────────────────────────────────────────┤
|
|
297
|
+
│ Gateway (FastAPI) — 29 Routes │
|
|
298
|
+
│ TOTP Auth │ Rate Limit │ CORS │ Security Headers │
|
|
299
|
+
├──────────────────────────────────────────────────────────┤
|
|
300
|
+
│ Agent Brain │
|
|
301
|
+
│ Context Builder (RAG) │ LLM Router │ Tool Calling Loop │
|
|
302
|
+
│ Sub-Agent Manager │ Task Scheduler │
|
|
303
|
+
├──────────────────────────────────────────────────────────┤
|
|
304
|
+
│ Security Layer (15+) │
|
|
305
|
+
│ Policy Engine │ Sandbox │ Canary │ Audit │ DLP │ Egress │
|
|
306
|
+
│ RBAC │ SSO │ Threat Detection │ Input Validation │
|
|
307
|
+
├──────────────────────────────────────────────────────────┤
|
|
308
|
+
│ Skills (19 Built-in + Marketplace) │
|
|
309
|
+
│ Files │ Shell │ Web │ Browser │ Email │ Calendar │ Voice │
|
|
310
|
+
│ GitHub │ Notion │ Spotify │ Google Docs │ Self-Modify │
|
|
311
|
+
├──────────────────────────────────────────────────────────┤
|
|
312
|
+
│ Storage Layer │
|
|
313
|
+
│ Encrypted SQLite │ ChromaDB (RAG) │ Secrets Vault │
|
|
314
|
+
│ Hash-Chain Audit │ Disk Cache │
|
|
315
|
+
├──────────────────────────────────────────────────────────┤
|
|
316
|
+
│ Debug & Monitoring │
|
|
317
|
+
│ WebSocket Debug Stream │ Cost Tracking │ Token Budgets │
|
|
318
|
+
└──────────────────────────────────────────────────────────┘
|
|
319
|
+
```
|
|
320
|
+
|
|
321
|
+
## REST API (29 Endpoints)
|
|
322
|
+
|
|
323
|
+
| Endpoint | Description |
|
|
324
|
+
|----------|-------------|
|
|
325
|
+
| `POST /api/v1/chat` | Send message to agent |
|
|
326
|
+
| `GET /api/v1/status` | Agent status and stats |
|
|
327
|
+
| `GET /api/v1/skills` | List all registered skills |
|
|
328
|
+
| `GET /api/v1/agents` | List background sub-agents |
|
|
329
|
+
| `POST /api/v1/agents/spawn` | Spawn background agent |
|
|
330
|
+
| `GET /api/v1/scheduler/tasks` | List scheduled tasks |
|
|
331
|
+
| `GET /api/v1/hub/search` | Search skill marketplace |
|
|
332
|
+
| `GET /api/v1/conversations` | List conversations |
|
|
333
|
+
| `GET /api/v1/audit` | View audit log |
|
|
334
|
+
| `GET /api/v1/cost/today` | Token usage and cost |
|
|
335
|
+
| `GET /api/v1/debug/events` | Debug event stream |
|
|
336
|
+
| `ws://localhost:18789/ws/chat` | Real-time WebSocket chat |
|
|
337
|
+
| `ws://localhost:18789/ws/debug` | Live debug inspector |
|
|
338
|
+
|
|
339
|
+
## Autonomy Levels
|
|
340
|
+
|
|
341
|
+
| Level | Name | Behavior |
|
|
342
|
+
|-------|------|----------|
|
|
343
|
+
| 0 | Observer | Ask before every action |
|
|
344
|
+
| 1 | Assistant | Auto-read, ask before writes |
|
|
345
|
+
| 2 | Co-pilot | Auto safe actions, ask before shell/network |
|
|
346
|
+
| 3 | Autopilot-cautious | Auto most things, ask before destructive |
|
|
347
|
+
| 4 | Autopilot | Auto everything except financial/credential |
|
|
348
|
+
|
|
349
|
+
## Development
|
|
350
|
+
|
|
351
|
+
```bash
|
|
352
|
+
# Clone
|
|
353
|
+
git clone https://github.com/san-techie21/gulama-bot.git
|
|
354
|
+
cd gulama-bot
|
|
355
|
+
|
|
356
|
+
# Setup dev environment
|
|
357
|
+
pip install -e ".[dev]"
|
|
358
|
+
|
|
359
|
+
# Run tests (209 tests)
|
|
360
|
+
python -m pytest tests/ -v
|
|
361
|
+
|
|
362
|
+
# Security health check
|
|
363
|
+
gulama doctor --json-output
|
|
364
|
+
|
|
365
|
+
# Lint
|
|
366
|
+
ruff check src/
|
|
367
|
+
```
|
|
368
|
+
|
|
369
|
+
## Configuration
|
|
370
|
+
|
|
371
|
+
Configuration is loaded from:
|
|
372
|
+
1. `config/default.toml` (secure defaults)
|
|
373
|
+
2. `~/.gulama/config.toml` (user overrides)
|
|
374
|
+
3. Environment variables (`GULAMA_*`)
|
|
375
|
+
4. `.env` file (for secrets — see `.env.example`)
|
|
376
|
+
|
|
377
|
+
Key security defaults (cannot be disabled without `--i-know-what-im-doing`):
|
|
378
|
+
- Gateway binds to `127.0.0.1` only
|
|
379
|
+
- Sandbox enabled
|
|
380
|
+
- Policy engine enabled
|
|
381
|
+
- Audit logging enabled
|
|
382
|
+
- Skill signatures required
|
|
383
|
+
|
|
384
|
+
## Deployment
|
|
385
|
+
|
|
386
|
+
| Method | Command | Use Case |
|
|
387
|
+
|--------|---------|----------|
|
|
388
|
+
| **pip install** | `pip install gulama` | Local development |
|
|
389
|
+
| **Docker** | `docker compose up -d` | Self-hosted server |
|
|
390
|
+
| **Cloud** | `docker compose -f ... up -d` | DigitalOcean/AWS/GCP |
|
|
391
|
+
| **Docker + TLS** | With `docker-compose.cloud.yml` | Production with auto-HTTPS |
|
|
392
|
+
|
|
393
|
+
## vs OpenClaw
|
|
394
|
+
|
|
395
|
+
| Feature | Gulama | OpenClaw |
|
|
396
|
+
|---------|--------|----------|
|
|
397
|
+
| Security mechanisms | 15+ | ~0 |
|
|
398
|
+
| Memory encryption | AES-256-GCM | None |
|
|
399
|
+
| Skill signing | Ed25519 mandatory | None (341 malicious skills found) |
|
|
400
|
+
| LLM providers | 100+ (LiteLLM) | ~5 |
|
|
401
|
+
| Policy engine | Cedar-inspired | None |
|
|
402
|
+
| Sandbox | bubblewrap/Docker | Container-only |
|
|
403
|
+
| Audit trail | Hash-chain | Basic logs |
|
|
404
|
+
| Cost controls | Per-day budgets | None |
|
|
405
|
+
| Self-modifying skills | Yes (sandboxed) | No |
|
|
406
|
+
| License | MIT | MIT |
|
|
407
|
+
|
|
408
|
+
## License
|
|
409
|
+
|
|
410
|
+
MIT License. See [LICENSE](LICENSE).
|
|
411
|
+
|
|
412
|
+
## Security
|
|
413
|
+
|
|
414
|
+
Found a vulnerability? Please report it responsibly via [GitHub Issues](https://github.com/san-techie21/gulama-bot/issues) with the `security` label.
|
|
415
|
+
|
|
416
|
+
---
|
|
417
|
+
|
|
418
|
+
**Built with security as the #1 priority by [Astra Fintech Labs](https://astrafintechlabs.com).**
|