Skip to main content

SPRUCE GROVE OS

The Spruce Grove mark - three geometric spruces in brand greens on charcoal

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

Together we are better. Always.

License: MIT Python 3.11–3.14 Tests: 7700 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). 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

Three 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.

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 + figlet lockup ("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_*.

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

MIT — inherited from Code Puppy. See LICENSE and attribution in PROVENANCE.md.

Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

spruce_grove-1.0.5.tar.gz (893.9 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

spruce_grove-1.0.5-py3-none-any.whl (1.1 MB view details)

Uploaded Python 3

File details

Details for the file spruce_grove-1.0.5.tar.gz.

File metadata

  • Download URL: spruce_grove-1.0.5.tar.gz
  • Upload date:
  • Size: 893.9 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/7.0.0 CPython/3.13.14

File hashes

Hashes for spruce_grove-1.0.5.tar.gz
Algorithm Hash digest
SHA256 e08a6d7a2dd9fabec1dc1774fc82ce839ead1d0283f7bf0c157eb49fca563b46
MD5 1ded4d0a49eb8d98eccac1ec8003dfd7
BLAKE2b-256 08172a8d5589e1f0922a40c6460256ca693acfc6dc227258289d3a213f6447f4

See more details on using hashes here.

Provenance

The following attestation bundles were made for spruce_grove-1.0.5.tar.gz:

Publisher: publish.yml on t-granlund/SPRUCE-GROVE-OS

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file spruce_grove-1.0.5-py3-none-any.whl.

File metadata

  • Download URL: spruce_grove-1.0.5-py3-none-any.whl
  • Upload date:
  • Size: 1.1 MB
  • Tags: Python 3
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/7.0.0 CPython/3.13.14

File hashes

Hashes for spruce_grove-1.0.5-py3-none-any.whl
Algorithm Hash digest
SHA256 bf020b303df356612940e1317b59b5f7ee8a540930a1eda26f9405367d72402d
MD5 e6ad250a78066a11703066b4020fc724
BLAKE2b-256 6dbfd036012157a6f28b7cd5b8628b0416e7721ff9ec79c4f20b6d48a42a1431

See more details on using hashes here.

Provenance

The following attestation bundles were made for spruce_grove-1.0.5-py3-none-any.whl:

Publisher: publish.yml on t-granlund/SPRUCE-GROVE-OS

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

Release history Release notifications | RSS feed

1.0.7

2 files

1.0.6

2 files

This release

1.0.5 This release

2 files

1.0.4

2 files

1.0.3

2 files

1.0.2

2 files

1.0.1

2 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