{"id":31818086,"url":"https://github.com/amotivv/limitless-memory-box","last_synced_at":"2025-10-11T10:51:15.182Z","repository":{"id":318354872,"uuid":"1030404082","full_name":"amotivv/limitless-memory-box","owner":"amotivv","description":"Limitless Pendant to Memory Box Sync Agent allows scheduled retrieval of Limitless Pendant data with semantic vector storage in Memory Box. Any Memory Box client (LLM) can access Limitless pendant data.","archived":false,"fork":false,"pushed_at":"2025-10-06T16:56:46.000Z","size":105,"stargazers_count":0,"open_issues_count":0,"forks_count":0,"subscribers_count":0,"default_branch":"main","last_synced_at":"2025-10-06T18:42:10.858Z","etag":null,"topics":["ai","limitless","memory","memory-box","pendant"],"latest_commit_sha":null,"homepage":"https://memorybox.dev","language":"Python","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/amotivv.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2025-08-01T15:23:27.000Z","updated_at":"2025-10-06T16:56:50.000Z","dependencies_parsed_at":"2025-10-06T18:42:13.281Z","dependency_job_id":null,"html_url":"https://github.com/amotivv/limitless-memory-box","commit_stats":null,"previous_names":["amotivv/limitless-memory-box"],"tags_count":null,"template":false,"template_full_name":null,"purl":"pkg:github/amotivv/limitless-memory-box","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/amotivv%2Flimitless-memory-box","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/amotivv%2Flimitless-memory-box/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/amotivv%2Flimitless-memory-box/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/amotivv%2Flimitless-memory-box/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/amotivv","download_url":"https://codeload.github.com/amotivv/limitless-memory-box/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/amotivv%2Flimitless-memory-box/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":279006866,"owners_count":26084208,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","status":"online","status_checked_at":"2025-10-11T02:00:06.511Z","response_time":55,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["ai","limitless","memory","memory-box","pendant"],"created_at":"2025-10-11T10:51:03.340Z","updated_at":"2025-10-11T10:51:15.174Z","avatar_url":"https://github.com/amotivv.png","language":"Python","funding_links":[],"categories":[],"sub_categories":[],"readme":"# 🧠 Limitless to Memory Box Sync Agent\n\n\u003e **Transform your Limitless Pendant conversations into a searchable, semantic memory layer accessible by any AI system**\n\n[![Docker](https://img.shields.io/badge/docker-ready-2496ED?logo=docker)](https://www.docker.com/)\n[![Python](https://img.shields.io/badge/python-3.11-3776AB?logo=python)](https://www.python.org/)\n[![License](https://img.shields.io/badge/license-MIT-green)](LICENSE)\n\n## 🌟 Overview\n\nThis sync agent enables you to synchronize your Limitless Pendant lifelog data to Memory Box, creating a **vendor-agnostic semantic memory layer** that can be accessed by any AI system with Memory Box integration.\n\n### Key Benefits\n\n- **🔓 Vendor Independence**: Access your lifelog data from any AI provider with Memory Box support\n- **🧩 Composable Architecture**: Modular design allows extension for additional data sources or consumers\n- **🎯 Semantic Search**: Query your memories using natural language through Memory Box's search API\n- **📊 Full Content**: Stores complete conversation transcripts with metadata\n- **🔐 Data Control**: Your memories are stored in your own Memory Box instance\n\n## 🚀 What It Does\n\nThe Limitless to Memory Box Sync Agent continuously synchronizes your Limitless Pendant lifelog data to Memory Box, creating a persistent, searchable memory layer for AI applications.\n\n### Key Features\n\n- **Incremental Sync**: Only processes new lifelogs, preventing duplicates\n- **Intelligent Categorization**: Automatically classifies conversations (meetings, technical discussions, decisions, etc.)\n- **Speaker Attribution**: Preserves who said what in multi-person conversations\n- **Production Ready**: Health checks, monitoring, error handling, and notifications\n- **Full Content Preservation**: Stores complete transcripts with rich metadata\n\n## 🏗️ Architecture\n\n```mermaid\ngraph LR\n    A[Limitless Pendant] --\u003e|Lifelogs| B[Sync Agent]\n    B --\u003e|Formatted Memories| C[Memory Box]\n    C --\u003e|Semantic Search| D[Any LLM]\n    \n    subgraph \"Sync Agent Components\"\n        B1[Rate Limiter]\n        B2[Content Processor]\n        B3[State Tracker]\n        B4[Health Monitor]\n    end\n    \n    B --\u003e B1\n    B --\u003e B2\n    B --\u003e B3\n    B --\u003e B4\n```\n\n## 📦 Installation\n\n### Prerequisites\n\n- Docker and Docker Compose\n- Limitless API Key (from [app.limitless.ai](https://app.limitless.ai))\n- Memory Box API Key\n- (Optional) Mailgun API credentials for notifications\n\n### Quick Start\n\n1. **Clone the repository**\n   ```bash\n   git clone https://github.com/amotivv/limitless-memory-box.git\n   cd limitless-memory-box\n   ```\n\n2. **Configure environment**\n   ```bash\n   cp .env.template .env\n   # Edit .env with your API keys\n   ```\n\n3. **Start the sync agent**\n   ```bash\n   docker-compose up -d\n   ```\n\n4. **Check health status**\n   ```bash\n   curl http://localhost:8080/health | jq '.'\n   ```\n\n## 🔧 Configuration\n\n### Environment Variables\n\n| Variable | Description | Required |\n|----------|-------------|----------|\n| `LIMITLESS_API_KEY` | Your Limitless API key | ✅ |\n| `MEMORYBOX_API_KEY` | Your Memory Box user ID | ✅ |\n| `MEMORYBOX_API_URL` | Memory Box API endpoint | ✅ |\n| `MEMORYBOX_BUCKET` | Bucket name for memories | ✅ |\n| `SYNC_INTERVAL_MINUTES` | How often to sync (default: 30) | ❌ |\n| `TIMEZONE` | Your timezone (default: America/New_York) | ❌ |\n\n### Advanced Configuration\n\nSee [.env.template](.env.template) for all available options including:\n- Rate limiting controls\n- Notification settings\n- Health check configuration\n- Logging levels\n\n## 📊 Monitoring\n\n### Health Check Endpoints\n\n- `GET /health` - Basic health status\n- `GET /health/detailed` - Detailed system information\n- `GET /health/ready` - Kubernetes readiness probe\n- `GET /health/live` - Kubernetes liveness probe\n\n### Database Maintenance\n\nCheck sync status:\n```bash\ndocker-compose exec limitless-sync sqlite3 /app/data/limitless_sync.db \\\n  \"SELECT * FROM sync_state;\"\n```\n\nView recent syncs:\n```bash\ndocker-compose exec limitless-sync sqlite3 /app/data/limitless_sync.db \\\n  \"SELECT lifelog_id, title, synced_at FROM synced_lifelogs ORDER BY synced_at DESC LIMIT 10;\"\n```\n\nSee [DATABASE_MAINTENANCE.md](DATABASE_MAINTENANCE.md) for comprehensive database management commands.\n\n## 🧠 How Memories Are Processed\n\n### Content Enhancement\n\nEach lifelog is intelligently processed to maximize searchability and context:\n\n```markdown\n# Meeting with Product Team\n\n## Metadata\n**Date:** 2025-08-01 14:30\n**Duration:** 45 minutes\n**Type:** MEETING\n**Participants:** John, Sarah, Mike\n\n## Content\n[Full conversation transcript with speaker attribution]\n\n## Key Points\n- Decided to prioritize mobile app development\n- Q3 timeline approved\n- Budget allocated for two additional developers\n\n---\n**Tags:** meeting, product, decision, august-2025, afternoon\n```\n\n### Conversation Types\n\nThe system automatically categorizes conversations:\n- **MEETING**: Standups, reviews, planning sessions\n- **TECHNICAL**: Code discussions, debugging, architecture\n- **DECISION**: Strategic choices, planning, conclusions\n- **PERSONAL**: Casual conversations, personal notes\n- **CONVERSATION**: General discussions\n\n## 🔍 Accessing Your Memories\n\nOnce synced to Memory Box, your memories can be accessed by any system with Memory Box integration:\n\n### For LLMs\n```python\n# Any LLM with Memory Box access can query your lifelogs\nresponse = memory_box.search(\n    query=\"What did we decide about the mobile app?\",\n    bucket=\"your-lifelog-bucket\"\n)\n```\n\n### Direct API Access\n```bash\ncurl -X GET \"https://your-memorybox-url/api/v2/memory\" \\\n  -H \"Authorization: Bearer YOUR_API_KEY\" \\\n  -d \"query=meeting+with+product+team\"\n```\n\n## 🛠️ Troubleshooting\n\n### Common Issues\n\n1. **Health check shows unhealthy**\n   - Check logs: `docker-compose logs -f limitless-sync`\n   - Verify API keys are correct\n   - Ensure Memory Box is accessible\n\n2. **No new lifelogs syncing**\n   - Check Limitless API: See [LIMITLESS_API_TROUBLESHOOTING.md](LIMITLESS_API_TROUBLESHOOTING.md)\n   - Verify sync is running: `curl http://localhost:8080/health/detailed`\n\n3. **Rate limiting errors**\n   - The agent handles rate limits automatically\n   - Adjust `RATE_LIMIT_REQUESTS_PER_MINUTE` if needed\n\n## 🚀 Advanced Usage\n\n### Custom Memory Processing\n\nExtend the content processor for custom formatting:\n\n```python\n# src/content_processor.py\ndef process_lifelog(self, entry: LifelogEntry):\n    # Add your custom processing logic\n    pass\n```\n\n### Multi-User Support\n\nDeploy multiple instances with different configurations. This is a conceptual example - additional configuration required:\n\n```yaml\n# docker-compose.multi-user.yml (conceptual example)\nservices:\n  sync-user1:\n    extends:\n      file: docker-compose.yml\n      service: limitless-sync\n    container_name: limitless-memory-sync-user1\n    environment:\n      - LIMITLESS_API_KEY=${USER1_LIMITLESS_KEY}\n      - MEMORYBOX_API_KEY=${USER1_MEMORYBOX_KEY}\n      - MEMORYBOX_BUCKET=user1-lifelogs\n    volumes:\n      - ./data/user1:/app/data\n      - ./logs/user1:/app/logs\n    ports:\n      - \"8081:8080\"\n  \n  sync-user2:\n    extends:\n      file: docker-compose.yml\n      service: limitless-sync\n    container_name: limitless-memory-sync-user2\n    environment:\n      - LIMITLESS_API_KEY=${USER2_LIMITLESS_KEY}\n      - MEMORYBOX_API_KEY=${USER2_MEMORYBOX_KEY}\n      - MEMORYBOX_BUCKET=user2-lifelogs\n    volumes:\n      - ./data/user2:/app/data\n      - ./logs/user2:/app/logs\n    ports:\n      - \"8082:8080\"\n```\n\n**Note:** Each user instance requires:\n- Separate API keys for both Limitless and Memory Box\n- Unique data and log directories\n- Different host ports for health check endpoints\n- All other required environment variables (see `.env.template`)\n\n## 🤝 Contributing\n\nWe welcome contributions! Please open an issue to discuss proposed changes or submit a pull request.\n\n### Development Setup\n\n```bash\n# Create virtual environment\npython -m venv venv\nsource venv/bin/activate\n\n# Install dependencies\npip install -r requirements.txt\n\n# Run tests\npytest tests/\n```\n\n## 📈 Future Roadmap\n\n- **Real-time streaming**: Process lifelogs as they're created\n- **Multi-modal support**: Images, audio clips from conversations\n- **Privacy controls**: Fine-grained control over what gets synced\n- **Analytics dashboard**: Visualize your conversation patterns\n- **Additional integrations**: Support for other wearables and data sources\n\n## 🙏 Acknowledgments\n\nThis project integrates with:\n- [Limitless](https://limitless.ai) - Wearable AI device and API\n- [Memory Box](https://memorybox.dev) - Semantic memory storage system by amotivv, inc.\n\n## 📄 License\n\nThis project is licensed under the MIT License - see the [LICENSE](LICENSE) file for details.\n\n---\n\n\u003cdiv align=\"center\"\u003e\n\n[Report Bug](https://github.com/amotivv/limitless-memory-box/issues) · [Request Feature](https://github.com/amotivv/limitless-memory-box/issues) · [Documentation](https://github.com/amotivv/limitless-memory-box/wiki)\n\n\u003c/div\u003e\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Famotivv%2Flimitless-memory-box","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Famotivv%2Flimitless-memory-box","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Famotivv%2Flimitless-memory-box/lists"}