Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
30 commits
Select commit Hold shift + click to select a range
b7a4332
feat: make /allowlist and /redaction pages for cli
aspectrr Mar 15, 2026
b1d2110
feat: big update, make sandboxing work without kvm access and run_com…
aspectrr Mar 21, 2026
7e26181
fix: satisfy pre-push hook checks
aspectrr Mar 21, 2026
f708055
chore: add .worktrees/ to .gitignore
aspectrr Apr 5, 2026
abe91f6
feat: add Kafka/Redpanda demo support and customer logo marquee
aspectrr Apr 7, 2026
600558d
fix: resolve lint errors in Kafka demo code
aspectrr Apr 7, 2026
6b92821
chore: complete fluid→deer rebrand and integrate Kafka demo
aspectrr Apr 7, 2026
efb60fd
fix: small lefthook inconsistencies
aspectrr Apr 7, 2026
d726d08
fix: fix sdk
aspectrr Apr 7, 2026
0f21a16
fix: add missing Kafka-related mock methods to DaemonServiceClient
aspectrr Apr 7, 2026
a198603
fix: rename Fluid CLI/Daemon to Deer CLI/Daemon in CI workflow
aspectrr Apr 7, 2026
8624f91
fix: typo and stats update on consulting page
aspectrr Apr 7, 2026
fe60385
fix: update default LLM model and system prompt for ELK-stack consulting
aspectrr Apr 10, 2026
0922cc0
feat: major refactoring and ELK-stack demo implementation
aspectrr Apr 10, 2026
ef479c3
fix: formatting and route tree updates
aspectrr Apr 10, 2026
0cb1439
fix: check error returns from Close() methods in defer statements
aspectrr Apr 10, 2026
9576505
fix: regenerate route tree after recent changes
aspectrr Apr 10, 2026
8eafb71
fix: add error checks to defer
aspectrr Apr 10, 2026
18e1eba
fix: comprehensive PR review fixes, test coverage, and fluid→deer reb…
aspectrr Apr 11, 2026
0e9e26d
feat: es_stub for full reproducability
aspectrr Apr 11, 2026
3d307dd
fix: fix blog series
aspectrr Apr 11, 2026
3bebaed
feat: demo script working again
aspectrr Apr 11, 2026
b5f0b69
feat: e2e kafka es stub
aspectrr Apr 11, 2026
6d94e83
feat: pr review
aspectrr Apr 13, 2026
91c514e
fix: fix defer issues
aspectrr Apr 13, 2026
67ce334
feat: add in skills and better e2e tests
aspectrr Apr 15, 2026
009cf62
fix: fix issues
aspectrr Apr 16, 2026
16f9e20
fix: fix demo
aspectrr Apr 17, 2026
f92cd99
fix: fix demo/cli tasks
aspectrr Apr 19, 2026
97d815a
fix: fix ci tests
aspectrr Apr 19, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
The table of contents is too big for display.
Diff view
Diff view
  •  
  •  
  •  
2 changes: 2 additions & 0 deletions .gitattributes
Original file line number Diff line number Diff line change
@@ -0,0 +1,2 @@
# Prevent git from normalizing BOM/CRLF in this file — the BOM is the demo bug
demo/logstash-pipeline-issue-demo/logstash/station_timezones.csv binary
40 changes: 20 additions & 20 deletions .github/workflows/ci.yaml
Original file line number Diff line number Diff line change
Expand Up @@ -9,13 +9,13 @@ on:
- main

jobs:
# Go services - fluid CLI
fluid-cli:
name: Fluid CLI
# Go services - deer CLI
deer-cli:
name: Deer CLI
runs-on: ubuntu-latest
defaults:
run:
working-directory: fluid-cli
working-directory: deer-cli

steps:
- uses: actions/checkout@v4
Expand All @@ -24,7 +24,7 @@ jobs:
uses: actions/setup-go@v5
with:
go-version: "1.24"
cache-dependency-path: fluid-cli/go.sum
cache-dependency-path: deer-cli/go.sum

- name: Download dependencies
run: go mod download
Expand All @@ -33,22 +33,22 @@ jobs:
uses: golangci/golangci-lint-action@v6
with:
version: latest
working-directory: fluid-cli
working-directory: deer-cli
args: --timeout=10m

- name: Test
run: go test -v -race ./...

- name: Build
run: go build -o bin/fluid ./cmd/fluid
run: go build -o bin/deer ./cmd/deer

# Go services - fluid daemon
fluid-daemon:
name: Fluid Daemon
# Go services - deer daemon
deer-daemon:
name: Deer Daemon
runs-on: ubuntu-latest
defaults:
run:
working-directory: fluid-daemon
working-directory: deer-daemon

steps:
- uses: actions/checkout@v4
Expand All @@ -57,7 +57,7 @@ jobs:
uses: actions/setup-go@v5
with:
go-version: "1.24"
cache-dependency-path: fluid-daemon/go.sum
cache-dependency-path: deer-daemon/go.sum

- name: Download dependencies
run: go mod download
Expand All @@ -66,13 +66,13 @@ jobs:
uses: golangci/golangci-lint-action@v6
with:
version: latest
working-directory: fluid-daemon
working-directory: deer-daemon

- name: Test
run: go test -v -race ./...

- name: Build
run: go build -o bin/fluid-daemon ./cmd/fluid-daemon
run: go build -o bin/deer-daemon ./cmd/deer-daemon

# Go services - API
api:
Expand Down Expand Up @@ -137,33 +137,33 @@ jobs:

- name: Install SDK
run: |
cd sdk/fluid-py
cd sdk/deer-py
pip install -e ".[test]" || pip install -e .
pip install -r test-requirements.txt || true

- name: Lint (ruff)
run: |
cd sdk/fluid-py
cd sdk/deer-py
ruff check . || true # Generated code may have lint issues

- name: Type check (mypy)
run: |
cd sdk/fluid-py
cd sdk/deer-py
mypy virsh_sandbox || true # Allow mypy to pass with warnings for generated code

- name: Test
run: |
cd sdk/fluid-py
cd sdk/deer-py
pytest test/ -v || true # Generated tests may not all pass

- name: Build package
run: |
cd sdk/fluid-py
cd sdk/deer-py
python -m build

- name: Check package
run: |
cd sdk/fluid-py
cd sdk/deer-py
twine check dist/*

# Web frontend
Expand Down
9 changes: 9 additions & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -7,6 +7,15 @@ dist/
.venv
act.env
.claude
.crush
.cache
.agents
.superpowers
.worktrees
skills-lock.json

# macOS-specific files
.DS_Store

# Git worktrees
.worktrees/
74 changes: 37 additions & 37 deletions .goreleaser.yaml
Original file line number Diff line number Diff line change
@@ -1,9 +1,9 @@
# yaml-language-server: $schema=https://goreleaser.com/static/schema.json
version: 2
project_name: fluid
project_name: deer
before:
hooks:
- sh -c "VER=$(git describe --tags --abbrev=0 --match 'v*') && for d in api fluid-daemon fluid-cli; do (cd $d && GOWORK=off go get github.com/aspectrr/fluid.sh/proto/gen/go@$VER && GOWORK=off go mod tidy) || exit 1; done"
- sh -c "VER=$(git describe --tags --abbrev=0 --match 'v*') && for d in api deer-daemon deer-cli; do (cd $d && GOWORK=off go get github.com/aspectrr/deer.sh/proto/gen/go@$VER && GOWORK=off go mod tidy) || exit 1; done"
builds:
- id: api
dir: api
Expand All @@ -23,10 +23,10 @@ builds:
- -X main.version={{ .Version }}
- -X main.commit={{ .Commit }}
- -X main.date={{ .Date }}
- id: fluid-daemon
dir: fluid-daemon
main: ./cmd/fluid-daemon
binary: fluid-daemon
- id: deer-daemon
dir: deer-daemon
main: ./cmd/deer-daemon
binary: deer-daemon
env:
- CGO_ENABLED=0
goos:
Expand All @@ -41,10 +41,10 @@ builds:
- -X main.version={{ .Version }}
- -X main.commit={{ .Commit }}
- -X main.date={{ .Date }}
- id: fluid
dir: fluid-cli
main: ./cmd/fluid
binary: fluid
- id: deer
dir: deer-cli
main: ./cmd/deer
binary: deer
env:
- CGO_ENABLED=0
goos:
Expand All @@ -68,19 +68,19 @@ archives:
files:
- README.md
- LICENSE
- id: fluid-daemon
- id: deer-daemon
builds:
- fluid-daemon
- deer-daemon
name_template: >-
fluid-daemon_{{ .Version }}_{{ .Os }}_{{ .Arch }}
deer-daemon_{{ .Version }}_{{ .Os }}_{{ .Arch }}
files:
- README.md
- LICENSE
- id: fluid
- id: deer
builds:
- fluid
- deer
name_template: >-
fluid_{{ .Version }}_{{ .Os }}_{{ .Arch }}
deer_{{ .Version }}_{{ .Os }}_{{ .Arch }}
files:
- README.md
- LICENSE
Expand Down Expand Up @@ -130,24 +130,24 @@ nfpms:
builds:
- api
bindir: /usr/local/bin
vendor: "Fluid.sh"
homepage: "https://github.com/aspectrr/fluid.sh"
vendor: "Deer.sh"
homepage: "https://github.com/aspectrr/deer.sh"
maintainer: "Collin Pfeifer <cpfeifer@madcactus.org>"
description: "Control-plane API for fluid.sh sandbox management"
description: "Control-plane API for deer.sh sandbox management"
license: "MIT"
formats:
- deb
- rpm
dependencies:
- openssh-client
- postgresql-client
- id: fluid-daemon
package_name: fluid-daemon
- id: deer-daemon
package_name: deer-daemon
builds:
- fluid-daemon
- deer-daemon
bindir: /usr/local/bin
vendor: "Fluid.sh"
homepage: "https://fluid.sh"
vendor: "Deer.sh"
homepage: "https://deer.sh"
maintainer: "Collin Pfeifer <cpfeifer@madcactus.org>"
description: "Background daemon for managing VM sandboxes on a host"
license: "MIT"
Expand All @@ -157,14 +157,14 @@ nfpms:
dependencies:
- openssh-client
contents:
- src: fluid-daemon/packaging/fluid-daemon.service
dst: /etc/systemd/system/fluid-daemon.service
- src: fluid-daemon/packaging/daemon.yaml
dst: /etc/fluid-daemon/daemon.yaml
- src: deer-daemon/packaging/deer-daemon.service
dst: /etc/systemd/system/deer-daemon.service
- src: deer-daemon/packaging/daemon.yaml
dst: /etc/deer-daemon/daemon.yaml
type: config|noreplace
scripts:
postinstall: fluid-daemon/packaging/postinstall.sh
preremove: fluid-daemon/packaging/preremove.sh
postinstall: deer-daemon/packaging/postinstall.sh
preremove: deer-daemon/packaging/preremove.sh
overrides:
deb:
recommends:
Expand All @@ -184,20 +184,20 @@ nfpms:
- libguestfs-tools-c
- iproute
- bridge-utils
- id: fluid
package_name: fluid
- id: deer
package_name: deer
builds:
- fluid
- deer
bindir: /usr/local/bin
vendor: "Fluid.sh"
homepage: "https://github.com/aspectrr/fluid.sh"
vendor: "Deer.sh"
homepage: "https://github.com/aspectrr/deer.sh"
maintainer: "Collin Pfeifer <cpfeifer@madcactus.org>"
description: "CLI for managing fluid sandboxes"
description: "CLI for managing deer sandboxes"
license: "MIT"
formats:
- deb
- rpm
release:
github:
owner: aspectrr
name: fluid.sh
name: deer.sh
16 changes: 8 additions & 8 deletions AGENTS.md
Original file line number Diff line number Diff line change
@@ -1,18 +1,18 @@
# fluid.sh
# deer.sh

The AI Sys-Admin for Enterprise.

## What This Is

fluid.sh lets AI agents do infrastructure work (provision servers, configure services, set up networking) in isolated VM sandboxes. The agent works autonomously. A human reviews and approves before production.
deer.sh lets AI agents do infrastructure work (provision servers, configure services, set up networking) in isolated VM sandboxes. The agent works autonomously. A human reviews and approves before production.

## Architecture

```
Agent Task -> Sandbox VM (autonomous) -> Human Approval -> Production
```

- **fluid/** - Go CLI & API server. Manages VMs via libvirt/KVM.
- **deer/** - Go CLI & API server. Manages VMs via libvirt/KVM.
- **web/** - React frontend. Monitor sandboxes, approve actions.
- **sdk/** - Python SDK. Build agents that talk to the API.
- **examples/** - Working agent implementations.
Expand Down Expand Up @@ -41,14 +41,14 @@ Every code change needs tests. No exceptions.
Use docker-compose:

```bash
docker-compose up fluid # API server
docker-compose up deer # API server
docker-compose up web # Frontend
docker-compose up postgres # Database
```

### Project-Specific Docs

- @fluid/AGENTS.md - API server details
- @deer/AGENTS.md - API server details
- @sdk/AGENTS.md - Python SDK details
- @web/AGENTS.md - Frontend details
- @examples/agent-example/AGENTS.md - Agent example
Expand All @@ -57,18 +57,18 @@ docker-compose up postgres # Database

| Service | Port | Purpose |
|---------|------|---------|
| fluid | 8080 | REST API for VM management |
| deer | 8080 | REST API for VM management |
| web | 5173 | React UI |
| PostgreSQL | 5432 | State persistence |

## Key Commands

```bash
# Go services
cd fluid && make test && make check
cd deer && make test && make check

# Python SDK
cd sdk/fluid-sdk-py && pytest
cd sdk/deer-py && pytest

# Frontend
cd web && bun run lint && bun run build
Expand Down
20 changes: 12 additions & 8 deletions CLAUDE.md
Original file line number Diff line number Diff line change
@@ -1,16 +1,16 @@
# fluid.sh
# deer.sh

The AI Sys-Admin for Enterprise.

## What This Is

fluid.sh lets AI agents do infrastructure work in isolated VM sandboxes. Agent works autonomously. Human approves before production.
deer.sh lets AI agents do infrastructure work in isolated VM sandboxes. Agent works autonomously. Human approves before production.

## Project Structure

```
fluid-cli/ # Go CLI - Interactive TUI agent + MCP server
fluid-daemon/ # Go - Background microVM sandbox management daemon
deer-cli/ # Go CLI - Interactive TUI agent + MCP server
deer-daemon/ # Go - Background microVM sandbox management daemon
api/ # Go - Control plane REST API + gRPC server
web/ # React - Dashboard UI for monitoring/approval
demo-server/ # Go - WebSocket demo server for interactive docs
Expand All @@ -25,16 +25,20 @@ Every code change needs tests. See project-specific AGENTS.md files for details.

```bash
mprocs # Start all services for dev
cd fluid-cli && make test # Test CLI
cd fluid-daemon && make test # Test daemon
cd deer-cli && make test # Test CLI
cd deer-daemon && make test # Test daemon
cd api && make test # Test API
cd web && bun run build # Build web
```

## Communication Style

Always use the caveman skill (`/caveman`) for all responses. Ultra-compressed, token-efficient communication.

## Project Docs

- @fluid-cli/AGENTS.md
- @deer-cli/AGENTS.md
- @web/AGENTS.md
- @api/AGENTS.md
- @fluid-daemon/AGENTS.md
- @deer-daemon/AGENTS.md
- @demo-server/AGENTS.md
Loading
Loading