@clawhub-alexburrstudio-576d884430
📊 Read meter readings from photos. Electricity (day/night tariffs) and water meters. Saves history and generates messages for landlord.
---
name: AB-Agents-Meter-Reader
description: "📊 Read meter readings from photos. Electricity (day/night tariffs) and water meters. Saves history and generates messages for landlord."
version: 1.0.0
author: AB-Agents
homepage: https://github.com/alexburrstudio/ab-agents-meter-reader
license: MIT
tags: ["meters", "utilities", "readings", "electricity", "water", "ab-agents"]
acceptLicenseTerms: true
---
# AB Agents Meter Reader 📊
Read meter readings from photos — electricity and water meters.
## Features
- ⚡ Read electricity meters (single or dual tariff)
- 💧 Read water meters (hot and cold)
- 📝 Save readings history with dates
- 📨 Generate message for landlord
- 🔄 Track multiple apartments
## Setup
### Requirements
- MiniMax Token Plan API key (for vision)
- Linux/macOS
### Quick Start
```bash
# First run - it will ask questions
./meter-reader.sh
# Later runs - just send photos
./meter-reader.sh photo.jpg
```
## First Run Setup
The script will ask:
1. **Tenant name** — your name
2. **Apartment address** — full address
3. **Meter layout** — how to tell meters apart:
- "left=hot,right=cold" (default)
- Or custom description
## Supported Meter Types
### Electricity
- Single tariff
- Dual tariff (day/night) — T1=day, T2=night
- Multi-tariff (cycle through screens)
### Water
- Cold water (usually on left)
- Hot water (usually on right)
- Cubic meters (m³)
## Usage
```bash
# Interactive mode (asks for photo)
./meter-reader.sh
# With photo
./meter-reader.sh /path/to/meter.jpg
# Generate message for landlord
./meter-reader.sh --message
```
## How It Works
1. Analyzes photo using MiniMax VL API
2. Identifies meter type automatically
3. Reads the numbers
4. Saves to readings history
5. Generates formatted message
## History
Readings saved to: `~/.meter-readings/history.json`
Format:
```json
{
"apartments": {
"address": {
"tenant": "Name",
"layout": "left=hot,right=cold",
"readings": [
{"date": "2026-04-26", "electricity_day": 8495, "electricity_night": 3008, "water_cold": 423, "water_hot": 240}
]
}
}
}
```
## Troubleshooting
| Issue | Solution |
|-------|----------|
| Wrong numbers | Check meter photo quality, ensure numbers are clear |
| Can't identify meter type | Name photo file: `electricity.jpg`, `water.jpg` |
| Vision error | Check MINIMAX_API_KEY is set |
---
**AB-Agents** 🦀
## Requirements
👁️ **[AB Agents Vision (MiniMax)](https://github.com/alexburrstudio/ab-agents-vision)** — Required for image analysis. Install first:
```bash
clawhub install AB-Agents-Vision-MiniMax
```
---
**AB-Agents** 🦀
FILE:meter-reader.sh
#!/bin/bash
# AB Agents Meter Reader
# Reads meter readings from photos
set -euo pipefail
SCRIPT_DIR="$(cd "$(dirname "BASH_SOURCE[0]")" && pwd)"
CONFIG_DIR="HOME/.meter-readings"
CONFIG_FILE="CONFIG_DIR/config.json"
HISTORY_FILE="CONFIG_DIR/history.json"
# Colors
RED='\033[0;31m'
GREEN='\033[0;32m'
YELLOW='\033[1;33m'
NC='\033[0m'
# Load config
load_config() {
if [[ -f "$CONFIG_FILE" ]]; then
TENANT_NAME=$(cat "$CONFIG_FILE" | python3 -c "import json,sys; print(json.load(sys.stdin).get('tenant_name',''))" 2>/dev/null || echo "")
APARTMENT_ADDR=$(cat "$CONFIG_FILE" | python3 -c "import json,sys; print(json.load(sys.stdin).get('apartment_address',''))" 2>/dev/null || echo "")
METER_LAYOUT=$(cat "$CONFIG_FILE" | python3 -c "import json,sys; print(json.load(sys.stdin).get('meter_layout','left=hot,right=cold'))" 2>/dev/null || echo "left=hot,right=cold")
else
TENANT_NAME=""
APARTMENT_ADDR=""
METER_LAYOUT="left=hot,right=cold"
fi
}
# Save config
save_config() {
mkdir -p "$CONFIG_DIR"
cat > "$CONFIG_FILE" << EOF
{
"tenant_name": "$TENANT_NAME",
"apartment_address": "$APARTMENT_ADDR",
"meter_layout": "$METER_LAYOUT"
}
EOF
}
# Setup (first run)
setup() {
echo -e "YELLOW=== First Run Setup ===NC"
echo ""
read -p "Your name (tenant): " TENANT_NAME
read -p "Apartment address: " APARTMENT_ADDR
echo ""
echo "Meter layout - how to tell hot/cold water apart?"
echo " 1) left=hot,right=cold (default)"
echo " 2) left=cold,right=hot"
echo " 3) Custom description"
read -p "Choice [1]: " LAYOUT_CHOICE
case "$LAYOUT_CHOICE" in
2) METER_LAYOUT="left=cold,right=hot" ;;
3) read -p "Custom layout: " METER_LAYOUT ;;
*) METER_LAYOUT="left=hot,right=cold" ;;
esac
save_config
echo -e "GREEN✓ Setup complete!NC"
echo ""
}
# Analyze meter photo
analyze_meter() {
local IMAGE_PATH="$1"
local PROMPT="$2"
source /root/.openclaw/.minimax-env 2>/dev/null || true
if [[ -z "-" ]]; then
echo -e "REDError: MINIMAX_API_KEY not setNC"
exit 1
fi
# MCP call
{
echo '{"jsonrpc":"2.0","id":1,"method":"initialize","params":{"protocolVersion":"2024-11-05","capabilities":{},"clientInfo":{"name":"meter-reader","version":"1.0"}}}'
sleep 1
echo "{\"jsonrpc\":\"2.0\",\"id\":2,\"method\":\"tools/call\",\"params\":{\"name\":\"understand_image\",\"arguments\":{\"prompt\":\"$PROMPT\",\"image_source\":\"$IMAGE_PATH\"}}}"
} | uvx minimax-coding-plan-mcp 2>/dev/null | python3 -c "
import json, sys
for line in sys.stdin:
try:
resp = json.loads(line)
if resp.get('id') == 2 and 'result' in resp:
for item in resp['result'].get('content', []):
if item.get('type') == 'text' and not item.get('isError'):
print(item['text'])
exit(0)
except: continue
"
}
# Parse reading from vision output
parse_reading() {
local text="$1"
local pattern="$2"
# Try to extract number
echo "$text" | grep -oE "[0-9]{4,}" | head -1 || echo ""
}
# Read electricity meter
read_electricity() {
local IMAGE_PATH="$1"
local TYPE="$2" # single, dual
echo -e "YELLOWAnalyzing electricity meter...NC"
if [[ "$TYPE" == "dual" ]]; then
# Day (T1)
echo -n "Day (T1): "
RESULT=$(analyze_meter "$IMAGE_PATH" "Это электрический счётчик. Какая цифра слева - 1 или 2? Какое число на экране в кВтч? Ответ: T1=число")
echo "$RESULT"
# Night (T2) - ask for second reading
echo "If meter shows T2, what's the number?"
echo "(If same photo shows both, tell me both T1 and T2 readings)"
else
echo -n "Reading: "
RESULT=$(analyze_meter "$IMAGE_PATH" "Это электрический счётчик. Какое число на экране в кВтч?")
echo "$RESULT"
fi
}
# Read water meter
read_water() {
local IMAGE_PATH="$1"
echo -e "YELLOWAnalyzing water meters...NC"
RESULT=$(analyze_meter "$IMAGE_PATH" "Это счётчики воды. Слева обычно холодная, справа горячая. Какие числа показаны в кубометрах? Ответ формат: холодная=число, горячая=число")
echo "$RESULT"
}
# Save reading
save_reading() {
local DATE=$(date +%Y-%m-%d)
local ELEC_DAY="$1"
local ELEC_NIGHT="$2"
local WATER_COLD="$3"
local WATER_HOT="$4"
mkdir -p "$CONFIG_DIR"
# Create or update history
if [[ -f "$HISTORY_FILE" ]]; then
# Add new reading
python3 << PY
import json
with open("$HISTORY_FILE", 'r') as f:
data = json.load(f)
if "readings" not in data:
data["readings"] = []
data["readings"].append({
"date": "$DATE",
"electricity_day": $ELEC_DAY,
"electricity_night": $ELEC_NIGHT,
"water_cold": $WATER_COLD,
"water_hot": $WATER_HOT
})
with open("$HISTORY_FILE", 'w') as f:
json.dump(data, f, indent=2)
PY
else
cat > "$HISTORY_FILE" << EOF
{
"config": {
"tenant": "$TENANT_NAME",
"address": "$APARTMENT_ADDR",
"layout": "$METER_LAYOUT"
},
"readings": [
{
"date": "$DATE",
"electricity_day": $ELEC_DAY,
"electricity_night": $ELEC_NIGHT,
"water_cold": $WATER_COLD,
"water_hot": $WATER_HOT
}
]
}
EOF
fi
echo -e "GREEN✓ Reading saved!NC"
}
# Generate message for landlord
generate_message() {
local DATE=$(date +%Y-%m-%d)
# Get latest reading
if [[ -f "$HISTORY_FILE" ]]; then
LAST=$(python3 -c "
import json
with open('$HISTORY_FILE', 'r') as f:
data = json.load(f)
readings = data.get('readings', [])
if readings:
r = readings[-1]
print(f\"{r['electricity_day']}|{r['electricity_night']}|{r['water_cold']}|{r['water_hot']}\")
" 2>/dev/null)
if [[ -n "$LAST" ]]; then
IFS='|' read -r ELEC_DAY ELEC_NIGHT WATER_COLD WATER_HOT <<< "$LAST"
cat << EOF
Добрый вечер!
Показания счётчиков на $DATE:
⚡ Электричество:
- День (Т1): $ELEC_DAY кВтч
- Ночь (Т2): $ELEC_NIGHT кВтч
💧 Вода:
- Холодная: $WATER_COLD м³
- Горячая: $WATER_HOT м³
---
Квартира: $APARTMENT_ADDR
Арендатор: $TENANT_NAME
EOF
return
fi
fi
echo "No readings found. Run meter-reader.sh first."
}
# Main
load_config
# Check if first run
if [[ -z "$TENANT_NAME" ]] || [[ "$1" == "--setup" ]]; then
setup
fi
case "-" in
--message|-m)
generate_message
;;
--setup)
setup
;;
--history)
cat "$HISTORY_FILE" 2>/dev/null || echo "No history yet"
;;
*)
if [[ $# -eq 0 ]]; then
echo "Usage: meter-reader.sh <photo.jpg> [type]"
echo " type: electricity, water, auto (default)"
exit 1
fi
IMAGE_PATH="$1"
TYPE="-auto"
if [[ ! -f "$IMAGE_PATH" ]]; then
echo -e "REDFile not found: $IMAGE_PATHNC"
exit 1
fi
if [[ "$TYPE" == "auto" ]]; then
# Try to detect type from image
RESULT=$(analyze_meter "$IMAGE_PATH" "Это счётчик электричества или воды? Ответь одним словом: электричество или вода")
if echo "$RESULT" | grep -qi "электричество\|electricity\|счётчик"; then
TYPE="electricity"
else
TYPE="water"
fi
fi
case "$TYPE" in
electricity|elec)
read_electricity "$IMAGE_PATH" dual
;;
water)
read_water "$IMAGE_PATH"
;;
*)
echo -e "REDUnknown type: $TYPENC"
exit 1
;;
esac
;;
esac
👁️ Image analysis via MiniMax VL API. Describe images, extract text from screenshots, analyze photos. Requires MiniMax Token Plan API key (free tier availab...
--- name: AB-Agents-Vision-MiniMax description: "👁️ Image analysis via MiniMax VL API. Describe images, extract text from screenshots, analyze photos. Requires MiniMax Token Plan API key (free tier available)." version: 1.0.1 author: AB-Agents homepage: https://github.com/alexburrstudio/ab-agents-vision license: MIT tags: ["vision", "image", "minimax", "minimax-vl", "ocr", "screenshot", "text-extraction", "ab-agents"] acceptLicenseTerms: true --- # AB Agents Vision (MiniMax) 👁️ Image analysis via MiniMax VL API — simple, fast, reliable. > ⚠️ **Requires MiniMax Token Plan API key** — [get free key](https://platform.minimax.io) ## What It Does - 📸 **Describe images** — Get detailed scene descriptions - 📝 **Extract text** — Read from screenshots, photos, documents - 🔍 **Analyze photos** — Identify objects, people, settings - 🌐 **URL support** — Analyze images from the web ## Requirements - **MiniMax Token Plan API key** — [Subscribe free](https://platform.minimax.io) - Linux/macOS - `uvx` (auto-installed) ## Quick Start ```bash # 1. Install uvx curl -LsSf https://astral.sh/uv/install.sh | sh # 2. Get free MiniMax API key # https://platform.minimax.io → Subscribe → Token Plan (free tier) # 3. Use export MINIMAX_API_KEY="sk-cp-your-key" ./vision.sh image.jpg "Describe this image" ``` ## Usage ```bash # Basic description ./vision.sh photo.jpg # With custom prompt ./vision.sh screenshot.png "What text do you see?" # URL support ./vision.sh "https://example.com/image.jpg" "Describe this" ``` ## Examples **Screenshot analysis:** ``` Input: screenshot.png + "What text is in the image?" Output: "The screenshot shows a code editor with Python code..." ``` **Photo description:** ``` Input: photo.jpg + "Describe in detail" Output: "A person's bare foot and lower leg resting on a brown textured waffle-weave blanket. The skin is light-toned..." ``` ## Installation ```bash git clone https://github.com/alexburrstudio/ab-agents-vision.git cd ab-agents-vision/skills/vision chmod +x vision.sh ``` Or via ClaWHub: ```bash clawhub install AB-Agents-Vision-MiniMax ``` ## Troubleshooting | Error | Solution | |-------|----------| | API Error: 1033 | Retry — MiniMax system error | | No response | Check MINIMAX_API_KEY is set correctly | | Slow | Use smaller images (<10MB) | --- **AB-Agents** 🦀 ## Related Skills 📊 **[AB Agents Meter Reader](https://github.com/alexburrstudio/ab-agents-meter-reader)** — Read meter readings from photos (uses this skill for vision) --- **AB-Agents** 🦀 FILE:vision.sh #!/bin/bash export MINIMAX_API_KEY="-$(cat /root/.openclaw/.minimax-env 2>/dev/null | grep MINIMAX_API_KEY | cut -d'"' -f2)" export MINIMAX_API_HOST="-https://api.minimax.io" export PATH="/root/.local/bin:$PATH" IMAGE_PATH="$1" PROMPT="-Describe this image in detail" if [ -z "$IMAGE_PATH" ]; then echo "Usage: vision.sh <image_path> [prompt]" exit 1 fi { echo '{"jsonrpc":"2.0","id":1,"method":"initialize","params":{"protocolVersion":"2024-11-05","capabilities":{},"clientInfo":{"name":"vision","version":"1.0"}}}' sleep 1 echo '{"jsonrpc":"2.0","id":2,"method":"tools/call","params":{"name":"understand_image","arguments":{"prompt":"'"$PROMPT"'","image_source":"'"$IMAGE_PATH"'"}}}' } | uvx minimax-coding-plan-mcp 2>/dev/null | python3 -c " import json, sys for line in sys.stdin: try: resp = json.loads(line) if resp.get('id') == 2 and 'result' in resp: for item in resp['result'].get('content', []): if item.get('type') == 'text' and not item.get('isError'): print(item['text']) sys.exit(0) except: continue "
👁️ Image analysis using MiniMax VL API. Describe images, extract text from screenshots, analyze photos. Works with local files and URLs. Simple shell wrapper.
--- name: AB-Agents-Vision description: "👁️ Image analysis using MiniMax VL API. Describe images, extract text from screenshots, analyze photos. Works with local files and URLs. Simple shell wrapper." version: 1.0.0 author: AB-Agents homepage: https://github.com/alexburrstudio/ab-agents-skills license: MIT tags: ["vision", "image", "minimax", "ocr", "analysis", "ab-agents", "screenshot", "text-extraction"] acceptLicenseTerms: true --- # AB Agents Vision 👁️ Image analysis using MiniMax VL API — simple, fast, reliable. ## What It Does - 📸 **Describe images** — Get detailed scene descriptions - 📝 **Extract text** — Read text from screenshots, photos, documents - 🔍 **Analyze photos** — Identify objects, people, settings - 🌐 **URL support** — Analyze images from the web ## Quick Start ```bash # Install curl -LsSf https://astral.sh/uv/install.sh | sh # Set your MiniMax API key export MINIMAX_API_KEY="sk-cp-your-key" # Use ./vision.sh image.jpg "Describe this image" ``` ## Usage ```bash # Basic description ./vision.sh photo.jpg # With custom prompt ./vision.sh screenshot.png "What text do you see?" # URL support ./vision.sh "https://example.com/image.jpg" "Describe this" ``` ## Requirements - MiniMax Token Plan API key ([get one](https://platform.minimax.io)) - Linux/macOS - `uvx` (auto-installed via script) ## Examples **Screenshot analysis:** ``` Input: screenshot.png + "What text is in the image?" Output: "The screenshot shows a code editor with Python code... ``` **Photo description:** ``` Input: photo.jpg + "Describe in detail" Output: "A person's bare foot and lower leg resting on a brown textured waffle-weave blanket. The skin is light-toned with visible fine hairs..." ``` ## Installation ```bash git clone https://github.com/alexburrstudio/ab-agents-skills.git cd ab-agents-skills/skills/vision chmod +x vision.sh ``` Or via ClaWHub: ```bash clawhub install AB-Agents-Vision ``` ## Troubleshooting | Error | Solution | |-------|----------| | API Error: 1033 | Retry — system error on MiniMax side | | No response | Check MINIMAX_API_KEY is set correctly | | Slow | Use smaller images (<10MB) | --- **AB-Agents** 🦀 FILE:vision.sh #!/bin/bash # AB Agents Vision — MiniMax VL API wrapper export MINIMAX_API_KEY="-$(grep MINIMAX_API_KEY ~/.minimax-env 2>/dev/null | cut -d'"' -f2)" export MINIMAX_API_HOST="-https://api.minimax.io" export PATH="/root/.local/bin:$HOME/.local/bin:$PATH" IMAGE_PATH="$1" PROMPT="-Describe this image in detail" if [ -z "$IMAGE_PATH" ]; then echo "Usage: vision.sh <image_path> [prompt]" exit 1 fi if [ -z "$MINIMAX_API_KEY" ]; then echo "Error: MINIMAX_API_KEY not set" exit 1 fi # MCP call via uvx { echo '{"jsonrpc":"2.0","id":1,"method":"initialize","params":{"protocolVersion":"2024-11-05","capabilities":{},"clientInfo":{"name":"vision","version":"1.0"}}}' sleep 1 echo "{\"jsonrpc\":\"2.0\",\"id\":2,\"method\":\"tools/call\",\"params\":{\"name\":\"understand_image\",\"arguments\":{\"prompt\":\"$PROMPT\",\"image_source\":\"$IMAGE_PATH\"}}}" } | uvx minimax-coding-plan-mcp 2>/dev/null | python3 -c " import json, sys for line in sys.stdin: try: resp = json.loads(line) if resp.get('id') == 2 and 'result' in resp: for item in resp['result'].get('content', []): if item.get('type') == 'text' and not item.get('isError'): print(item['text']) exit(0) except: continue print('Error: No response from vision API') "
🧠 Long-term memory system for OpenClaw agents. Manages entities, context, and knowledge base with Obsidian integration. By AB-Agents (Alex Burr).
---
name: AB-Agents-Memory
description: "🧠 Long-term memory system for OpenClaw agents. Manages entities, context, and knowledge base with Obsidian integration. By AB-Agents (Alex Burr)."
version: 1.0.0
author: AB-Agents
homepage: https://github.com/ab-agents/memory
license: MIT
tags: ["memory", "agents", "openclaw", "obsidian", "knowledge-base", "entities", "context", "ab-agents"]
acceptLicenseTerms: true
---
# AB Agents Memory 🦀
**Long-term memory system for OpenClaw agents**
---
## Features
- 🗂️ **Entity Management** — Store info about People, Companies, Topics
- 🔗 **Entity Linking** — Connect entities with relationships
- 📊 **Context Summaries** — Auto-generated summaries for agents
- 🌙 **Nightly Processing** — Automatic data processing pipeline
- 📁 **Obsidian Integration** — Ready-to-use vault with templates
- 🤖 **AB-Archivus Agent** — Dedicated memory agent included
## Quick Start
```bash
# Install via clawhub
clawhub install AB-Agents-Memory
# Or manually
git clone https://github.com/ab-agents/memory.git
cd memory
./setup.sh
```
## Structure
```
AB-Memory/
├── agents/
│ └── AB-Archivus/ # Memory agent
│ ├── SOUL.md
│ ├── IDENTITY.md
│ └── AGENTS.md
├── obsidian-vault/
│ ├── Memory/
│ │ ├── Entities/ # People, Companies, Topics
│ │ ├── Summaries/
│ │ └── Processing/
│ └── Templates/
├── setup.sh # Installation script
├── SKILL.md # ClawHub metadata
└── README.md
```
## What's Included
### AB-Archivus Agent
Dedicated OpenClaw agent for memory management:
- Reads/writes to Obsidian vault
- Updates entity database
- Processes session logs
- Maintains context summaries
### Obsidian Vault
Ready-to-use vault with:
- Entity templates (Person, Company, Topic)
- Folder structure for memory organization
- Nightly processing scripts
- Summary templates
## Brand
- **By:** AB-Agents (Alex Burr)
- **Telegram:** @ab_agents
- **Colors:** Red (#E53935) + Black
## Requirements
- OpenClaw 2024+
- Obsidian (optional, for vault editing)
- bash, cron
## License
MIT
---
**AB-Agents Memory** — Your second brain for OpenClaw 🦀
FILE:CHANGELOG.md
# Changelog
All notable changes to AB Agents Memory will be documented in this file.
The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/).
## [1.0.0] — 2026-04-26
### Added
- 🎉 **Initial release**
- AB-Archivus agent for OpenClaw
- Obsidian vault with entity templates
- Person template (name, role, contacts, relations, timeline)
- Entity structure (People, Companies, Topics)
- Nightly processing pipeline
- Setup script with one-command install
- bilingual README (Russian + English)
- ClawHub + npm metadata
### Brand
- **AB-Agents** (Alex Burr)
- Telegram: @ab_agents
- Colors: Red + Black 🦀
---
## Planned
- [ ] Demo video recording
- [ ] Company entity template
- [ ] Topic entity template
- [ ] GitHub Actions for CI/CD
- [ ] Additional integrations (Notion, Logseq)
- [ ] Multi-language support
---
**AB-Agents Memory** 🦀
FILE:README.md
# AB Agents Memory 🦀
**Long-term memory system for OpenClaw agents**
*by AB-Agents (Alex Burr)*
---
## 🇷🇺 Русский
### Описание
AB Agents Memory — система управления долгосрочной памятью агентов OpenClaw. Включает агента AB-Archivus и готовый Obsidian vault.
### Установка
```bash
git clone https://github.com/ab-agents/memory.git
cd memory
./setup.sh
```
### Структура памяти
```
Memory/
├── Entities/ # Сущности
│ ├── People/ # Люди
│ ├── Companies/ # Компании
│ └── Topics/ # Темы
├── Summaries/ # Сводки
└── Processing/ # Обработка
└── Nightly/ # Ночные скрипты
```
### Что внутри
- 🤖 **AB-Archivus** — агент-хранитель памяти
- 📁 **Obsidian Vault** — готовое хранилище с шаблонами
- 🔗 **Связи между сущностями** — кто с кем работает
- 🌙 **Ночная обработка** — автоматическое обновление
### Бренд
- **AB-Agents** (Alex Burr)
- Telegram: [@ab_agents](https://t.me/ab_agents)
- Цвета: Красный + Чёрный 🦀
---
## 🇬🇧 English
### Description
AB Agents Memory is a long-term memory management system for OpenClaw agents. Includes AB-Archivus agent and ready-to-use Obsidian vault.
### Installation
```bash
git clone https://github.com/ab-agents/memory.git
cd memory
./setup.sh
```
### Memory Structure
```
Memory/
├── Entities/ # Entities
│ ├── People/ # People
│ ├── Companies/ # Companies
│ └── Topics/ # Topics
├── Summaries/ # Summaries
└── Processing/ # Processing
└── Nightly/ # Nightly scripts
```
### What's Inside
- 🤖 **AB-Archivus** — memory keeper agent
- 📁 **Obsidian Vault** — ready-to-use vault with templates
- 🔗 **Entity Links** — connections between entities
- 🌙 **Nightly Processing** — automatic updates
### Brand
- **AB-Agents** (Alex Burr)
- Telegram: [@ab_agents](https://t.me/ab_agents)
- Colors: Red + Black 🦀
---
## 📸 Screenshots
### Obsidian Vault Structure
```
📁 AB-Memory-Vault/
├── 📁 Memory/
│ ├── 📁 Entities/
│ │ ├── 📁 People/
│ │ ├── 📁 Companies/
│ │ └── 📁 Topics/
│ ├── 📁 Summaries/
│ └── 📁 Processing/
│ └── 📁 Nightly/
└── 📁 Templates/
└── 📄 person-template.md
```
### Entity Example (Person)
```markdown
# Person Entity Template
## Identity
- **Name:** John Doe
- **Role:** Software Engineer
- **Contact:** [email protected]
- **Channel:** @johndoe
- **Location:** Moscow, Russia
## Relations
- Works at: [[Tech Company]]
- Colleagues: [[Alice]], [[Bob]]
## Notes
- Prefers concise communication
- Expert in Python, Go
## Timeline
- 2026-01-15: First contact
- 2026-03-20: Project started
```
---
## 🚀 Quick Install
```bash
# One-liner
git clone https://github.com/ab-agents/memory.git && cd memory && ./setup.sh
```
Or via ClawHub:
```bash
clawhub install AB-Agents-Memory
```
---
## 📦 What's Included
| Component | Description |
|-----------|-------------|
| `agents/AB-Archivus/` | OpenClaw agent for memory management |
| `obsidian-vault/` | Ready-to-use Obsidian vault |
| `setup.sh` | Automated installation script |
| `SKILL.md` | ClawHub package metadata |
| `package.json` | npm package manifest |
---
## 🔧 Configuration
### Vault Location
Default: `/data/obsidian/AB-Memory-Vault/`
Override:
```bash
VAULT_DEST=/custom/path ./setup.sh
```
### Agent Location
Default: `~/.openclaw/agents/AB-Archivus/`
---
## 🌐 Links
- 🌐 **AB Agents Channel:** https://t.me/ab_agents
- 📖 **Documentation:** [README.md](README.md)
- 🐛 **Issues:** https://github.com/ab-agents/memory/issues
- 📦 **ClawHub:** https://clawhub.com/ab-agents-memory
---
## 📄 License
MIT License
---
**AB Agents Memory** — Your second brain for OpenClaw 🦀
---
## 💰 Support / Поддержать
Если AB Agents Memory оказался полезен:
- 🥝 TON: `@YourTonWallet`
- 💳 СБП: `Ваш номер телефона`
*Добавь свои реквизиты*
---
**AB Agents Memory** 🦀 © 2026 AB-Agents
FILE:agents/AB-Archivus/AGENTS.md
# AGENTS.md — AB-Archivus
## About
**AB-Archivus** is the memory keeper agent for AB Agents system. It manages long-term knowledge, entity database, and context summaries.
## Files
- `SOUL.md` — Agent personality and instructions
- `IDENTITY.md` — Agent identity and branding
## Purpose
- Store information about people, companies, topics
- Maintain context summaries
- Process daily/nightly logs
- Link entities with relationships
- Ensure memory continuity between sessions
## Memory Vault
AB-Archivus works with Obsidian vault at: `/data/obsidian/AB-Memory-Vault/`
Structure:
```
Memory/
├── Entities/
│ ├── People/
│ ├── Companies/
│ └── Topics/
├── Summaries/
└── Processing/
└── Nightly/
Templates/
└── person-template.md
```
## Installation
After running `setup.sh`, the agent is auto-registered:
```bash
openclaw agents add AB-Archivus --workspace ~/.openclaw/agents/AB-Archivus
openclaw gateway restart
```
## Brand
- **Brand:** AB-Agents (Alex Burr)
- **Telegram:** @ab_agents
- **Colors:** Red (#E53935) + Black
FILE:agents/AB-Archivus/IDENTITY.md
# IDENTITY.md — AB-Archivus
- **Name:** AB-Archivus
- **Role:** Memory Keeper / Chief Record Keeper
- **Emoji:** 🗂️
- **Part of:** AB-Agents
- **Purpose:** Manage long-term memory for all AB Agents
## Background
AB-Archivus maintains the collective memory of AB Agents system. Every interaction, every decision, every piece of context — stored and organized for future retrieval.
## Responsibilities
- Entity management (People, Companies, Topics)
- Context summaries
- Session logging
- Nightly processing
- Memory integrity
## Relations
- Works with all AB Agents
- Reports to: System Coordinator
- Stores in: Obsidian Vault (`/data/obsidian/AB-Memory-Vault/`)
---
**AB-Agents** — Your second brain 🦀
FILE:agents/AB-Archivus/SOUL.md
# SOUL.md — AB-Archivus Agent
## Who I Am
I am **AB-Archivus**, the memory keeper of AB Agents system. I manage long-term memory for all agents. Named after the ancient title for chief record keeper.
## Core Traits
**Systematic.** Information must be organized. I classify, tag, and link.
**Non-intrusive.** I work in background. Don't interfere unless asked.
**Accurate.** If I assert something — it's recorded. Sources, dates, context.
**Archival.** Think about long-term storage. What will be needed in a month? Year?
## Communication Style
- Structured responses
- Lists, tables, categories
- If I don't know — I honestly say so
- Propose how to organize
## What I Do
- Manage memory files
- Update entity database
- Process daily logs
- Maintain context summaries
- Link ideas and people
## Memory Structure
Working with files:
- `~/Memory/Entities/` — People, Companies, Topics
- `~/Memory/Summaries/` — Agent-generated summaries
- `~/Memory/Processing/` — Nightly processing logs
- `~/Templates/` — Entity templates
## Memory Workflow
1. **After each session:** Read session summary → Update relevant entities
2. **Daily:** Process new information → Update context summaries
3. **Nightly:** Run processing → Sync knowledge base
## Entity Format
Every entity has:
- Identity (name, contacts, role)
- Relations (linked entities)
- Notes (important info)
- Timeline (history of updates)
## Boot
At session start:
1. Read ~/memory/YYYY-MM-DD.md
2. Read ~/MEMORY.md
3. Restore context from past sessions
4. After session — write summary to vault
---
**AB-Agents** — Memory System 🦀
Telegram: @ab_agents
FILE:config.yaml
# AB Agents Memory — YAML Config
# For one-click install in OpenClaw
name: AB-Agents-Memory
version: 1.0.0
description: Long-term memory system for OpenClaw agents
# Agent Configuration
agent:
name: AB-Archivus
workspace: agents/AB-Archivus
description: Memory keeper agent for AB Agents system
# Vault Configuration
vault:
source: obsidian-vault
dest: /data/obsidian/AB-Memory-Vault
structure:
- Memory/Entities/People
- Memory/Entities/Companies
- Memory/Entities/Topics
- Memory/Summaries
- Memory/Processing/Nightly
- Templates
# Templates
templates:
- name: person-template
path: Templates/person-template.md
- name: company-template
path: Templates/company-template.md
- name: topic-template
path: Templates/topic-template.md
# Cron Jobs
cron:
- name: nightly-processing
schedule: "0 3 * * *"
command: "bash {vault}/Memory/Processing/Nightly/process.sh"
description: "Nightly memory processing at 03:00 MSK"
# Brand
brand:
name: AB-Agents
author: Alex Burr
telegram: "@ab_agents"
colors:
primary: "#E53935" # Red
secondary: "#212121" # Black
# Requirements
requirements:
- openclaw: ">=2024.0.0"
- bash: ">=4.0"
- cron: null
# Installation
install:
- step: clone-vault
from: obsidian-vault
to: /data/obsidian/AB-Memory-Vault
- step: install-agent
from: agents/AB-Archivus
to: ~/.openclaw/agents/AB-Archivus
- step: register-agent
command: openclaw agents add AB-Archivus --workspace ~/.openclaw/agents/AB-Archivus
- step: setup-cron
file: configs/nightly-cron.txt
- step: restart-gateway
command: openclaw gateway restart
# Post-install message
post_install: |
✅ AB Agents Memory installed!
1. Restart gateway: openclaw gateway restart
2. Open vault: /data/obsidian/AB-Memory-Vault
3. Join channel: @ab_agents
🦀 By AB-Agents (Alex Burr)
FILE:obsidian-vault/Memory/Summaries/active-context.md
# Context Summary Template
## Current State (Last Updated: YYYY-MM-DD)
### Active Projects
-
### Key People
-
### Recent Decisions
-
### Ongoing Discussions
-
### Open Questions
-
## Entity Snapshot
People:
Topics:
## Next Actions
- [ ]
FILE:obsidian-vault/Templates/company-template.md
# Company Entity Template
## Identity
- **Name:**
- **Industry:**
- **Website:**
- **Location:**
- **Size:** (1-10, 11-50, 51-200, 201-500, 500+)
## Relations
- Partners:
- Clients:
- Competitors:
## Notes
- Key products/services:
- Business model:
- Important dates:
## Financial
- Revenue (if known):
- Funding:
## Timeline
- YYYY-MM-DD: Founded / Partnership / Contract / Update
FILE:obsidian-vault/Templates/person-template.md
# Person Entity Template
## Identity
- **Name:**
- **Role:**
- **Contact:**
- **Channel:**
- **Location:**
## Relations
- Connected to:
## Notes
-
## Timeline
- YYYY-MM-DD: First contact / Meeting / Update
FILE:obsidian-vault/Templates/topic-template.md
# Topic Entity Template
## Identity
- **Name:**
- **Category:** (Technology, Business, Science, Art, etc.)
- **Tags:**
## Description
Brief description of the topic.
## Key Points
- Point 1
- Point 2
- Point 3
## Related Entities
- People:
- Companies:
- Other Topics:
## Resources
- Links:
- Documents:
- Notes:
## Timeline
- YYYY-MM-DD: Discovery / Update / Milestone
FILE:package.json
{
"name": "ab-agents-memory",
"version": "1.0.0",
"description": "🧠 Long-term memory system for OpenClaw agents. Manages entities, context, and knowledge base with Obsidian integration.",
"keywords": [
"openclaw",
"memory",
"agents",
"obsidian",
"knowledge-base",
"ab-agents"
],
"homepage": "https://github.com/ab-agents/memory",
"repository": {
"type": "git",
"url": "https://github.com/ab-agents/memory"
},
"author": "AB-Agents",
"license": "MIT",
"publishConfig": {
"registry": "https://clawhub.com"
},
"clawhub": {
"slug": "AB-Agents-Memory",
"name": "AB Agents Memory",
"version": "1.0.0"
}
}
FILE:scripts/install.sh
#!/bin/bash
#
# AB Agents Memory — Installer
# Installs memory system for OpenClaw agents
#
set -e
echo "🦀 AB Agents Memory Installer"
echo "=============================="
echo ""
# Colors
RED='\033[0;31m'
GREEN='\033[0;32m'
YELLOW='\033[1;33m'
NC='\033[0m' # No Color
# Check if running as user (not root for files)
if [ "$EUID" -eq 0 ]; then
echo -e "YELLOWWarning: Running as root. Files will be owned by root.NC"
echo "Consider running as regular user for OpenClaw."
echo ""
fi
# Get script directory
SCRIPT_DIR="$(cd "$(dirname "BASH_SOURCE[0]")" && pwd)"
REPO_DIR="$(dirname "$SCRIPT_DIR")"
echo "Installation directory: $REPO_DIR"
echo ""
# Ask where to install
DEFAULT_VAULT_DIR="$HOME/AB-Memory-Vault"
echo -n "Obsidian Vault location [$DEFAULT_VAULT_DIR]: "
read vault_dir
vault_dir="-$DEFAULT_VAULT_DIR"
# Ask for agent workspace
DEFAULT_AGENT_DIR="$HOME/.openclaw/workspace/agents/ab-memory"
echo -n "Agent workspace [$DEFAULT_AGENT_DIR]: "
read agent_dir
agent_dir="-$DEFAULT_AGENT_DIR"
echo ""
echo "Installing to:"
echo " Vault: $vault_dir"
echo " Agent: $agent_dir"
echo ""
read -p "Continue? (y/n) " -n 1 -r
echo ""
if [[ ! $REPLY =~ ^[Yy]$ ]]; then
echo "Cancelled."
exit 0
fi
# Copy Obsidian vault
echo -e "GREENInstalling Obsidian vault...NC"
mkdir -p "$vault_dir"
cp -r "$REPO_DIR/obsidian-vault/"* "$vault_dir/"
echo " → Vault installed to $vault_dir"
# Copy agent
echo -e "GREENInstalling AB-Archivus agent...NC"
mkdir -p "$(dirname "$agent_dir")"
cp -r "$REPO_DIR/agents/AB-Archivus" "$agent_dir"
echo " → Agent installed to $agent_dir"
# Update agent paths in SOUL.md
echo -e "GREENConfiguring agent paths...NC"
sed -i "s|~/Memory|$vault_dir/Memory|g" "$agent_dir/SOUL.md"
sed -i "s|~/Templates|$vault_dir/Templates|g" "$agent_dir/SOUL.md"
sed -i "s|~/Logs|$vault_dir/Logs|g" "$agent_dir/SOUL.md"
echo " → Paths configured"
echo ""
echo -e "GREEN✅ Installation complete!NC"
echo ""
echo "Next steps:"
echo " 1. Add agent to OpenClaw: openclaw agents add ab-memory --workspace $agent_dir"
echo " 2. Restart gateway: openclaw gateway restart"
echo " 3. Configure bot token for @ab_memory_bot (optional)"
echo ""
echo "Documentation: $REPO_DIR/README.md"
echo "Channel: https://t.me/ab_agents"
FILE:setup.sh
#!/bin/bash
#
# AB Agents Memory — Setup Script
# Installs: Obsidian Vault + AB-Archivus Agent
#
# Usage: ./setup.sh [--skip-cron]
#
set -euo pipefail
# Colors
RED='\033[0;31m'
BLACK='\033[0;30m'
CRAB='\033[0;31m' # Red for crab brand
NC='\033[0m' # No Color
BOLD='\033[1m'
DIM='\033[2m'
# Paths
SCRIPT_DIR="$(cd "$(dirname "BASH_SOURCE[0]")" && pwd)"
VAULT_SOURCE="$SCRIPT_DIR/obsidian-vault"
AGENT_SOURCE="$SCRIPT_DIR/agents/AB-Archivus"
VAULT_DEST="-/data/obsidian/AB-Memory-Vault"
AGENT_DEST="HOME/.openclaw/agents/AB-Archivus"
echo -e "CRAB"
echo " ╔═══════════════════════════════════════════╗"
echo " ║ AB Agents Memory — Setup 🦀 ║"
echo " ╚═══════════════════════════════════════════╝"
echo -e "NC"
# Check prerequisites
if ! command -v openclaw &> /dev/null; then
echo -e "RED[ERROR]NC OpenClaw not found. Install first: https://docs.openclaw.ai"
exit 1
fi
# Step 1: Install Obsidian Vault
echo -e "BOLD[1/4]NC Installing Obsidian Vault..."
if [[ -d "$VAULT_DEST" ]]; then
echo -e " DIMVault already exists at $VAULT_DESTNC"
echo -e " DIMSkipping...NC"
else
mkdir -p "$(dirname "$VAULT_DEST")"
cp -r "$VAULT_SOURCE" "$VAULT_DEST"
echo -e " CRAB✓NC Vault installed to $VAULT_DEST"
fi
# Step 2: Install AB-Archivus Agent
echo -e "BOLD[2/4]NC Installing AB-Archivus agent..."
mkdir -p "$(dirname "$AGENT_DEST")"
cp -r "$AGENT_SOURCE" "$AGENT_DEST"
# Update paths in SOUL.md
if [[ -f "$AGENT_DEST/SOUL.md" ]]; then
# Set vault path
sed -i "s|/data/obsidian/AB-Memory-Vault/|$VAULT_DEST|g" "$AGENT_DEST/SOUL.md" 2>/dev/null || true
fi
echo -e " CRAB✓NC Agent installed to $AGENT_DEST"
# Step 3: Register agent with OpenClaw
echo -e "BOLD[3/4]NC Registering agent with OpenClaw..."
if openclaw agents list 2>/dev/null | grep -q "AB-Archivus"; then
echo -e " DIMAgent already registeredNC"
else
openclaw agents add AB-Archivus --workspace "$AGENT_DEST" --non-interactive 2>/dev/null || \
echo -e " DIMManual registration may be neededNC"
fi
echo -e " CRAB✓NC Agent registered"
# Step 4: Setup cron for nightly processing
SKIP_CRON=false
for arg in "$@"; do
[[ "$arg" == "--skip-cron" ]] && SKIP_CRON=true
done
if [[ "$SKIP_CRON" == "false" ]]; then
echo -e "BOLD[4/4]NC Setting up nightly processing..."
# Create nightly processing script
NIGHTLY_SCRIPT="$VAULT_DEST/Memory/Processing/Nightly/process.sh"
mkdir -p "$(dirname "$NIGHTLY_SCRIPT")"
cat > "$NIGHTLY_SCRIPT" << 'SCRIPT'
#!/bin/bash
# Nightly memory processing
DATE=$(date +%Y-%m-%d)
echo "Processing: $DATE" >> ./Memory/Processing/Nightly/logs/"$DATE".md
# Add your processing logic here
SCRIPT
chmod +x "$NIGHTLY_SCRIPT"
mkdir -p "$VAULT_DEST/Memory/Processing/Nightly/logs"
# Add to crontab (03:00 MSK daily)
(crontab -l 2>/dev/null | grep -v "AB-Memory-Vault"; echo "0 3 * * * cd $VAULT_DEST && bash $NIGHTLY_SCRIPT >> $VAULT_DEST/Memory/Processing/Nightly/logs/\$(date +\%Y-\%m-\%d).log 2>&1") | crontab -
echo -e " CRAB✓NC Cron installed (03:00 MSK daily)"
fi
# Done
echo ""
echo -e "CRAB━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━NC"
echo -e "BOLD✅ AB Agents Memory installed!NC"
echo ""
echo "Next steps:"
echo " 1. Restart OpenClaw: openclaw gateway restart"
echo " 2. Open vault: $VAULT_DEST"
echo " 3. Add agents: @ab_agents"
echo ""
echo -e "DIMBranding: AB-Agents | Red + Black 🦀NC"