Skip to content

Commit 9286d94

Browse files
authored
refactor!: remove sandbox and support engines; simplify the CLI (#304)
* fix: stabilize flaky tests and repair stale ecosystem docs - tui: clear inherited terminal env in DetectCapability test so a Ghostty/ Kitty host session cannot leak into the probe - acp: widen the test server deadline from 5s to 30s; a cold provider catalog lookup made the prompt exceed 5s under -race and surface as a spurious 'cancelled' stopReason - docs: fix broken relative links and stale 15-repo/nine-module claims to match the current 4-repo ecosystem.yaml manifest * refactor!: remove sandbox, isolation, and container execution Hawk no longer isolates agent command execution. Bash/PowerShell/Terminal run directly on the host, and the permission engine, tool layer, TUI, and CLI no longer carry a sandbox mode, isolation profile, or Docker container lifecycle. Removed: - internal/sandbox (11k LOC: seatbelt, landlock, seccomp, docker, egress proxy, devenv, code verifier, snapshots, approvals) - internal/engine/isolation_profile.go and the /isolation command - --sandbox flag, /autonomy sandbox, /autonomy isolation, DevEnv tool - Docker container boot, container-required tool gating, container footer - sandbox.mode event emission, settings.sandbox, container_network Kept: the diff sandbox (cmd/sandbox.go, internal/diffsandbox) for staged file-change review, and env sanitization (moved to internal/env). BREAKING CHANGE: host execution is now the only execution path; the fail-closed Docker guarantee is gone. * refactor!: remove harrier, kestrel, merlin, shrike, and swift engines Hawk now depends only on eyrie. The five support engines whose GitHub repositories no longer exist are removed, along with the committed third_party/modproxy that existed solely to serve their unreachable pins. Removed: - harrier memory bridge and its graph-backed subsystems (auto-capture, proactive context, confidence, code links, session diff, cross-project, graph budget, shared mission memory, code index, /harrier, /dream) - kestrel review bridge and the kestrel-powered review run/analyze commands - merlin verification bridge and site-audit pipeline - swift CLI mount and correlation resolver - internal/token's external shrike dependency, replaced by a self-contained local engine (BPE token counting via tiktoken, compression, usage tracking, secret detection, code chunking, invariants, tool-catalog shrink, runtime-graph projection) - third_party/modproxy and the go.mod pins for all five engines The local memory subsystem (core, auto, evolving, zen, retrieval metrics, continuity, skill distillation, sleeptime) is retained. BREAKING CHANGE: hawk no longer integrates the support engines; graph exports lose harrier/kestrel/merlin/shrike observations and the /harrier, /review run|analyze, site-audit, and swift commands are gone. * refactor(cli): group root commands into a curated help surface The root help listed 64 commands alphabetically with no hierarchy. Cobra command groups now organize them into Core, Workflow, Context & memory, Configure, Diagnose, and Reference. Grouping is presentation-only — command names, flags, and behavior are unchanged, so scripts and tests keep working. Unknown/new commands fall into Reference so nothing is hidden from help. Also refresh stale engine references in the ecosystem and graph command descriptions. * docs: align README and guides with engine and sandbox removal Update the README, architecture docs, security model, and user guide to reflect that Hawk now depends only on eyrie, embeds its own token engine, and executes agent commands on the host rather than in a Docker sandbox. - README: drop Docker-only execution, support-engine mounts, and /autonomy sandbox; document host execution and the embedded token engine - architecture: replace the six-engine runtime graph with eyrie + embedded token engine; refresh control-plane, product-architecture, session decomposition, and execution-graph docs - security: replace the container isolation model with the permission engine - user guide: rewrite memory (local, not harrier), permissions, and configuration; rename 18-sandbox.md to 18-execution-and-permissions.md - mark ECOSYSTEM-CONFIG.md as a historical, unimplemented draft * test(acp): widen image-prompt test deadline to avoid -race flake The shared runServerWith helper used a 5s deadline; a cold provider catalog lookup makes the prompt exceed it under -race, cancelling the turn and surfacing as a missing session/update. Match the 30s deadline used by the other ACP test helper. * chore(compat): track eyrie (not falcon) for pin-drift checks Hawk no longer depends on falcon; eyrie is its only external GrayCodeAI module. Update the advisory drift checker and its tests accordingly. * style: apply gofumpt across the tree Restore gofumpt/gofmt cleanliness after the sandbox and engine removals; CI's format job is zero-tolerance. * test(token): cover the local token engine Add unit tests for the self-contained token package that replaced shrike: token estimation, compression, usage tracking and thresholds, secret detection/redaction/masking, code chunking, JSON/log invariants, tool-catalog shrink, and runtime-graph projection (82.7% coverage). Also fix two bugs the tests surfaced: - ChunkCode reported token counts that disagreed with its budget check, letting chunks exceed MaxTokens - LintToolCatalog measured description size on the JSON-encoded value (including quotes) instead of the decoded string * refactor: purge stale engine naming and wire the local memory HUD - rename Shrike-named engine methods and comments to token-neutral names - rename the engine token facade file and drop stale Shrike references - remove the orphaned internal/bridge/swift package (no importers) - repoint internal/bench at the embedded token engine instead of the removed sibling engines - remove the dangling /harrier command from help, palette, and tips - wire the HUD memory section to the local memory manager (recalls, hit rate, sessions) instead of the removed harrier bridge - rename the ecosystem panel's shrike row to the token engine - add a memory round-trip integration test through MemoryService * fix(compact): guard compression reduction ratio against zero tokens Restructure the token-engine compression branch so the ratio is computed only after the original-token guard, avoiding a divide-by-zero when the input is empty. * docs: retire multi-engine references in current-facing docs - versioning/OTEL/monitoring/intelligent-cli: drop harrier/kestrel/merlin/ shrike/swift examples and the sandbox-v2 feature flag - architecture README: replace the six-engine target shape with eyrie plus the embedded token engine - mark the pre-2026-09 ecosystem docs as historical * ci: drop the sandbox-image job and fix stale path references - docker.yml: remove the sandbox-image build/scan/publish job and its path triggers; internal/sandbox no longer exists - verify-milestone.sh: drop the deleted internal/sandbox test invocation - CODEOWNERS: point security-sensitive rules at real paths and drop the removed sandbox/container entries - e2e-macos.sh: clarify the remaining 'sandbox status' is the diff sandbox - systemd unit: reword the process-hardening comment * chore: align compatibility matrix and platform capabilities with the current eco - compatibility-matrix.json: reduce components to hawk + eyrie - platform-capabilities.json: drop the sandbox capability and collapse ecosystem_compatibility to hawk+eyrie - mark the Year 0 active track as superseded * fix(mcp): make memory and compress tools actually work The MCP server advertised hawk_memory_recall, hawk_memory_store, hawk_review, hawk_scan, and hawk_compress, but delegated to tool names that do not exist in the registry (core_memory, code_review, security_scan, compress), so every call failed at runtime. - memory recall/store now use the local memory store directly - compress now runs the embedded token engine directly and returns stats - remove hawk_review and hawk_scan: their kestrel/merlin engines are gone - memory persistence moves from .harrier/ to .hawk/ in retrieval metrics and continuity tracking - update MCP tests to the real 5-tool surface, including a store/recall round-trip * refactor(harness,contracts): drop removed-engine assumptions - harness evaluator: score the project's own test runners instead of hardcoded merlin/kestrel bridge flags; drop the bridge fields and the sandbox policy field from the assets contract - contracts/types: remove the unused FindingFromKestrel/FindingFromMerlin constructors and the stale review threshold comment * docs(code): purge remaining engine-name references in comments Replace stale harrier/kestrel/merlin references in doc comments, user-facing tool descriptions, and context-visualization labels with token-neutral wording. * fix(review): restore 'hawk review run' on Hawk's own review pipeline The kestrel-powered review run command was removed with the engine, but the post-commit hook, 'hawk review refine', and the documented workflow still invoke it. Reimplement it on RunReviewPipeline (Hawk-owned, provider-only): it resolves the provider through the Eyrie boundary, runs the multi-concern review, and stores the neutral review contract. * test: drop stale shrike guards and neutralize engine fixtures - remove the always-true ShrikeAvailable skip guards now that the token engine is embedded - rename synthetic graph-fixture producers and session IDs away from the removed engine names - testaudit: check boundaries for eyrie only * feat(token,tool): real structural compression and working SpecLinks Compression previously only hard-truncated at the budget, which the compaction path explicitly rejects as a non-summary. Add two structural layers and a head/tail budget enforcer: - collapse repeating line cycles (period 1-8) such as alternating user/assistant boilerplate - collapse near-duplicate line runs by normalized shape - enforce the budget by eliding the middle while preserving the head (goal/context) and tail (recent turns) SpecLinks was a stub: check listed IDs without verifying coverage and add returned 'not yet implemented'. check now reports per-requirement citation and test coverage; add writes an idempotent traceability checklist into tasks.md. Adds tests for both. * fix(tool): wire CodeSearch to the local semantic index CodeSearch was advertised in the README and help but its backend (the harrier code index) was removed, so every call failed. Wire CodeSearchFn and RefreshCodeIndexFn to repomap's self-contained TF-IDF SemanticIndex, built lazily from the working directory and cached on the ToolService. Adds a search test. * feat(vim,mcp): implement undo and drop the unservable session resource - vim: 'u' was a no-op placeholder. Add a bounded (100-deep) text-snapshot history recorded before every mutating command (x, X, ~, r, p, P, and delete/change operators) and restore it on undo. - mcp: remove the hawk://session resource, which advertised session messages the stateless server cannot serve and returned a fake '{}'. * refactor(cli)!: remove undocumented niche commands Remove four commands with no documentation or CI usage: - replay / tape (fxtape terminal-capture tooling) - schema (settings JSON-schema dump) - swift-report (private diagnostic report) and its internal/swift package Regenerate the golden root help. Command grouping drops the removed names. * style: apply gofumpt v0.10.0 to tool_service_test CI pins gofumpt v0.10.0, which reformats multi-line []byte literals passed to os.WriteFile. Local gofmt did not flag it.
1 parent ad15943 commit 9286d94

350 files changed

Lines changed: 4356 additions & 25360 deletions

File tree

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

‎.github/CODEOWNERS‎

Lines changed: 8 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -10,16 +10,15 @@
1010
* @GrayCodeAI/maintainers
1111

1212
# Engine and core agent loop
13-
/engine/ @GrayCodeAI/core-team
14-
/cmd/ @GrayCodeAI/core-team
15-
/tool/ @GrayCodeAI/core-team
16-
/session/ @GrayCodeAI/core-team
13+
/internal/engine/ @GrayCodeAI/core-team
14+
/cmd/ @GrayCodeAI/core-team
15+
/internal/tool/ @GrayCodeAI/core-team
16+
/internal/session/ @GrayCodeAI/core-team
1717

18-
# Sandbox / container / permissions (security-sensitive)
19-
/sandbox/ @GrayCodeAI/security-team
20-
/permissions/ @GrayCodeAI/security-team
21-
/container/ @GrayCodeAI/security-team
22-
/auth/ @GrayCodeAI/security-team
18+
# Permissions and credential handling (security-sensitive)
19+
/internal/permissions/ @GrayCodeAI/security-team
20+
/internal/credentials/ @GrayCodeAI/security-team
21+
/internal/governance/ @GrayCodeAI/security-team
2322

2423
# CI / release / build tooling
2524
/.github/ @GrayCodeAI/devops-team

‎.github/workflows/ci.yml‎

Lines changed: 4 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -20,12 +20,10 @@ concurrency:
2020

2121
env:
2222
GO_VERSION: "1.26.6"
23-
# Module resolution: the committed third_party/modproxy serves GrayCodeAI pins
24-
# whose repositories no longer exist (and which the public proxy never cached,
25-
# so it 404s them). Public modules resolve from proxy.golang.org as usual;
26-
# direct-VCS fallback is retained for anything else. Do NOT set GOPRIVATE for
27-
# GrayCodeAI paths: it would force direct git and bypass the committed proxy.
28-
GOPROXY: "file://${{ github.workspace }}/third_party/modproxy,https://proxy.golang.org,direct"
23+
# Module resolution: eyrie is the only GrayCodeAI module dependency and it is
24+
# published on the public proxy. Direct-VCS fallback is retained for anything
25+
# else.
26+
GOPROXY: "https://proxy.golang.org,direct"
2927
# CI must resolve the dependency versions pinned in go.mod/go.sum, not whatever
3028
# happens to sit in the sibling checkouts that the committed go.work points at.
3129
# Go's reference is explicit that a committed go.work "may cause a continuous

‎.github/workflows/docker.yml‎

Lines changed: 0 additions & 80 deletions
Original file line numberDiff line numberDiff line change
@@ -8,8 +8,6 @@ on:
88
branches: [main]
99
paths:
1010
- "Dockerfile"
11-
- "internal/sandbox/container_version"
12-
- "internal/sandbox/sandbox.Dockerfile"
1311
- "**.go"
1412
- "go.mod"
1513
- "go.sum"
@@ -234,81 +232,3 @@ jobs:
234232
docker buildx imagetools create -t "$tag" $src
235233
fi
236234
done
237-
238-
sandbox-image:
239-
runs-on: ubuntu-latest
240-
steps:
241-
- uses: actions/checkout@df4cb1c069e1874edd31b4311f1884172cec0e10 # v6.0.3
242-
243-
- name: Read sandbox image version
244-
id: sandbox-version
245-
shell: bash
246-
run: echo "tag=$(tr -d '[:space:]' < internal/sandbox/container_version)" >> "$GITHUB_OUTPUT"
247-
248-
- name: Set up QEMU
249-
uses: docker/setup-qemu-action@06116385d9baf250c9f4dcb4858b16962ea869c3 # v4.1.0
250-
251-
- name: Set up Docker Buildx
252-
uses: docker/setup-buildx-action@d7f5e7f509e45cec5c76c4d5afdd7de93d0b3df5 # v4.1.0
253-
254-
- name: Log in to GHCR
255-
if: github.event_name != 'pull_request'
256-
uses: docker/login-action@650006c6eb7dba73a995cc03b0b2d7f5ca915bee # v4.2.0
257-
with:
258-
registry: ${{ env.REGISTRY }}
259-
username: ${{ github.actor }}
260-
password: ${{ secrets.GITHUB_TOKEN }}
261-
262-
- name: Build sandbox image for scan
263-
uses: docker/build-push-action@f9f3042f7e2789586610d6e8b85c8f03e5195baf # v7.2.0
264-
with:
265-
context: internal/sandbox
266-
file: internal/sandbox/sandbox.Dockerfile
267-
platforms: linux/amd64
268-
push: false
269-
load: true
270-
tags: ${{ env.REGISTRY }}/graycodeai/hawk-sandbox:scan
271-
cache-from: type=gha,scope=hawk-sandbox
272-
cache-to: type=gha,mode=max,scope=hawk-sandbox
273-
274-
- name: Scan sandbox image
275-
uses: aquasecurity/setup-trivy@3fb12ec12f41e471780db15c232d5dd185dcb514
276-
with:
277-
version: v0.70.0
278-
cache: true
279-
- name: Run Trivy sandbox scan (sarif)
280-
shell: bash
281-
run: |
282-
# This image gate covers the Debian OS package surface. npm's
283-
# bundled CLI dependency tree is pinned by the Node base image and
284-
# reviewed separately from the runtime OS scan.
285-
trivy image \
286-
--severity CRITICAL,HIGH \
287-
--ignore-unfixed \
288-
--ignorefile "${GITHUB_WORKSPACE}/.trivyignore" \
289-
--vuln-type os \
290-
--format sarif \
291-
--output trivy-sandbox-image.sarif \
292-
--exit-code 1 \
293-
${{ env.REGISTRY }}/graycodeai/hawk-sandbox:scan
294-
295-
- name: Build and publish public sandbox image
296-
uses: docker/build-push-action@f9f3042f7e2789586610d6e8b85c8f03e5195baf # v7.2.0
297-
with:
298-
context: internal/sandbox
299-
file: internal/sandbox/sandbox.Dockerfile
300-
platforms: linux/amd64,linux/arm64
301-
push: ${{ github.event_name != 'pull_request' }}
302-
tags: |
303-
${{ env.REGISTRY }}/graycodeai/hawk-sandbox:${{ steps.sandbox-version.outputs.tag }}
304-
${{ env.REGISTRY }}/graycodeai/hawk-sandbox:latest
305-
cache-from: type=gha,scope=hawk-sandbox
306-
cache-to: type=gha,mode=max,scope=hawk-sandbox
307-
308-
# Publish the sandbox scan to GitHub code scanning. PRs still run the
309-
# scan; they just do not publish the release image artifacts.
310-
- name: Upload sandbox image scan results
311-
if: always()
312-
uses: github/codeql-action/upload-sarif@8aad20d150bbac5944a9f9d289da16a4b0d87c1e # v4
313-
with:
314-
sarif_file: trivy-sandbox-image.sarif

‎.github/workflows/release.yml‎

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -17,8 +17,7 @@ jobs:
1717
goreleaser:
1818
runs-on: ubuntu-latest
1919
env:
20-
# Deleted-repos pins resolve from the committed file proxy (see ci.yml).
21-
GOPROXY: "file://${{ github.workspace }}/third_party/modproxy,https://proxy.golang.org,direct"
20+
GOPROXY: "https://proxy.golang.org,direct"
2221
steps:
2322
- name: Checkout
2423
uses: actions/checkout@de0fac2e4500dabe0009e67214ff5f5447ce83dd # v6.0.2

‎README.md‎

Lines changed: 27 additions & 52 deletions
Original file line numberDiff line numberDiff line change
@@ -27,15 +27,14 @@
2727

2828
## Why hawk
2929

30-
hawk is an AI-powered coding agent that lives in your terminal. It reads your codebase, writes and edits files, runs tests, and manages git — all through natural language. Unlike IDE-bound tools, hawk works over SSH, in containers, and on any machine with a shell.
30+
hawk is an AI-powered coding agent that lives in your terminal. It reads your codebase, writes and edits files, runs tests, and manages git — all through natural language. Unlike IDE-bound tools, hawk works over SSH and on any machine with a shell.
3131

3232
**Developer path:** one machine, keychain credentials, local memory. Run `hawk path` to check readiness.
3333

3434
- **Model-agnostic** — supports many first-class providers through [eyrie](https://github.com/GrayCodeAI/eyrie) (the exact count is dynamic — see `hawk --help`), including Anthropic, OpenAI, Gemini, Fireworks AI, Concentrate AI (pay-as-you-go), DeepSeek, and Ollama
3535
- **Zero CGO** — single static binary, cross-compiled for linux/darwin/windows on amd64/arm64
3636
- **Privacy-first** — your code never leaves your machine except to the LLM API you choose
37-
- **Docker-only execution** — agent commands run in an isolated container and
38-
fail closed when Docker is unavailable
37+
- **Runs anywhere** — host execution on any machine with a shell, including over SSH
3938
- **Extensible** — 40+ built-in tools, MCP server support, community skill registry
4039

4140
## Status
@@ -81,16 +80,12 @@ go build -o hawk ./cmd/hawk
8180
./hawk path
8281
```
8382

84-
**Docker is required before your first run.** Hawk executes agent commands inside a
85-
container — there is no host-execution fallback (fail-closed). Start the Docker daemon
86-
first, then run `hawk path` (or `hawk doctor`) to see an ordered onboarding
87-
checklist: daemon running → sandbox image cached → registry reachable → local build.
88-
Hawk automatically uses the versioned public `graycodeai/hawk-sandbox` image;
89-
when it is not local, Hawk pulls it anonymously, and if the registry is unavailable
90-
it builds the bundled sandbox image locally through Docker.
83+
**No Docker or container runtime is required.** Hawk executes agent commands
84+
directly on the host. Run `hawk path` (or `hawk doctor`) to see an onboarding
85+
checklist: credentials → model → catalog → ecosystem.
9186

92-
See [docs/SECURITY-DEVELOPER.md](docs/SECURITY-DEVELOPER.md) for the credential model and
93-
the sandbox checklist. Do not put API keys in shell env or `.env` for hawk.
87+
See [docs/SECURITY-DEVELOPER.md](docs/SECURITY-DEVELOPER.md) for the credential model.
88+
Do not put API keys in shell env or `.env` for hawk.
9489

9590
Optional for contributors:
9691

@@ -124,7 +119,6 @@ and lifecycle events:
124119
```bash
125120
hawk graph export
126121
hawk graph export <session-id>
127-
hawk graph export <session-id> --swift-checkpoint abc123def456
128122
hawk graph export --mission-dir /path/to/mission
129123

130124
# Explicitly privacy-normalize and sync the graph for a connected cloud project
@@ -138,17 +132,11 @@ set `HAWK_CLOUD_URL` to your Hawk Cloud worker URL before running
138132
will reject a device token.
139133

140134
The export contains metadata and hashes, not prompts, tool arguments/results,
141-
policy reasons, verification evidence, or runtime output. Swift remains
142-
available separately as `hawk swift graph export`. Persisted chat sessions
143-
automatically append privacy-safe permission, enabled approval-gate, and
144-
`VerifyPlanExecution` summaries for subsequent graph exports. Harrier memory
145-
subgraphs and Hawk code-index chunks actually selected for inference are also
146-
journaled as metadata-only knowledge nodes and linked to the session. Merlin's
147-
observed bridge path similarly journals bounded, metadata-only report/finding
148-
quality subgraphs. Kestrel exposes the same observed bridge boundary for
149-
metadata-only code-review quality subgraphs. Mission runs also persist a
150-
portable `mission-graph.json`; the mission form is validated and synchronized
151-
explicitly with the `--mission-dir` variants above.
135+
policy reasons, verification evidence, or runtime output. Persisted chat
136+
sessions automatically append privacy-safe permission, enabled approval-gate,
137+
and `VerifyPlanExecution` summaries for subsequent graph exports. Mission runs
138+
also persist a portable `mission-graph.json`; the mission form is validated and
139+
synchronized explicitly with the `--mission-dir` variants above.
152140

153141
### Multi-Agent Mission Mode (optional)
154142

@@ -178,7 +166,6 @@ spec-driven workflow gate — rather than one merged permission mode:
178166
```text
179167
/autonomy
180168
/autonomy tier <scout|builder|operator|autonomous>
181-
/autonomy sandbox <strict|workspace|off>
182169
/autonomy dry-run <on|off>
183170
/autonomy allow <rule>
184171
/autonomy deny <rule>
@@ -200,10 +187,6 @@ The model is:
200187
- `Builder`
201188
- `Operator`
202189
- `Autonomous`
203-
- `Sandbox` controls the execution boundary:
204-
- `strict`
205-
- `workspace`
206-
- `off`
207190
- `Dry-run` is a kill switch: denies every tool call unconditionally,
208191
regardless of tier or spec stage.
209192
- `Rules` control explicit allow/deny exceptions.
@@ -326,7 +309,6 @@ hawk --provider openai --model gpt-4o # Override provider
326309
# Inside the TUI
327310
/autonomy
328311
/autonomy tier builder
329-
/autonomy sandbox workspace
330312
/autonomy allow Bash(git:*)
331313
/autonomy deny Bash(rm -rf *)
332314
/autonomy save project
@@ -339,7 +321,6 @@ hawk --provider openai --model gpt-4o # Override provider
339321
```bash
340322
hawk -p "explain this repo" # Print response, exit
341323
hawk -p "fix tests" --allowed-tools "Bash(go test:*) Edit Read"
342-
hawk -p "review this repo" --permission-mode plan --sandbox workspace
343324
hawk exec "refactor auth module" # Full engine, non-interactive
344325
hawk exec --auto full "add error handling" # Full autonomy
345326
hawk exec --worktree "add rate limiting" # Isolated branch
@@ -349,21 +330,19 @@ hawk exec --agent reviewer "review last commit" # Custom persona
349330
### Diagnostics & ecosystem
350331

351332
```bash
352-
hawk path # Developer path readiness (setup + security + sandbox)
353-
hawk doctor # Full health report (eyrie + harrier + shrike panel)
333+
hawk path # Developer path readiness (setup + security)
334+
hawk doctor # Full health report (eyrie + token pipeline panel)
354335
hawk ecosystem # Ecosystem panel only
355-
hawk harrier # Persistent memory graph
356-
hawk harrier search <query> # Search harrier memories
357336
hawk preflight # Quick ready-to-chat check
358337
make path # Developer path verification
359338
make smoke # Build + quick verification script
360339
```
361340

362341
See [docs/SECURITY-DEVELOPER.md](docs/SECURITY-DEVELOPER.md).
363342

364-
See [docs/ecosystem-message-flow.md](docs/ecosystem-message-flow.md) for how eyrie, harrier, and shrike connect during a chat session, and [docs/ECOSYSTEM-WIRING.md](docs/ECOSYSTEM-WIRING.md) for the current-to-proposed architecture and repository boundaries.
343+
See [docs/ecosystem-message-flow.md](docs/ecosystem-message-flow.md) for how eyrie connects during a chat session, and [docs/ECOSYSTEM-WIRING.md](docs/ECOSYSTEM-WIRING.md) for the current-to-proposed architecture and repository boundaries.
365344

366-
In the TUI: `/path`, `/ecosystem`, `/harrier`, `/harrier search <query>`, `/memory` (AGENTS.md).
345+
In the TUI: `/path`, `/ecosystem`, `/memory` (AGENTS.md).
367346

368347
### Daemon Mode
369348

@@ -428,7 +407,7 @@ hawk/
428407
│ ├── session/ # Persistence (JSONL, WAL, checkpoints)
429408
│ ├── api/ # HTTP API server
430409
│ ├── daemon/ # Background HTTP/SSE server
431-
│ ├── sandbox/ # Command isolation (landlock, seccomp, docker)
410+
│ ├── token/ # Token counting, compression, usage, secrets
432411
│ ├── permissions/ # User approval system with auto-learning
433412
│ ├── hooks/ # Event-driven plugin system
434413
│ ├── mcp/ # Model Context Protocol client
@@ -437,7 +416,7 @@ hawk/
437416
│ ├── observability/ # Analytics, metrics, logging, tracing
438417
│ ├── resilience/ # Circuit breaker, rate limiting, retries
439418
│ ├── feature/ # eval, fingerprint, voice, IDE integration
440-
│ ├── bridge/ # External bridges (kestrel, merlin, sessioncapture)
419+
│ ├── bridge/ # External bridges (sessioncapture)
441420
│ ├── provider/ # Provider routing
442421
│ └── system/ # Bus, cron, retention, shutdown
443422
├── docs/ # Architecture, security, integration docs
@@ -454,20 +433,17 @@ hawk is the main CLI/product and integrates these GrayCodeAI repositories in
454433
three runtime layers plus optional tooling/platform services:
455434

456435
- **Primary product:** **hawk** is the only end-user product surface in this ecosystem.
457-
- **Support engines mounted by Hawk:** **eyrie**, **harrier**, **shrike**, **swift**, **kestrel**, **merlin**. Hawk imports or shells into these engines behind its own command surface.
458-
- **Shared foundations:** **falcon**
459-
provides shared MCP server scaffolding.
436+
- **Provider engine mounted by Hawk:** **eyrie** is the LLM provider runtime, consumed through its stable engine facade.
460437
- **API consumers/extensions:** **graycode-skills** provides Hawk skills
461438
installed on demand (`hawk skills install`).
462-
- **Tooling/platform:** **owl** visualizes the generated ecosystem graph;
463-
**graycode-platform** contains the optional web/BFF/Hawk Cloud plane and is
464-
outside the Hawk Go runtime graph.
439+
- **Tooling/platform:** **graycode-platform** contains the optional web/BFF/Hawk
440+
Cloud plane and is outside the Hawk Go runtime graph.
465441

466442
Local development uses:
467443

468-
- **`go.mod` modules:** pinned requirements for the support engines
444+
- **`go.mod` modules:** pinned requirements for `eyrie`
469445
- **Workspace + `go.work`:** sibling support repos are cloned in the `graycode-eco` workspace (as `../<repo>`); `go.work` resolves the module paths to those local checkouts
470-
- **Module-mode builds:** standalone / Docker builds resolve the pinned `go.mod` versions from the module proxy (no workspace)
446+
- **Module-mode builds:** standalone builds resolve the pinned `go.mod` versions from the module proxy (no workspace)
471447

472448
Cross-repo contracts now live in `internal/contracts` (vendored from the
473449
removed `github.com/GrayCodeAI/eagle` module) so support repos do not depend
@@ -496,13 +472,12 @@ You may keep a **personal** parent **`go.work`** that lists alternate clones on
496472

497473
`ecosystem.yaml` is the canonical inventory of repositories cloned as
498474
siblings in this local workspace; tooling reads it rather than carrying its
499-
own repo-name list. `harrier`, `shrike`, `swift`, `kestrel`, `merlin` and
500-
`falcon` above are consumed as pinned `go.mod` module dependencies rather
501-
than local workspace clones, so they are not listed there.
475+
own repo-name list. `eyrie` is the only Go module dependency outside this
476+
repo; it is consumed through its stable engine facade.
502477

503478
For the consolidated repo map and the current-vs-proposed architecture diagrams, see [docs/architecture/hawk-current-vs-proposed.md](docs/architecture/hawk-current-vs-proposed.md).
504-
For execution-graph ownership, automatic capture seams, export/sync commands,
505-
and the Swift correlation contract, see
479+
For execution-graph ownership, automatic capture seams, and export/sync
480+
commands, see
506481
[docs/architecture/execution-graph.md](docs/architecture/execution-graph.md).
507482

508483
## Development

‎cmd/autocomplete.go‎

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -432,7 +432,6 @@ func (ac *Autocompleter) completeFlags(prefix string) []Suggestion {
432432
{"--max-budget-usd", "Maximum API spend"},
433433
{"--system-prompt", "System prompt to use"},
434434
{"--output-format", "Output format"},
435-
{"--sandbox", "Permission sandbox"},
436435
{"--auto-commit", "Auto-commit changes"},
437436
{"--watch", "Watch for file changes"},
438437
{"--vibe", "Vibe coding mode"},

‎cmd/autonomy_tiers.go‎

Lines changed: 0 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,6 @@ package cmd
33
import (
44
"fmt"
55
"image/color"
6-
"strings"
76

87
lipgloss "charm.land/lipgloss/v2"
98
"github.com/GrayCodeAI/hawk/internal/engine"
@@ -131,23 +130,6 @@ func formatAutonomyTierMessage(level engine.AutonomyLevel) string {
131130
return fmt.Sprintf("Autonomy %s — %s", renderAutonomyTierLabel(level), autonomyTierDescription(level))
132131
}
133132

134-
func autonomyLevelForTierName(name string) engine.AutonomyLevel {
135-
switch strings.TrimSpace(name) {
136-
case "Scout":
137-
return engine.AutonomyBasic
138-
case "Builder":
139-
return engine.AutonomySemi
140-
case "Operator":
141-
return engine.AutonomyFull
142-
case "Autonomous":
143-
return engine.AutonomyYOLO
144-
default:
145-
return DefaultContainerAutonomy
146-
}
147-
}
148-
149-
// autonomyFromSettings maps settings.json autonomy (1–4) to a tier level.
150-
// 0 or unset leaves session default until the container is ready.
151133
func autonomyFromSettings(n int) engine.AutonomyLevel {
152134
switch n {
153135
case 1:

‎cmd/bg_sessions.go‎

Lines changed: 0 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -344,9 +344,6 @@ func collectDaemonArgs() []string {
344344
if provider != "" {
345345
args = append(args, "--provider", provider)
346346
}
347-
if sandboxFlag != "" {
348-
args = append(args, "--sandbox", sandboxFlag)
349-
}
350347
if dangerouslySkipPermissions {
351348
args = append(args, "--dangerously-skip-permissions")
352349
}

0 commit comments

Comments
 (0)