✦ AI储物柜
AI储物柜 --一个漂亮的、自托管的web应用程序,用于管理您的AI提示、技能、转向配置、MCP服务器设置和shell命令。 内置AI聊天功能 从自然语言生成提示、技能、指导规则、MCP配置和命令。
采用真正的黑色玻璃形态设计和多提供商AI支持构建。
](https://hub.docker.com/r/yoniergomez/ai-locker) ](https://nodejs.org)   
______________________________________________________________________
☕ 支持这个项目
如果AI Locker为您节省了时间,请考虑支持其开发:
](https://github.com/sponsors/YonierGomez) 
______________________________________________________________________
✨ 特性
| 特性 | 描述 |
|---|---|
| 🤖 AI聊天 | 内置聊天功能,可从自然语言生成提示、技能、指导、MCP配置和命令。支持 开放人工智能, Anthropic, 谷歌双子座, 亚马逊基石,以及 开放路由历史悠久,最新型号(GPT-5.4、Claude 4.6、Gemini 3.1)。 |
| 📝 鼓励 | 存储带有类别、型号、温度、最大标记和Markdown编辑器的AI提示模板 |
| ⚡ 技能 | 具有触发短语和活动/非活动切换的可重用AI技能定义 |
| 🧭 转向 | 行为指导和系统说明,范围(全球/项目/会议)和优先级 |
| 🤖 代理 | AI代理预设结合了模型、系统提示、温度、技能、转向和MCP连接——一键即可使用 |
| 🔌 MCP配置 | 带有语法高亮显示的JSON编辑器的模型上下文协议服务器配置 |
| 💻 命令 | 带有Shell/platform/category、复制到剪贴板和使用情况跟踪的Shell命令库 |
| 🧩 代码片段 | 31种语言(Python、YAML、Dockerfile、HCL、SQL等)的可重用代码片段,语法突出显示 |
| 🪝 钩子 | 根据IDE事件(文件编辑、代理停止、工具使用、任务执行)自动化操作。自动触发Ask Agent提示或shell命令 |
| 🔐 金库 | 存储使用AES-256-GCM加密的API密钥、令牌、私钥、密码和机密。默认情况下隐藏值,按需显示。参考任何地方 {{VAR_NAME}} |
| 📊 仪表盘 | 使用活动热图、使用图表、模型分布和收藏夹库进行分析 |
| 🔍 智能搜索 | 命令面板(⌘K)用于在所有部分进行即时搜索。全文搜索、类别过滤器、收藏夹过滤器。 |
| 🗂️ 详情视图 | 每个项目的只读细节模式——可最大化到全屏 |
| 📝 Markdown编辑器 | 具有实时渲染和语法突出显示的编辑/拆分/预览模式 |
| 📈 令牌计数器 | 所有内容的实时令牌估计,按大小进行颜色编码 |
| 🏷️ 标签和类别 | 使用颜色选择器自定义标签和类别 |
| 🗑️ 垃圾 | 软删除,5天自动清除,一键恢复 |
| ☁️ S3备份和同步 | AWS S3/CCloudflare R2/Backblaze B2/MinIO——备份、恢复和自动同步调度 |
| 📱 响应式 | 完全支持移动设备——适用于任何屏幕尺寸 |
| 🐳 Docker就绪 | 使用PostgreSQL的单容器,多阶段构建 |
| 🎨 Glassmorphism用户界面 | 真正的黑色主题(#0a0a0a)、模糊、透明和渐变,带有春季动画 |
______________________________________________________________________
🐳 使用Docker进行部署
不需要本地依赖,只需要Docker。官方镜像在Docker Hub上发布为 yoniergomez/ai-locker 和支持 amd64, arm64,以及 armv7.
选项A:Docker Compose(推荐)
不需要克隆。包括PostgreSQL、持久卷和自动重启。
# Download the compose file
curl -O https://raw.githubusercontent.com/YonierGomez/ai-locker/main/compose.yaml
# Start (pulls the image automatically from Docker Hub)
docker compose up -d打开 http://localhost:9091 你完了。
compose.yaml
services:
app:
image: yoniergomez/ai-locker:latest
container_name: ai-locker
ports:
- "9091:3001"
environment:
NODE_ENV: production
PORT: 3001
DB_HOST: postgres-db
DB_PORT: 5432
DB_NAME: ai-locker
DB_USER: ai-locker
DB_PASSWORD: secret
DB_TYPE: postgres
# Alternatively, use a connection string:
# DATABASE_URL: postgresql://ai-locker:secret@postgres-db:5432/ai-locker
volumes:
- ai_locker_data:/data
restart: unless-stopped
depends_on:
postgres-db:
condition: service_healthy
postgres-db:
image: postgres:alpine
container_name: ai-locker_postgres
restart: unless-stopped
environment:
POSTGRES_DB: ai-locker
POSTGRES_USER: ai-locker
POSTGRES_PASSWORD: secret
volumes:
- postgres_data:/var/lib/postgresql/data
healthcheck:
test: ["CMD-SHELL", "pg_isready -U ai-locker -d ai-locker"]
interval: 10s
timeout: 5s
retries: 5
volumes:
ai_locker_data:
postgres_data:______________________________________________________________________
选项B:Docker Compose——SQLite(无数据库服务)
最小组合文件——内置SQLite的单个容器。不需要PostgreSQL。
# Download the compose file
curl -O https://raw.githubusercontent.com/YonierGomez/ai-locker/main/compose.yaml
# Start
docker compose up -dcompose.yaml (SQLite variant)
services:
app:
image: yoniergomez/ai-locker:latest
container_name: ai-locker
ports:
- "9091:3001"
environment:
NODE_ENV: production
PORT: 3001
DB_PATH: /data/ai-locker.db
volumes:
- ai_locker_data:/data
restart: unless-stopped
volumes:
ai_locker_data:打开 http://localhost:9091.
______________________________________________________________________
选项C:Docker运行--SQLite
内置SQLite的单个容器。无需额外服务。
docker run -d \
--name ai-locker \
-p 3001:3001 \
-v ai_locker_data:/data \
--restart unless-stopped \
yoniergomez/ai-locker:latest打开 http://localhost:3001.
______________________________________________________________________
选项D:运行Docker——外部PostgreSQL
通过连接字符串指向您自己的PostgreSQL实例。
docker run -d \
--name ai-locker \
-p 3001:3001 \
-v ai_locker_data:/data \
-e DATABASE_URL=postgresql://user:pass@host:5432/ai-locker \
--restart unless-stopped \
yoniergomez/ai-locker:latest______________________________________________________________________
环境变量
| 变量 | 默认值 | 描述 |
|---|---|---|
PORT | 3001 | 服务器端口(容器内部) |
NODE_ENV | production | 环境 |
DATABASE_URL | -- | 完整的PostgreSQL/MySQL连接字符串 |
DB_HOST / DB_PORT / DB_NAME / DB_USER / DB_PASSWORD / DB_TYPE | -- | 单个DB变量(替代 DATABASE_URL) |
DB_PATH | /data/prompts.db | SQLite路径(未设置DB变量时使用) |
API_KEY | - | 用于保护所有API端点的承载令牌(可选) |
______________________________________________________________________
🔐 API密钥保护
使用Bearer令牌保护您的AI Locker实例。当 API_KEY 设置,则所有API请求都必须包含标头 Authorization: Bearer .
1.生成安全密钥:
openssl rand -hex 32
# Example: a3f8c2d1e4b5a6f7c8d9e0f1a2b3c4d5e6f7a8b9c0d1e2f3a4b5c6d7e8f9a0b12.将其设置在您的环境中:
# .env file
API_KEY=a3f8c2d1e4b5a6f7c8d9e0f1a2b3c4d5e6f7a8b9c0d1e2f3a4b5c6d7e8f9a0b1
# Or with Docker Compose
environment:
API_KEY: a3f8c2d1e4b5a6f7c8d9e0f1a2b3c4d5e6f7a8b9c0d1e2f3a4b5c6d7e8f9a0b1
# Or with docker run
docker run -e API_KEY=your-key-here ...3.配置前端:
在浏览器中打开AI Locker→ 设置→ API密钥 → 粘贴密钥并保存。
或者在浏览器控制台中手动设置:
localStorage.setItem('promptly_api_key', 'your-key-here')注: 密钥存储在 localStorage 并与每个API请求一起自动发送。如果没有在前端配置密钥,应用程序将显示身份验证错误。有用的命令
# View logs
docker compose logs -f
# Stop
docker compose down
# Update to the latest image
docker compose pull && docker compose up -d
# Build from source instead of using the official image
git clone https://github.com/YonierGomez/ai-locker.git && cd ai-locker
# Edit compose.yaml: replace `image:` with `build: .`, then:
docker compose up -d --build
# Backup PostgreSQL
docker exec ai-locker_postgres pg_dump -U ai-locker ai-locker > backup-$(date +%Y%m%d).sql
# Backup SQLite (docker run mode)
docker cp ai-locker:/data/prompts.db ./backup-$(date +%Y%m%d).db
# Custom port
PORT=8080 docker compose up -d______________________________________________________________________
🛠️ 发展
只有当你想修改源代码时才需要。
npm run install:all # install all dependencies
npm run dev # start backend + frontend in watch mode- 前端:http://localhost:3000
- 后端API:http://localhost:3001
______________________________________________________________________
项目结构
ai-locker/
├── backend/ # Express.js API
│ ├── config/
│ │ └── database.js # PostgreSQL / SQLite setup
│ ├── routes/
│ │ ├── ai.js # AI Chat (multi-provider: OpenAI, Anthropic, Gemini, Bedrock, OpenRouter)
│ │ ├── prompts.js # Prompts CRUD
│ │ ├── skills.js # Skills CRUD
│ │ ├── steering.js # Steering CRUD
│ │ ├── mcp.js # MCP Configs CRUD
│ │ ├── commands.js # Commands CRUD
│ │ ├── hooks.js # Hooks CRUD
│ │ ├── vault.js # Vault (AES-256-GCM encrypted secrets)
│ │ ├── tags.js # Tags management
│ │ ├── categories.js # Categories management
│ │ ├── backup.js # S3 backup/restore (export + import)
│ │ ├── trash.js # Soft delete / trash
│ │ └── settings.js # App settings + stats
│ └── server.js # Entry point + auto-sync cron
├── frontend/ # React + Vite
│ └── src/
│ ├── components/ # Shared UI components
│ │ ├── CommandPalette.jsx # ⌘K search
│ │ ├── Sidebar.jsx
│ │ ├── Topbar.jsx
│ │ ├── ItemCard.jsx
│ │ ├── DetailModal.jsx # Full read-only detail view
│ │ ├── Modal.jsx # Create/edit modal (maximizable)
│ │ ├── MarkdownEditor.jsx
│ │ ├── ModelSelector.jsx
│ │ ├── CategorySelector.jsx
│ │ └── TagsSelector.jsx
│ ├── pages/
│ │ ├── AiSessionPage.jsx # AI Chat
│ │ ├── DashboardPage.jsx
│ │ ├── PromptsPage.jsx
│ │ ├── SkillsPage.jsx
│ │ ├── InstructionsPage.jsx
│ │ ├── AgentsPage.jsx
│ │ ├── McpPage.jsx
│ │ ├── CommandsPage.jsx
│ │ ├── HooksPage.jsx
│ │ ├── SnippetsPage.jsx
│ │ ├── NotesPage.jsx
│ │ ├── VaultPage.jsx
│ │ ├── TrashPage.jsx
│ │ └── SettingsPage.jsx
│ └── utils/
│ ├── api.js # API client
│ ├── models.js # AI models list
│ └── tokens.js # Token estimation
├── docs/
│ └── index.html # Landing page
├── Dockerfile # Multi-stage build
├── compose.yaml # Docker Compose (app + PostgreSQL)
└── README.md______________________________________________________________________
🗂️ 详情视图
图书馆里的每一件物品都有 全屏详细视图 点击任一卡片即可访问:
- 所有元数据(型号、令牌、温度、创建/更新日期、标签)的只读视图
- Markdown渲染 用于提示、技能和指导内容
- 语法突出显示JSON 用于MCP配置(透明背景,只有颜色)
- 最大化按钮 --展开视图以填充整个屏幕
- 操作按钮:复制·编辑·删除·切换收藏
- 如果局部视图已最大化,则“编辑”也会打开最大化
______________________________________________________________________
🪝 钩子
根据IDE事件自动执行操作:
| 事件 | 描述 |
|---|---|
fileEdited / fileCreated / fileDeleted | 当文件更改时触发——支持glob模式,如 *.ts |
promptSubmit / agentStop | 代理生命周期事件 |
preToolUse / postToolUse | 工具执行之前/之后--按以下条件筛选 read, write, shell, web, * 或正则表达式 |
preTaskExecution / postTaskExecution | 规范任务生命周期 |
userTriggered | 手动触发器 |
每个钩子要么运行 询问代理人 (向代理发送提示)或 运行命令 (执行带有可选超时的shell命令)。
______________________________________________________________________
🔐 金库
使用AES-256-GCM加密秘密存储 API_KEY 作为加密种子:
- 类型:密钥,API密钥,令牌,密码,私钥,公钥,证书,变量
- 价值观 始终隐藏在UI中--单击眼睛图标以显示
- 参考 提示、技能或命令中的任何秘密
{{VAR_NAME}} - 解析端点:
POST /api/vault/resolve--全部替换{{VAR_NAME}}给定文本中的占位符及其解密值
# Resolve variables in text
curl -X POST http://localhost:3001/api/vault/resolve \
-H "Content-Type: application/json" \
-d '{"text": "Authorization: Bearer {{OPENAI_API_KEY}}"}'
# → {"resolved": "Authorization: Bearer sk-..."}______________________________________________________________________
💻 命令
shell命令专用库:
- 支持外壳:
bash,zsh,sh,fish,powershell,cmd,python,ruby,node - 平台过滤器:
all,macOS,Linux,Windows - 一键复制到剪贴板,使用计数器
- 分类组织、收藏夹、搜索
- 包含在S3备份和JSON导出中
______________________________________________________________________
☁️ 备份与恢复
你的图书馆总是安全的。AI Locker支持通过S3兼容存储和本地JSON文件进行完全备份和还原。
S3/云存储
兼容 AWS S3, Cloudflare R2 的, 回火B2,以及 MinIO --任何S3兼容的提供程序都可以工作。
| 动作 | 描述 |
|---|---|
| 测试连接 | 保存前验证凭据和存储桶访问权限 |
| 保存S3配置 | 一键保存连接设置和自动同步首选项 |
| 立即备份 | 立即上传带时间戳的快照+更新 latest.json |
| 浏览备份 | 列出存储桶中所有备份的日期和大小 |
| 恢复 | 从任何列出的快照单击还原--选择合并或完全替换 |
| 自动同步 | 定时自动备份--打开后立即启动,无需重新启动 |
自动同步间隔: 15m · 30m · 1h · 2h · 3h · 6h · 9h · 12h · 1d · 2d
备份什么
每个部分都包含在每个备份中:
- ✅ 鼓励
- ✅ 技能
- ✅ 转向
- ✅ MCP配置
- ✅ 命令
- ✅ 标签
- ✅ 分类
JSON导出和导入
没有云存储?没问题随时导出完整的JSON快照并导入以在实例之间迁移。
# Export via API
curl http://localhost:3001/api/backup/export/json -o backup.json
# Import via API
curl -X POST http://localhost:3001/api/backup/import/json \
-H "Content-Type: application/json" \
-d @backup.json提示: 前缀路径是自动规范化的——如果您输入my-backups没有拖尾/,AI Locker会自动添加它,因此S3密钥始终正确。
______________________________________________________________________
🤖 AI聊天
AI储物柜内置 AI聊天 它从自然语言生成库项。描述你需要什么,人工智能会创建提示、技能、指导规则、MCP配置或shell命令——准备保存到你的库中。
多提供商支持
| 提供者 | 模型 |
|---|---|
| 开放人工智能 | GPT-5.4、GPT-4.1、o3、o1 |
| Anthropic | 克劳德作品4.6,十四行诗4.6,俳句4.5 |
| 谷歌双子座 | 双子座3.1 Pro,双子座3 Flash,双子座2.5 Pro/Flash |
| 亚马逊基石 | Claude 4.6,Nova 2(通过AWS IAM) |
| 开放路由 | 一个API密钥中的所有提供程序 |
在中配置您的首选提供商和API密钥 设置→ 人工智能集成。聊天记录会保留在浏览器中,并可随时清除。
______________________________________________________________________
🤖 支持的AI模型(2026年3月)
AI Locker附带了所有主要供应商的最新型号列表:
- 开放人工智能:GPT-5.4、GPT-4.1、o3、o1
- Anthropic:克劳德作品4.6、十四行诗4.6、俳句4.5、克劳德3.7
- 谷歌:双子座3.1 Pro、双子座3 Flash、双子座2.5 Pro/Flash
- 元:火焰4特立独行,火焰4童子军,火焰3.3 70b
- 扩展应用识别:Grok 3测试版,Grok 3迷你测试版
- 深度求索:V3(2026年3月),R1
- 米斯特拉尔:小3.1,大2411,编码
- 英伟达:Nemotron 3 Super,Nemotron Ultra 253B
- 字节跳动:种子2.0精简版
- 最小最大:2.7米
- 微软:Phi-4,Phi-4迷你版
- 亚马逊:Nova Pro、Nova Lite、Nova Micro
- 还有更多。..
您还可以直接在模型选择器中键入任何自定义模型ID。
______________________________________________________________________
📡 API 参考
| 方法 | 端点 | 描述 |
|---|---|---|
GET | /api/prompts | 列表提示 |
POST | /api/prompts | 创建提示 |
PUT | /api/prompts/:id | 更新提示 |
DELETE | /api/prompts/:id | 移至垃圾箱 |
PATCH | /api/prompts/:id/favorite | 切换收藏夹 |
GET | /api/skills | 列出技能 |
GET | /api/steering | 列表转向 |
GET | /api/mcp | 列出MCP配置 |
GET | /api/mcp/export/active | 将活动配置导出为JSON |
GET | /api/commands | 列出命令 |
POST | /api/commands | 创建命令 |
PUT | /api/commands/:id | 更新命令 |
DELETE | /api/commands/:id | 移至垃圾箱 |
PATCH | /api/commands/:id/favorite | 切换收藏夹 |
PATCH | /api/commands/:id/use | 增加使用次数 |
GET | /api/hooks | 列表挂钩 |
POST | /api/hooks | 创建钩子 |
PUT | /api/hooks/:id | 更新挂钩 |
PATCH | /api/hooks/:id/toggle | 切换为活动状态 |
PATCH | /api/hooks/:id/favorite | 切换收藏夹 |
DELETE | /api/hooks/:id | 移至垃圾箱 |
GET | /api/vault | 列出vault条目(从未返回值) |
GET | /api/vault/:id/reveal | 获取解密值 |
POST | /api/vault | 创建条目 |
PUT | /api/vault/:id | 更新条目 |
PATCH | /api/vault/:id/favorite | 切换收藏夹 |
DELETE | /api/vault/:id | 移至垃圾箱 |
POST | /api/vault/resolve | 解决 {{VAR_NAME}} 在文本中 |
GET | /api/trash | 列出被丢弃的物品 |
PATCH | /api/trash/:type/:id/restore | 还原项目 |
DELETE | /api/trash/:type/:id | 永久删除 |
DELETE | /api/trash | 清空垃圾桶 |
GET | /api/backup/export/json | 将所有数据导出为JSON |
POST | /api/backup/import/json | 导入JSON备份 |
POST | /api/backup/s3/upload | 备份到S3 |
GET | /api/backup/s3/list | 列出S3备份 |
POST | /api/backup/s3/restore | 从S3还原 |
POST | /api/backup/s3/test | 测试S3连接 |
GET | /api/backup/s3/status | S3配置状态 |
GET | /api/ai/config | 获取AI配置(提供者、模型、配置) |
POST | /api/ai/generate | 生成聊天响应(多提供商) |
POST | /api/ai/save | 将AI生成的项目保存到库中 |
GET | /api/settings | 获取所有设置 |
PUT | /api/settings | 更新设置 |
GET | /api/settings/stats | 获取统计数据和分析 |
GET | /api/health | 健康检查 |
______________________________________________________________________
🤝 贡献
欢迎投稿!请随时提交拉取请求。
- 分叉存储库
- 创建功能分支(
git checkout -b feature/amazing-feature) - 提交您的更改(
git commit -m 'Add amazing feature') - 推到分支(
git push origin feature/amazing-feature) - 打开拉取请求
______________________________________________________________________
☕ 支持
如果这个项目对你有帮助,请考虑支持它的发展:
](https://github.com/sponsors/YonierGomez)

______________________________________________________________________
📄 许可证
MIT© 约尼尔·戈麦斯
