L
LukaG712/Slinker
Isolated coding-agent execution with Git worktrees, persistent task state, and controlled project workflows
无 SECURITY.md
在 GitHub(2026-11-12 核查时已不可用)该链接在 2026-11-12 返回 404,已不可用
- ★ 数取值
- 0 ★ · LukaG712/Slinker · 取自 GitHub 搜索 API · (2026-10-26 20:00:26 核对)
- 来源明细
- 从该仓库的 GitHub 页面直接读取 · 条目类型:开源项目
- 收录与活跃
- 收录于 2026-10-22 · 最近见到 2026-11-14 · 共见到 27 次 · 被 1 个来源列出
- 评分构成
- 综合分 103 · 1 个来源 · repo
常见问题(答案都来自我们的记录)
它适合谁 / 用来做什么?
我们把它归在这些标签下: 开源项目。标签来自条目自身,不是我们强加的分类。
谁维护它、还在更新吗?
仓库
LukaG712/Slinker;我们收录于 2026-10-22;最近见到 2026-11-14。这里没有"官方认证"或"质量评级"——我们只记录来源与时间。# Slinker
以下摘录自该仓库的 README(片段) · 在 GitHub 读完整 README →
> "These ghosts seem unassailable, don't worry they're still inhalable!"
> ~ Prof. E. Gadd, Luigi's Mansion 3
Luigi's Mansion origin: Slinker ~ stealthy ghost enemies from Luigi's Mansion 3 that slink along walls and floors.
Slinker is a production-quality coding-agent orchestration backend that executes AI coding tasks through the Junie CLI with Git worktree isolation, persistent SQLite storage, and a comprehensive REST API.
It serves as the execution engine for Greenie and Trapper, and also works standalone as an OpenAI-compatible HTTP service compatible with Open WebUI.
## At a Glance
| Feature | Description |
| Git Worktree Isolation | Each task runs in its own isolated Git branch ~ no interference with your main checkout |
| Persistent Storage | SQLite-based storage for tasks, projects, sessions, and workers with schema migrations |
| OpenAI-Compatible API | Drop-in replacement for OpenAI chat completions, works with Open WebUI |
| Honest SSE Streaming | Server-Sent Events that clearly distinguish progress from token output |
| Pluggable Context | Load context from MEMORY.md, session logs, Obsidian vaults, or custom sources |
| Optional Ollama Integration | Prompt refinement and summarization via Ollama (disabled by default) |
| Obsidian Sync | Mirror session logs to an Obsidian vault for knowledge management |
| Worker Registry | Track active workers, monitor concurrency, and manage task lifecycle |
| Security Hardened | Constant-time auth, input validation, safe subprocess invocation |
| Docker Ready | Containerized deployment with health checks |
## Quick Start
### Installation
bash
# Clone the repository
git clone https://github.com/LukaG712/Slinker.git
cd Slinker
# Install dependencies
pip install -r requirements.txt
# Configure environment
cp .env.example .env
# Edit .env with your API key and workspace path
### As an HTTP Service
bash
# Start the service
python -m orchestrator
# Or: uvicorn junieadapter.service:app --host 0.0.0.0 --port 8000
The service starts on port 8000 by default. Verify it's running:
bash
curl http://localhost:8000/health
# {"status": "ok", "service": "Slinker"}
### As a Python Module
python
from junieadapter import JunieAdapter, AdapterRequest
adapter = JunieAdapter(apikey="your-api-key", workspacepath="/path/to/project")
# Submit a task with worktree isolation
request = AdapterRequest(
task="Refactor the main module to use async/await",
projectpath="/path/to/project",
result = await adapter.submittask(request)
print(f"Status: {result.status}")
print(f"Changed files: {result.changedfiles}")
print(f"Diff summary: {result.diffsummary}")
### With Greenie
Slinker integrates with Greenie via the Slinkerprovider module. Configure it in hub.yaml:
yaml
# hub.yaml
agents:
name: coder
runner: Slinker
config:
apikey: "your-api-key"
workspacepath: "/path/to/workspace"
## Architecture
Slinker/
├── junieadapter/ # Core package
│ ├── init.py # Public API exports
│ ├── adapter.py # JunieAdapter ~ stable interface for Greenie
│ ├── config.py # OrchestratorConfig, IsolationMode, fromenv()
│ ├── contextprovider.py # Pluggable context loading interface
│ ├── junierunner.py # Junie CLI subprocess execution & JSON parsing
> ~ Prof. E. Gadd, Luigi's Mansion 3
Luigi's Mansion origin: Slinker ~ stealthy ghost enemies from Luigi's Mansion 3 that slink along walls and floors.
Slinker is a production-quality coding-agent orchestration backend that executes AI coding tasks through the Junie CLI with Git worktree isolation, persistent SQLite storage, and a comprehensive REST API.
It serves as the execution engine for Greenie and Trapper, and also works standalone as an OpenAI-compatible HTTP service compatible with Open WebUI.
## At a Glance
| Feature | Description |
| Git Worktree Isolation | Each task runs in its own isolated Git branch ~ no interference with your main checkout |
| Persistent Storage | SQLite-based storage for tasks, projects, sessions, and workers with schema migrations |
| OpenAI-Compatible API | Drop-in replacement for OpenAI chat completions, works with Open WebUI |
| Honest SSE Streaming | Server-Sent Events that clearly distinguish progress from token output |
| Pluggable Context | Load context from MEMORY.md, session logs, Obsidian vaults, or custom sources |
| Optional Ollama Integration | Prompt refinement and summarization via Ollama (disabled by default) |
| Obsidian Sync | Mirror session logs to an Obsidian vault for knowledge management |
| Worker Registry | Track active workers, monitor concurrency, and manage task lifecycle |
| Security Hardened | Constant-time auth, input validation, safe subprocess invocation |
| Docker Ready | Containerized deployment with health checks |
## Quick Start
### Installation
bash
# Clone the repository
git clone https://github.com/LukaG712/Slinker.git
cd Slinker
# Install dependencies
pip install -r requirements.txt
# Configure environment
cp .env.example .env
# Edit .env with your API key and workspace path
### As an HTTP Service
bash
# Start the service
python -m orchestrator
# Or: uvicorn junieadapter.service:app --host 0.0.0.0 --port 8000
The service starts on port 8000 by default. Verify it's running:
bash
curl http://localhost:8000/health
# {"status": "ok", "service": "Slinker"}
### As a Python Module
python
from junieadapter import JunieAdapter, AdapterRequest
adapter = JunieAdapter(apikey="your-api-key", workspacepath="/path/to/project")
# Submit a task with worktree isolation
request = AdapterRequest(
task="Refactor the main module to use async/await",
projectpath="/path/to/project",
result = await adapter.submittask(request)
print(f"Status: {result.status}")
print(f"Changed files: {result.changedfiles}")
print(f"Diff summary: {result.diffsummary}")
### With Greenie
Slinker integrates with Greenie via the Slinkerprovider module. Configure it in hub.yaml:
yaml
# hub.yaml
agents:
name: coder
runner: Slinker
config:
apikey: "your-api-key"
workspacepath: "/path/to/workspace"
## Architecture
Slinker/
├── junieadapter/ # Core package
│ ├── init.py # Public API exports
│ ├── adapter.py # JunieAdapter ~ stable interface for Greenie
│ ├── config.py # OrchestratorConfig, IsolationMode, fromenv()
│ ├── contextprovider.py # Pluggable context loading interface
│ ├── junierunner.py # Junie CLI subprocess execution & JSON parsing
收录徽章(可选)
想把收录标记放进 README 就复制这行,可选,不影响收录。
[](https://anclum.com/zh/s/lukag712-slinker/)
- 来源
- github · https://github.com/LukaG712/Slinker
- 按领域浏览
- 开源项目
- 收录于
- 今天
- 安全策略
- 我们没在该仓库根目录找到
SECURITY.md(这不代表不安全)
同类推荐
所属领域与标签
每个标签都能点进去看同类的全部条目。数字是当前库里的真实条数。