Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
46 commits
Select commit Hold shift + click to select a range
eec53e8
[gt-7dcb2a] fix: address 19 code issues across multiple files
joshwilhelmi Jan 7, 2026
f973c2a
[gt-c4ad16] docs: update ROADMAP.md to reflect current implementation…
joshwilhelmi Jan 7, 2026
9b4f71a
[gt-fb703b] fix: Sprint 5 (Workflow Hooks) is COMPLETED not PARTIAL
joshwilhelmi Jan 7, 2026
c0334de
[gt-c2c937] fix: add completion markers to Sprints 7.1-7.3
joshwilhelmi Jan 7, 2026
a26dd2f
[gt-beeac7] fix: improve close_task validation with smarter diff hand…
joshwilhelmi Jan 7, 2026
d2f3101
[gt-07ae39] refactor: remove redundant cli/tasks/hooks.py tech debt
joshwilhelmi Jan 7, 2026
3ed0764
[gt-3c4078] docs: update Sprint 29 status to PARTIAL
joshwilhelmi Jan 7, 2026
ebc8ded
[gt-860aed] fix: rename CLI command from 'gobby workflow' to 'gobby w…
joshwilhelmi Jan 7, 2026
3356015
[gt-c23ff1] feat: complete MCP Proxy Enhancements (Sprints 12-15)
joshwilhelmi Jan 8, 2026
98c960d
[gt-c23ff1] feat: add tool_name parameter to reset_metrics
joshwilhelmi Jan 8, 2026
7b9ad92
[gt-c23ff1] feat: add reset_tool_metrics admin MCP tool
joshwilhelmi Jan 8, 2026
b654103
[gt-57a2c6] fix: correct sprint statuses in ROADMAP.md
joshwilhelmi Jan 8, 2026
bbc8d80
[gt-f29c73] feat: implement stop signal infrastructure for autonomous…
joshwilhelmi Jan 8, 2026
b928ee8
[gt-8bc0d7] feat: implement progress tracking for autonomous workflows
joshwilhelmi Jan 8, 2026
cb3805d
[gt-5f47ab] feat: implement stuck detection for autonomous workflows
joshwilhelmi Jan 8, 2026
fa6f831
[gt-5c3ddd] feat: add HTTP endpoints for session stop signals
joshwilhelmi Jan 8, 2026
d176fd8
[gt-31f94b] feat: emit autonomous progress events via WebSocket
joshwilhelmi Jan 8, 2026
a71d3a8
[gt-bbe107] feat: add webhook as workflow condition type
joshwilhelmi Jan 8, 2026
09f96d0
[gt-4881c8] feat: implement external validator agent spawning
joshwilhelmi Jan 8, 2026
6798891
test: increase coverage from 59% to 73% with comprehensive test addit…
joshwilhelmi Jan 8, 2026
84e62c8
[gt-79e451] test: add comprehensive tests for Windows terminal spawners
joshwilhelmi Jan 8, 2026
a5a08c5
[gt-8ac9e0] feat: add comprehensive tests for workflow loader module
joshwilhelmi Jan 8, 2026
9974663
[gt-ac73bb] feat: add comprehensive tests for git_hooks installer module
joshwilhelmi Jan 8, 2026
1b28eaa
[gt-9b47a6] feat: add comprehensive tests for agents.py CLI module
joshwilhelmi Jan 8, 2026
23c5ef4
[gt-ded794] feat: increase test coverage to 80%+
joshwilhelmi Jan 8, 2026
f1e80ed
[gt-42d58e] fix: rename test_git.py to avoid import collision
joshwilhelmi Jan 8, 2026
d5ee1c7
[gt-bf53f7][gt-f6eaed][gt-baa95d] feat: add comprehensive tests for s…
joshwilhelmi Jan 8, 2026
c6b16df
[gt-b64b31] chore: clean up ROADMAP.md sprint summary tables
joshwilhelmi Jan 8, 2026
eb9e6c1
[gt-1b9bd4] chore: simplify ROADMAP.md sprint tables
joshwilhelmi Jan 8, 2026
95463c2
[gt-72fca1] chore: reorganize ROADMAP.md sprint structure
joshwilhelmi Jan 8, 2026
52abd8a
[gt-219297] fix: address test and documentation issues from code review
joshwilhelmi Jan 8, 2026
bce2ac4
chore: sync tasks and reorganize docs structure
joshwilhelmi Jan 8, 2026
93b11c2
chore: fix linting issues from pre-commit hooks
joshwilhelmi Jan 8, 2026
7ae5389
[gt-b903a7] fix: resolve F841 unused variable linting errors in test …
joshwilhelmi Jan 8, 2026
49e9cbc
[gt-dce99b] fix: resolve additional pre-commit linting errors
joshwilhelmi Jan 8, 2026
21252b7
[gt-64df15] fix: rename shadowed loop variable to fix mypy type error
joshwilhelmi Jan 8, 2026
315e1a3
chore: formatting, strict type fixes, and ci prep
joshwilhelmi Jan 8, 2026
8d608ea
fix: ruff import order and formatting
joshwilhelmi Jan 8, 2026
d5356fd
Fix remaining code issues and test failures
joshwilhelmi Jan 8, 2026
9637faf
fix: resolve remaining lint, type, and test issues
joshwilhelmi Jan 8, 2026
e02b26c
style: apply pre-commit formatting fixes
joshwilhelmi Jan 8, 2026
5529f40
fix: resolve remaining mypy errors
joshwilhelmi Jan 8, 2026
f3d4217
[gt-c38882] refactor: rename DB column 'type' to 'task_type' in tasks…
joshwilhelmi Jan 8, 2026
3286222
[gt-90ce13] fix: remove unused type: ignore comments for mypy --strict
joshwilhelmi Jan 8, 2026
cdd0fd2
Fix documentation lint errors (GEMINI.md, ROADMAP.md) [gt-fc4070] [gt…
joshwilhelmi Jan 8, 2026
2ddc509
[gt-e3d61e] fix: 14 code issues across multiple files
joshwilhelmi Jan 8, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
5 changes: 3 additions & 2 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -183,9 +183,9 @@ cython_debug/
.abstra/

# Visual Studio Code
# Visual Studio Code specific template is maintained in a separate VisualStudioCode.gitignore
# Visual Studio Code specific template is maintained in a separate VisualStudioCode.gitignore
# that can be found at https://github.com/github/gitignore/blob/main/Global/VisualStudioCode.gitignore
# and can be added to the global gitignore or merged into this file. However, if you prefer,
# and can be added to the global gitignore or merged into this file. However, if you prefer,
# you could uncomment the following to ignore the entire vscode folder
# .vscode/

Expand Down Expand Up @@ -224,3 +224,4 @@ bmad-custom-modules-src/
bmad-custom-src/
.quint/
.DS_Store
.scripts/
81 changes: 54 additions & 27 deletions .gobby/tasks.jsonl

Large diffs are not rendered by default.

4 changes: 2 additions & 2 deletions .gobby/tasks_meta.json
Original file line number Diff line number Diff line change
@@ -1,4 +1,4 @@
{
"content_hash": "bf7be0a664be1e1dcc114277ac3b6fcdf21f842686240c1a1e9764e9604bd9b5",
"last_exported": "2026-01-07T21:32:34.730077+00:00"
"content_hash": "2fdb70d5a95587d42346a85e4cda7ad012db61cb0f7acd4279355c62f4b4db5e",
"last_exported": "2026-01-08T17:28:05.141009+00:00"
}
6 changes: 3 additions & 3 deletions AGENTS.md
Original file line number Diff line number Diff line change
Expand Up @@ -224,9 +224,9 @@ Statuses: `active` → `stale` → `merged` → `abandoned`
Step-based workflows enforce tool restrictions:

```bash
uv run gobby workflow list # Available workflows
uv run gobby workflow set NAME # Activate workflow
uv run gobby workflow status # Current state
uv run gobby workflows list # Available workflows
uv run gobby workflows set NAME # Activate workflow
uv run gobby workflows status # Current state
```

Built-in: `plan-execute`, `test-driven`, `plan-act-reflect`
Expand Down
6 changes: 3 additions & 3 deletions CLAUDE.md
Original file line number Diff line number Diff line change
Expand Up @@ -152,9 +152,9 @@ Statuses: `active` → `stale` → `merged` → `abandoned`
Step-based workflows enforce tool restrictions:

```bash
uv run gobby workflow list # Available workflows
uv run gobby workflow set NAME # Activate workflow
uv run gobby workflow status # Current state
uv run gobby workflows list # Available workflows
uv run gobby workflows set NAME # Activate workflow
uv run gobby workflows status # Current state
```

Built-in: `plan-execute`, `test-driven`, `plan-act-reflect`
Expand Down
104 changes: 104 additions & 0 deletions GEMINI.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,104 @@
# Gobby - Project Context & Instructions

## Project Overview

**Gobby** is a local-first daemon that unifies AI coding assistants (Claude Code, Gemini CLI, Codex) into a persistent, orchestrated environment. It provides long-term memory, session management, and an MCP (Model Context Protocol) proxy with lazy tool discovery.

* **Core Tech:** Python 3.11+, FastAPI, FastMCP, SQLite, Click.
* **Key Concept:** "Unified Agent Manager" - Gobby sits between the AI CLI and the OS/Tools.

## Environment & Setup

This project uses **[uv](https://github.com/astral-sh/uv)** for dependency management.

### Installation

```bash
uv sync
```

### Running the Daemon

```bash
# Start daemon (verbose for dev)
uv run gobby start --verbose

# Check status
uv run gobby status
```

## Development Workflow

### Quality Checks (Mandatory)

All changes must pass these checks.

```bash
# Linting & Formatting
uv run ruff check src/
uv run ruff format src/

# Type Checking (Strict)
uv run mypy src/

# Testing
uv run pytest
```

### Directory Structure

* `src/gobby/cli/`: Click CLI entry points.
* `src/gobby/runner.py`: Main daemon process runner.
* `src/gobby/servers/`: HTTP (:8765) and WebSocket (:8766) servers.
* `src/gobby/hooks/`: Central hook management logic.
* `src/gobby/mcp_proxy/`: Logic for connecting to downstream MCP servers.
* `src/gobby/storage/`: SQLite database layer (`~/.gobby/gobby.db`).

## Architecture Quick Reference

1. **CLI Hook** (from Claude/Gemini) -> **Hook Script** -> **HTTP POST** (`/api/v1/hooks/...`)
2. **Daemon** (`HookManager`) processes event -> Updates **Session** / **Memory**.
3. **MCP Proxy**:
* Tools are *not* loaded at startup.
* `list_tools` fetches metadata only.
* `get_tool_schema` fetches full schema on-demand.

## Agent Protocol (CRITICAL)

> "If it's not a task, it didn't happen."

You are operating within a Gobby-enabled environment. You **must** use the `gobby-tasks` system to track your work. Do not rely on chat history or loose files.

### 1. Start of Session

1. **Check Context:**
* `mcp_call_tool("gobby-tasks", "list_ready_tasks", {})`
* `mcp_call_tool("gobby-tasks", "get_task", {"task_id": "..."})` (if ID is known)

2. **Define Work:**
* If new request: `mcp_call_tool("gobby-tasks", "create_task", {"title": "..."})`
* If complex: Break down into subtasks using `parent_task_id`.

3. **Link Session:**
* `mcp_call_tool("gobby-tasks", "link_task_to_session", {})`

### 2. Execution Loop

* **Update Status:** Mark task as `in_progress`.
* **Dependencies:** If blocked, use `add_dependency`.
* **Bugs:** Found a side-issue? `create_task` (don't get distracted).

### 3. End of Session ("Landing the Plane")

* **Close Tasks:** `mcp_call_tool("gobby-tasks", "close_task", {"task_id": "...", "reason": "completed"})`
* **Clean Up:** Don't leave tasks `in_progress` if you stopped working on them.

## MCP Tool Usage Guide

Gobby uses a proxy pattern for tools.

* **List Tools:** `mcp_list_tools(server_name="gobby-tasks")`
* **Get Schema:** `mcp_get_tool_schema(server_name="gobby-tasks", tool_name="create_task")`
* **Call Tool:** `mcp_call_tool(server_name="gobby-tasks", tool_name="create_task", arguments={...})`

*Note: Replace "gobby-tasks" with "gobby-memory" or "gobby-skills" for other internal domains.*
Loading
Loading