Skip to main content

SPRUCE GROVE OS

The Spruce Grove mark — three stepped spruces, one ground line; the center tree in gold, its neighbors in stone

gran · lund · sv. · spruce grove — an agentic coding CLI grown in the grove.

Together we are better. Always.

License: Apache-2.0 Python 3.11–3.14 Tests: 7869 passing Inspired by Code Puppy

Spruce Grove OS is a full custom instance of an agentic coding assistant: the same engine, frameworks, plugins, agents, tools, skills, MCP plumbing, and TUI as the project it is inspired by — replanted around one grove's vision, mission, and values.

Inspired by Code Puppy

Every trail in this grove started as a Code Puppy trail. Spruce Grove OS is built directly from — and stays import-compatible with — Code Puppy by Michael Pfaffenberger (MIT licensed — its notice is preserved verbatim in our NOTICE). Huge respect to the original project and its contributors; this grove exists because the puppy shared everything. Exact lineage, sync points, and the full rename/contract map: PROVENANCE.md.

The ethos of the grove

Four sources, one creed — ETHOS.md:

  1. Ozark Bagels — how to carry yourself. Be first to say hello. Be kinder than necessary. Be tough minded, but tender hearted. Leave everything better than you found it. Spread joy, love, and cream cheese.
  2. The Junto (1727) — how to think with others. Love truth for truth's sake. No invented facts — ever; cite or flag "NOT VERIFIED". Provisional phrasing over contradiction combat. Pragmatism over metaphysics.
  3. gran·lund — who is doing the carrying. Help people solve problems. Remove technology obstacles. Meet people where they are, as humans.
  4. Wiggledom — how the work moves. Straight lines are brittle; the wiggle is fluid and "stronger than almost anything — like water." Melody is the through-line, rhythm is space and pace, harmony is the relationship between the parts. Embrace the dissonance. When the world feels like a straight line, be a wiggler.

Backed by the Leather Apron Club (Junto)

In 1727 a 21-year-old printer gathered twelve tradesmen in Philadelphia — the Junto, the Leather Apron Club: a mutual-improvement circle that turned Friday-night questions into a subscription library, a fire brigade, and a university. The reboot convenes in Bentonville, Arkansas — first council Friday, September 18, 2026 · Bentonville Barber Company. Spruce Grove OS is the club's shared toolkit: an apprentice that lives on your own machine and works for the town. The standing question is Franklin's own — how can the Junto assist you in any of your honorable designs?

The grove works for the town

No mockups — every showcase below is live today, built by the agent and shipped to a real door:

  • tylergranlund.com — the flagship: TanStack Start · React 19 SSR · TypeScript strict · Tailwind v4 · Vitest gates — resale desk, ventures, career, writing, and a colophon that declares its own stack.
  • leads.bentondrones.com — lead intake: form → geocode → Jira → dashboard. Python stdlib + SQLite core, Render, Playwright-verified.
  • Bentonville Barber Company — the club's home. Victor started it with his family behind him; Drew Garrison and Daniel Devault came along; and when the old landlord hiked the rent, a customer handed the shop its spot on the square. Helping each other — that's the whole thesis. Booking runs on Square; the first council convenes in the chairs.
  • sprucegrove.io — the site, the CLI, the desktop shell — all shipped from the same tree.

Meet Cedar

The default agent persona is Cedar, the grove guide — same competent agent core, new disposition: candid about code, gentle with people, allergic to invented facts. Rename it anytime in grove.cfg.


Design system

Nordic forest, dark-first. Charcoal base, deep spruce, warm cedar accents, mist typography. Tokens shared with tylergranlund.com — the same palette that colors the terminal splash.

Color tokens

Token OKLCH Role Chip
charcoal oklch(0.18 0.012 150) base background #1d211e
spruce-deep oklch(0.22 0.03 158) deep brand layer #20392b
spruce oklch(0.32 0.045 158) primary brand #2d4f3a
moss oklch(0.45 0.06 155) accent green #588f5e
cedar oklch(0.78 0.12 55) warm accent, persona #d2a069
bark oklch(0.32 0.025 60) earthy neutral #4d4136
stone oklch(0.85 0.012 90) soft UI text #d6d2c8
mist oklch(0.94 0.008 100) foreground/typography #f0e1c8

Typography

  • Fraunces (variable serif) — wordmarks and display
  • Inter — body copy
  • JetBrains Mono — code, CLI output

Terminal theming

The boot splash renders a shimmering pyramid + a braille wordmark ("SPRUCE GROVE", compact "GROVE" on narrow terminals) in a truecolor canopy-to-cedar gradient: halo #2D4F3A → glow #588F5E → core #D2A069, with a mist-white crest (#F0E1C8) where the sheen passes. ANSI fallbacks step down through green → bright green → yellow.

Voice

Plain-spoken, warm, a little playful. First to say hello. Candid, never roasty. Zero invented facts — "NOT VERIFIED" beats a confident guess.

Full tokens and voice guide: BRAND.md.


What's inside (same bones as Code Puppy)

┌──────────────────────────────────────────────────┐
│  TUI / CLI  (command_line/)                      │
├──────────────────────────────────────────────────┤
│  Agent Layer  (agents/)  — Cedar default + JSON  │
├──────────────────────────────────────────────────┤
│  Tool Layer  (tools/)    — TOOL_REGISTRY         │
├──────────────────────────────────────────────────┤
│  Plugin Layer  (plugins/, callbacks.py)          │
├──────────────────────────────────────────────────┤
│  Model Layer  (model_factory.py)                 │
├──────────────────────────────────────────────────┤
│  pydantic-ai + MCP (external)                    │
└──────────────────────────────────────────────────┘

Python 3.11–3.14 · pydantic-ai · pluggable models (OpenAI, Anthropic, Gemini, Bedrock, Z.AI, custom endpoints) · MCP servers · skills with namespaces · session history + compaction · i18n.

Install & run

git clone https://github.com/t-granlund/SPRUCE-GROVE-OS
cd SPRUCE-GROVE-OS
uv sync
uv run spruce-grove        # or: uv run grove

Config: ~/.spruce_grove/grove.cfg · Env vars: SPRUCE_GROVE_*.

Staying current (self-healing updates)

Run it as a uv tool and the grove tends itself:

uv tool install spruce-grove
grove          # or: spruce-grove

On every startup a background check compares your install against PyPI. When a newer release exists, the on-disk install upgrades in place while your current session keeps running its warm, consistent code — nothing is restarted, nothing breaks. Your next launch boots the new version, and a single log line tells you the handoff happened. There is no update button to remember, no changelog you must babysit.

  • NO_AUTO_UPDATE=1 — keep the check, never actuate
  • NO_VERSION_UPDATE=1 — silence the whole check
  • Pin back anytime: uv tool install spruce-grove==X.Y.Z
  • Source checkouts (the git clone flow above) are never touched by the updater — dev environments are sacred.

Details: docs/SELF-UPDATE.md.

Code Puppy compatibility

  • code_puppy.* imports (e.g. from code-puppy-core-plugins) resolve to spruce_grove.* via an import shim with true module identity.
  • The plugin entry-point group code_puppy.plugins is intentionally retained.
  • Legacy aliases kept: agent_code_puppy, CodePuppyAgent, get_puppy_name(), persisted puppy_name fallback.
  • Full contract ledger: PROVENANCE.md.

License

Apache-2.0 since September 2026 (previously MIT, inherited from Code Puppy). The Code Puppy lineage is preserved verbatim in NOTICE — the puppy came first, and the receipt travels with the work. See also TRADEMARKS.md and PROVENANCE.md.

Release files for spruce-grove 1.0.83

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for spruce-grove 1.0.83
File Size Uploaded
spruce_grove-1.0.83.tar.gz 933.8 kB Details

Built distribution (wheel)

Table of built distributions (wheels) for spruce-grove 1.0.83
File Interpreter ABI Platform
spruce_grove-1.0.83-py3-none-any.whl Python 3 none any Details

Total release size: 2.1 MB

Release files / spruce_grove-1.0.83.tar.gz

Download URL spruce_grove-1.0.83.tar.gz
Size 933.8 kB
Tags Source
SHA-256 checksum
How to use checksums
99567aff00acfda9f57ac4a825f66c25166df10486057eb81c44f49c9ca65e92
BLAKE2b-256 checksum
How to use checksums
ef051464167dbd2d5ba656c5a17d873f87133f8d090b1d64c67b0c97bda55d33
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.14

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Sep 24, 2026.

Transparency log

Release files / spruce_grove-1.0.83-py3-none-any.whl

Download URL spruce_grove-1.0.83-py3-none-any.whl
Size 1.2 MB
Tags Python 3
SHA-256 checksum
How to use checksums
7360538298209591dbf77c8eca784645b3eb1985c892bdfa18624474c94bf5cf
BLAKE2b-256 checksum
How to use checksums
83b9eac0970b24ae3b252dec960b5cae97fa2f6b83501c26ce825eb9b7ec9797
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
Yes
Uploaded via twine/7.0.0 CPython/3.13.14

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

PyPI Publish Attestation

PyPI verified that this artifact, at this checksum, originated from the publisher listed below.

Signed by GitHub Actions, verified by PyPI on Sep 24, 2026.

Transparency log

Release history Release notifications | RSS feed

This release

1.0.83 This release

2 release files

1.0.82

2 release files

1.0.81

2 release files

1.0.80

2 release files

1.0.79

2 release files

1.0.78

2 release files

1.0.77

2 release files

1.0.76

2 release files

1.0.75

2 release files

1.0.74

2 release files

1.0.73

2 release files

1.0.72

2 release files

1.0.71

2 release files

1.0.70

2 release files

1.0.69

2 release files

1.0.68

2 release files

1.0.67

2 release files

1.0.66

2 release files

1.0.65

2 release files

1.0.64

2 release files

1.0.63

2 release files

1.0.62

2 release files

1.0.61

2 release files

1.0.60

2 release files

1.0.59

2 release files

1.0.58

2 release files

1.0.57

2 release files

1.0.56

2 release files

1.0.55

2 release files

1.0.54

2 release files

1.0.53

2 release files

1.0.52

2 release files

1.0.51

2 release files

1.0.50

2 release files

1.0.49

2 release files

1.0.48

2 release files

1.0.47

2 release files

1.0.46

2 release files

1.0.45

2 release files

1.0.44

2 release files

1.0.43

2 release files

1.0.42

2 release files

1.0.41

2 release files

1.0.40

2 release files

1.0.39

2 release files

1.0.38

2 release files

1.0.37

2 release files

1.0.36

2 release files

1.0.35

2 release files

1.0.34

2 release files

1.0.33

2 release files

1.0.32

2 release files

1.0.31

2 release files

1.0.30

2 release files

1.0.29

2 release files

1.0.28

2 release files

1.0.27

2 release files

1.0.26

2 release files

1.0.25

2 release files

1.0.24

2 release files

1.0.23

2 release files

1.0.22

2 release files

1.0.21

2 release files

1.0.20

2 release files

1.0.19

2 release files

1.0.18

2 release files

1.0.17

2 release files

1.0.16

2 release files

1.0.15

2 release files

1.0.14

2 release files

1.0.13

2 release files

1.0.12

2 release files

1.0.11

2 release files

1.0.10

2 release files

1.0.9

2 release files

1.0.8

2 release files

1.0.7

2 release files

1.0.6

2 release files

1.0.5

2 release files

1.0.4

2 release files

1.0.3

2 release files

1.0.2

2 release files

1.0.1

2 release files

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page