SPRUCE GROVE OS
gran · lund · sv. · spruce grove — an agentic coding CLI grown in the grove.
Together we are better. Always.
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:
- 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.
- 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.
- 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 | |
| spruce-deep | oklch(0.22 0.03 158) |
deep brand layer | |
| spruce | oklch(0.32 0.045 158) |
primary brand | |
| moss | oklch(0.45 0.06 155) |
accent green | |
| cedar | oklch(0.78 0.12 55) |
warm accent, persona | |
| bark | oklch(0.32 0.025 60) |
earthy neutral | |
| stone | oklch(0.85 0.012 90) |
soft UI text | |
| mist | oklch(0.94 0.008 100) |
foreground/typography |
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. fromcode-puppy-core-plugins) resolve tospruce_grove.*via an import shim with true module identity.- The plugin entry-point group
code_puppy.pluginsis intentionally retained. - Legacy aliases kept:
agent_code_puppy,CodePuppyAgent,get_puppy_name(), persistedpuppy_namefallback. - 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
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file spruce_grove-1.0.6.tar.gz.
File metadata
- Download URL: spruce_grove-1.0.6.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
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
fed488f98986cb07c0c3305094c8e1322d3a129962ffeaa8f57ce69191cc4a07
|
|
| MD5 |
01202ecc16251c0fe98e77d4559c383f
|
|
| BLAKE2b-256 |
2ecdabbd5171ef1cb1838447c210f89711e359b6f1667235b0df13964c057e08
|
Provenance
The following attestation bundles were made for spruce_grove-1.0.6.tar.gz:
Publisher:
publish.yml on t-granlund/SPRUCE-GROVE-OS
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
spruce_grove-1.0.6.tar.gz -
Subject digest:
fed488f98986cb07c0c3305094c8e1322d3a129962ffeaa8f57ce69191cc4a07 - Sigstore transparency entry: 2799192148
- Sigstore integration time:
-
Permalink:
t-granlund/SPRUCE-GROVE-OS@bfe8963542d80776d68adc0d4ab66daa01e2f188 -
Branch / Tag:
refs/heads/main - Owner: https://github.com/t-granlund
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
publish.yml@bfe8963542d80776d68adc0d4ab66daa01e2f188 -
Trigger Event:
push
-
Statement type:
File details
Details for the file spruce_grove-1.0.6-py3-none-any.whl.
File metadata
- Download URL: spruce_grove-1.0.6-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
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
523ce8955a5d4e6c74aa12a4694e563be323d720585c32d3dd1597c448c0879b
|
|
| MD5 |
a2935f40ca143f61ab8120e578074248
|
|
| BLAKE2b-256 |
808d9bcd3cb590f604d531c9d41bb5814448f313d0c7266dfe174e6c8d9e6add
|
Provenance
The following attestation bundles were made for spruce_grove-1.0.6-py3-none-any.whl:
Publisher:
publish.yml on t-granlund/SPRUCE-GROVE-OS
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
spruce_grove-1.0.6-py3-none-any.whl -
Subject digest:
523ce8955a5d4e6c74aa12a4694e563be323d720585c32d3dd1597c448c0879b - Sigstore transparency entry: 2799192206
- Sigstore integration time:
-
Permalink:
t-granlund/SPRUCE-GROVE-OS@bfe8963542d80776d68adc0d4ab66daa01e2f188 -
Branch / Tag:
refs/heads/main - Owner: https://github.com/t-granlund
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
publish.yml@bfe8963542d80776d68adc0d4ab66daa01e2f188 -
Trigger Event:
push
-
Statement type: