L
LukaG712/Slinker
Isolated coding-agent execution with Git worktrees, persistent task state, and controlled project workflows
no SECURITY.md
View on GitHub (unreachable when checked on 2026-11-12)This link returned 404 on 2026-11-12
- Star count
- 0 ★ · LukaG712/Slinker · read from the GitHub search API · (checked 2026-10-26 20:00:26)
- Source
- read directly from its GitHub page · type: open-source project
- Harvest history
- first seen 2026-10-22 · last seen 2026-11-14 · seen 27× · listed by 1 sources
- Score
- score 103 · 1 sources · repo
FAQ (answers come from our records)
Who is it for?
We filed it under these tags: 开源项目. The tags come from the entry itself, not a taxonomy we imposed.
Who maintains it?
repository
LukaG712/Slinker;first catalogued 2026-10-22;last seen 2026-11-14。There is no official certification or quality rating here — we record sources and dates only.# 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
Listed badge (optional)
Copy this line into the README if you want the listing mark. Optional, and it does not affect being listed.
[](https://anclum.com/en/s/lukag712-slinker/)
- Source
- github · https://github.com/LukaG712/Slinker
- Browse by field
- Open source
- added
- today
- Security policy
- no
SECURITY.mdat the repository root (which does not mean it is unsafe)
More like this
Filed under
Every tag opens the full list for that filter. Counts are the live catalogue figures.