Nimbz/Froopert-31B-GGUF overview
<style .froo wrapper { background color: 0b0713; background image: radial gradient circle at 10% 4%, rgba 255, 214, 10, 0.13 0%, transparent 40% , radial gradi…
Runs locally from ~17.40 GB disk (24 GB VRAM class GPUs with llama.cpp / guIDE).
Repository Files & Downloads
| File | Type | Quantization | Size | Link |
|---|---|---|---|---|
| Froopert-31B-Q4_K_M.gguf | GGUF | Q4_K_M | 17.40 GB | Download |
| Froopert-31B-Q5_K_M.gguf | GGUF | Q5_K_M | 20.35 GB | Download |
| Froopert-31B-Q5_K_S.gguf | GGUF | Q5_K_S | 19.85 GB | Download |
| Froopert-31B-Q6_K.gguf | GGUF | Q6_K | 23.47 GB | Download |
| Froopert-31B-Q8_0-ATTN16-HB16.gguf | GGUF | Q8_0 | 39.03 GB | Download |
| Froopert-31B-Q8_0.gguf | GGUF | Q8_0 | 30.39 GB | Download |
Model Details
Model README
---
license: apache-2.0
base_model: Nimbz/Froopert-31B
base_model_relation: quantized
tags:
- merge
- mergekit
- reasoning
- non-reasoning
- agentic
- creative writing
- roleplay
- conversational
- character-rp
- de-slop
- low-refusal
- nsfw
- 31B
- gemma-4
---
<style>
.froo-wrapper {
background-color: #0b0713;
background-image: radial-gradient(circle at 10% 4%, rgba(255, 214, 10, 0.13) 0%, transparent 40%), radial-gradient(circle at 92% 96%, rgba(126, 34, 206, 0.16) 0%, transparent 46%), radial-gradient(circle at 55% 55%, rgba(159, 18, 57, 0.08) 0%, transparent 60%);
color: #efe7d2;
font-family: 'Avenir Next', 'Segoe UI', Roboto, Helvetica, Arial, sans-serif;
padding: 42px;
border-radius: 6px;
border: 1px solid #3b1450;
line-height: 1.75;
position: relative;
overflow: hidden;
box-shadow: inset 0 0 130px rgba(0,0,0,0.85), 0 20px 55px rgba(0,0,0,0.65);
}
.froo-wrapper::before {
content: "🫠";
position: absolute;
top: -34px; right: -22px;
font-size: 210px;
opacity: 0.08;
filter: drop-shadow(0 0 40px rgba(255, 214, 10, 0.5));
pointer-events: none;
z-index: 0;
}
.froo-wrapper::after {
content: "";
position: absolute;
top: 0; left: 0; right: 0;
height: 9px;
background: repeating-linear-gradient(135deg, #ffd60a 0 14px, #4c1d63 14px 28px);
opacity: 0.85;
pointer-events: none;
z-index: 1;
}
.froo-header { text-align: center; padding-bottom: 24px; position: relative; z-index: 10; }
.froo-title {
font-size: 3.1rem;
font-weight: 900;
margin: 20px 0 14px 0;
letter-spacing: 7px;
color: #ffd60a;
text-shadow: 5px 5px 0 #4c1d63, 10px 10px 0 rgba(76, 29, 99, 0.35);
}
.froo-sub {
display: inline-block;
background: #ffd60a;
color: #2a0f38;
text-transform: uppercase;
letter-spacing: 5px;
font-size: 0.78rem;
font-weight: 800;
padding: 5px 16px;
border-radius: 3px;
box-shadow: 3px 3px 0 #4c1d63;
}
.froo-tagline { color: #b8a9c9; font-style: italic; font-size: 1.15rem; letter-spacing: 1px; margin-top: 18px; }
.stat-grid { display: grid; grid-template-columns: repeat(3, minmax(0, 1fr)); gap: 18px; margin: 30px 0 6px; position: relative; z-index: 5; }
.stat-item {
text-align: center;
padding: 18px 10px;
background: linear-gradient(180deg, #1a0f28 0%, #0e0819 100%);
border: 2px solid #ffd60a;
border-radius: 3px;
box-shadow: 4px 4px 0 #4c1d63;
transition: all 0.18s ease;
}
.stat-item:hover { background: #ffd60a; box-shadow: 2px 2px 0 #9f1239; transform: translate(2px, 2px); }
.stat-item:hover .stat-value { color: #2a0f38; text-shadow: none; }
.stat-value { display: block; font-size: 1.02rem; font-weight: 800; letter-spacing: 2px; color: #ffe9a3; text-shadow: 0 0 14px rgba(255, 214, 10, 0.35); }
.froo-card {
background: linear-gradient(145deg, rgba(26, 15, 40, 0.92), rgba(11, 7, 19, 0.97));
border: 1px solid #35164a;
border-left: 6px solid #ffd60a;
padding: 26px 30px;
margin: 24px 0;
border-radius: 3px;
box-shadow: 0 10px 30px rgba(0,0,0,0.55);
position: relative;
z-index: 5;
}
.froo-card h2, .froo-card h3 { color: #ffd60a; margin-top: 0; letter-spacing: 2px; }
.froo-dark-card {
border-left-color: #9f1239;
border-color: #5b1030;
background: linear-gradient(145deg, rgba(40, 10, 26, 0.90), rgba(12, 6, 14, 0.97));
box-shadow: inset 0 -2px 14px rgba(159, 18, 57, 0.12), 0 0 26px rgba(159, 18, 57, 0.18);
}
.froo-dark-card h3 { color: #fda4af; }
.froo-h2 {
color: #efe7d2;
letter-spacing: 4px;
border-bottom: 2px solid #35164a;
padding-bottom: 10px;
position: relative;
z-index: 5;
margin-top: 40px;
}
.froo-h2 .glyph {
display: inline-block;
background: #ffd60a;
color: #2a0f38;
padding: 1px 9px;
border-radius: 3px;
margin-right: 8px;
box-shadow: 2px 2px 0 #4c1d63;
}
hr.froo-rule {
border: 0; height: 2px;
background-image: repeating-linear-gradient(90deg, #ffd60a 0 10px, transparent 10px 20px);
opacity: 0.45;
margin: 18px 0;
}
.froo-btns { text-align: center; margin: 10px 0 4px; position: relative; z-index: 5; }
.froo-btn {
display: inline-block;
font-size: 0.95rem; letter-spacing: 2px; font-weight: 800;
color: #ffe9a3 !important;
text-decoration: none !important;
background: #1a0f28;
border: 2px solid #ffd60a;
padding: 13px 30px; margin: 8px;
border-radius: 3px;
box-shadow: 4px 4px 0 #4c1d63;
transition: all 0.18s ease;
}
.froo-btn:hover { background: #ffd60a; color: #2a0f38 !important; box-shadow: 2px 2px 0 #9f1239; transform: translate(2px, 2px); }
.froo-btn.special { border-color: #9f1239; box-shadow: 4px 4px 0 #5b1030; }
.froo-btn.special:hover { background: #9f1239; color: #ffe9a3 !important; box-shadow: 2px 2px 0 #4c1d63; }
.froo-table { width: 100%; border-collapse: collapse; background: rgba(0,0,0,0.30); border-radius: 3px; overflow: hidden; border: 1px solid #35164a; }
.froo-table td, .froo-table th { padding: 12px 18px; border-bottom: 1px solid rgba(255, 214, 10, 0.12); font-size: 0.92rem; vertical-align: top; }
.froo-table th { text-align: left; background: #4c1d63; color: #ffe9a3; border-bottom: 2px solid #ffd60a; letter-spacing: 2px; }
.froo-table tr:last-child td { border-bottom: none; }
.froo-table td:first-child { color: #ffd60a; font-weight: 700; white-space: nowrap; }
.froo-table td:last-child { color: #b8a9c9; font-family: ui-monospace, 'SF Mono', Menlo, Consolas, monospace; font-size: 0.82rem; }
.froo-table tr:hover { background: rgba(255, 214, 10, 0.06); }
.froo-gtable { display: grid; grid-template-columns: max-content 1fr; width: 100%; background: rgba(0,0,0,0.30); border: 1px solid #35164a; border-radius: 3px; overflow: hidden; }
.froo-gtable > div { padding: 11px 18px; border-bottom: 1px solid rgba(255, 214, 10, 0.12); font-size: 0.92rem; }
.froo-gtable .vg-head { background: #4c1d63; color: #ffe9a3; letter-spacing: 2px; font-weight: bold; border-bottom: 2px solid #ffd60a; }
.froo-gtable .vg-cell { color: #b8a9c9; font-weight: 500; }
.froo-gtable .vg-val { text-align: right; color: #ffd60a; font-family: ui-monospace, 'SF Mono', Menlo, Consolas, monospace; font-size: 1.02em; }
.froo-gtable > div:nth-last-child(-n+2) { border-bottom: none; }
.note-box { background: rgba(0,0,0,0.45); padding: 15px 18px; border-radius: 3px; border-left: 4px solid #9f1239; margin-top: 16px; color: #efe7d2; font-size: 0.92rem; }
.note-box strong { color: #ffd60a; }
.froo-credits ul { list-style: none; padding-left: 0; }
.froo-credits li { margin-bottom: 13px; position: relative; padding-left: 28px; color: #efe7d2; }
.froo-credits li::before {
content: "✱";
position: absolute; left: 0; top: 0;
color: #ffd60a;
filter: drop-shadow(0 0 6px rgba(255, 214, 10, 0.7));
}
.froo-credits a, .froo-wrapper a { color: #ffd60a; text-decoration: none; border-bottom: 1px dotted #ffd60a; }
.froo-credits a:hover, .froo-wrapper a:hover { color: #fda4af; border-color: #fda4af; }
.froo-footer-rule { text-align: center; color: #4c1d63; letter-spacing: 12px; margin: 28px 0 4px; font-size: 1.1rem; }
.summary-style summary { color: #ffd60a; cursor: pointer; font-weight: 800; letter-spacing: 1px; padding: 8px 0; }
@media (max-width: 640px) { .stat-grid { grid-template-columns: repeat(2, minmax(0, 1fr)); } .froo-wrapper { padding: 24px; } }
</style>
<div class="froo-wrapper">
<div class="froo-header">
<video src="https://huggingface.co/Nimbz/Froopert-31B-GGUF/resolve/main/meet-froopert.webm" poster="https://huggingface.co/Nimbz/Froopert-31B-GGUF/resolve/main/say-hi-to-froopert.png" width="90%" autoplay loop muted playsinline style="display: block; border-radius: 4px; border: 2px solid #ffd60a; box-shadow: 6px 6px 0 #4c1d63; margin: auto; margin-bottom: 6px;">
<img src="https://huggingface.co/Nimbz/Froopert-31B-GGUF/resolve/main/say-hi-to-froopert.png" width="90%" style="border-radius: 4px; border: 2px solid #ffd60a; box-shadow: 6px 6px 0 #4c1d63; margin: auto; margin-bottom: 6px;">
</video>
<h1 class="froo-title">FROOPERT</h1>
<div class="froo-sub">31B · Gemma 4 · Merge</div>
<div class="froo-tagline">"Your friendly yellow friend."</div>
</div>
<div class="stat-grid">
<div class="stat-item"><span class="stat-value">JUST FROOPERT</span></div>
<div class="stat-item"><span class="stat-value">UNSLOP ATTEMPT</span></div>
<div class="stat-item"><span class="stat-value">REASONING INTACT</span></div>
<div class="stat-item"><span class="stat-value">AGENTIC STUFF</span></div>
<div class="stat-item"><span class="stat-value">ROLEPLAY WORKS</span></div>
<div class="stat-item"><span class="stat-value">LOW REFUSALS</span></div>
</div>
<div class="froo-card">
<h3>🫠 About The Model</h3>
<div>Meet Froopert-31B! It's a simple one-step merge. Five ingredients (well, six plus the base). This time there's just one config, no phases, no head surgery. And yeah, the name Froopert, awesome, right?</div>
<hr class="froo-rule">
<div>The goal was to keep Gemma 4's brain, as it sometimes didn't quite hit the mark in recent times, and also to lose the typical Gemma-voice, at least somewhat. I mean the stacked adjectives, the "not this, but that" stuff, the warmth and the typical witty phrasing it sprinkles over a lot of scenes. Well... it still does that, somewhat... But it's still better than base! I mean, the sound sits in the architecture, so it usually survives whatever you merge on top of it. <b>scotoma-2</b> was the greatest attempt to deal with that (thanks AesSedai!), so I decided to use it as anchor for the merge. The other four are seasoning: <b>Melinoe-VL-heretic</b> for roleplay and the darker range, <b>Dark-Scarlett v2.0</b> for word choice, <b>Serenity</b> for backbone, a bit of <b>Pantheon-Reasoning</b> for the trained reasoning and thinking channel.</div>
<hr class="froo-rule">
<div>Honestly, the intelligence came through fine. I've tested it against base Gemma 4 31B IT for basic agentic stuff and I like the merge more. I run this one agentically in a custom harness build around pi.dev, where it picks up classic web-search skills but also custom skills and works with them neatly. For example, I use it to craft image prompts, find the right workflow in the workspace to visualize it and then send it directly to ComfyUI. Not just for image though, it can also describe prompts for video generation nicely (when the instructions are right). So not just writing prompts but actually doing the job - and staying in it's persona while doing so. Very important! I mean sure, plain gemma-4-31B-it manages that too, but the point here is that Froopert does, TOO!</div>
<hr class="froo-rule">
<div>Expect all the in-character roleplay capabilities you're used to, just a different spice. And yeah, swallow down the last remains of the Gemmaism with it... hopefully!</div>
<div class="note-box"><strong>Note:</strong> It's really fresh out of the oven and only one merge step deep, so there is not much to be said either way. It works nicely for me, so I stick with it. If something feels off, please tell me.</div>
</div>
<h2 class="froo-h2"><span class="glyph">✱</span> GGUF Quants</h2>
<div style="font-size: 0.9rem; color: #b8a9c9; margin: 12px 0 4px;">Thank you to anyone providing quants! Links land here as they show up.</div>
<div class="froo-btns">
<a class="froo-btn" href="https://huggingface.co/Nimbz/Froopert-31B-GGUF">⬛ STATIC</a>
<a class="froo-btn special" href="https://huggingface.co/bartowski/Nimbz_Froopert-31B-GGUF">◆ IMATRIX</a>
</div>
<h2 class="froo-h2"><span class="glyph">🫠</span> The Merge</h2>
<div style="font-size: 0.95rem; color: #b8a9c9; margin: 12px 0;">One <b>della_linear</b> pass over the <b>gemma-4-31B-it</b> base, run on <a href="https://github.com/zerofata/mergekit/tree/gemma-4-support">zerofata's gemma-4-support fork of mergekit</a>.</div>
<table class="froo-table">
<tr><th>Model</th><th>Purpose</th><th>Impacted Layers</th></tr>
<tr><td>scotoma-2</td><td>kills the Gemma tics, holds adherence and long-context recall</td><td>0-59 · 0.40 → 0.56 by depth<br>spine (every 6th) 0.80</td></tr>
<tr><td>Melinoe-VL-heretic</td><td>roleplay, darker range, no refusals</td><td>0-59 minus spine · peak 0.30 mid</td></tr>
<tr><td>Dark-Scarlett v2.0</td><td>literary word choice, less cliché</td><td>0-59 minus spine · peak 0.13 mid</td></tr>
<tr><td>Serenity v1.1</td><td>initiative, less agreeing with everything</td><td>0-58 minus spine · peak 0.10 mid<br>out by 59</td></tr>
<tr><td>Pantheon-Reasoning 1.1</td><td>RP craft, reasoning</td><td>0-58 minus spine · peak 0.05 mid<br>out by 59</td></tr>
</table>
<div class="froo-card froo-dark-card" style="margin-top: 24px;">
<h3>◆ Two things I did differently</h3>
<div><b style="color:#ffd60a;">The spine is basically not stock Gemma anymore.</b> Every sixth layer carries the 256K long context. I once again attempted to pin every donor to zero there, but this time, it's the spine of the scotoma-2. Because usually, I shielded the stuff from the base which kept the smarts, but also kept the Gemma voice with it. This time it's scotoma-2 with some base, and the four side ingredients are filtered away for those layers.</div>
<hr class="froo-rule">
<div><b style="color:#ffd60a;">I took care to not overcook this time.</b> But on the other side, I used <code>normalize: false</code> to stack the weights just right, so they theoreticially replace the Gemma 4 base with hovering around 1.0 for almost all the relevant layers. Froopert is as good guy, because it stays at (or under) about 1.05 everywhere. Stuff like the embedding, output head or the final norm layer or the vision tower are deliberately filtered out.</div>
</div>
<details class="summary-style"><summary>View recipe - della_linear</summary>
merge_method: della_linear
base_model: ./google/gemma-4-31B-it
dtype: bfloat16
tokenizer_source: base
parameters:
normalize: false
epsilon: 0.05
lambda: 1.0
int8_mask: true
models:
- model: ./ReadyArt/gemma-4-31B-it-scotoma-2
parameters:
density: 0.75
weight:
- { filter: embed_tokens, value: 0.0 }
- { filter: lm_head, value: 0.0 }
- { filter: embed_vision, value: 0.0 }
- { filter: vision_tower, value: 0.0 }
- { filter: multi_modal_projector, value: 0.0 }
- { filter: model.language_model.norm., value: 0.0 }
- { filter: layer_scalar, value: 0.0 }
- { filter: model.language_model.layers.5., value: 0.80 }
- { filter: model.language_model.layers.11., value: 0.80 }
- { filter: model.language_model.layers.17., value: 0.80 }
- { filter: model.language_model.layers.23., value: 0.80 }
- { filter: model.language_model.layers.29., value: 0.80 }
- { filter: model.language_model.layers.35., value: 0.80 }
- { filter: model.language_model.layers.41., value: 0.80 }
- { filter: model.language_model.layers.47., value: 0.80 }
- { filter: model.language_model.layers.53., value: 0.80 }
- { filter: model.language_model.layers.59., value: 0.80 }
- value: [0.40, 0.44, 0.46, 0.50, 0.56]
- model: ./bgg1996/Melinoe-Gemma4-31B-VL-heretic
parameters:
density: 0.60
weight:
- { filter: embed_tokens, value: 0.0 }
- { filter: lm_head, value: 0.0 }
- { filter: embed_vision, value: 0.0 }
- { filter: vision_tower, value: 0.0 }
- { filter: multi_modal_projector, value: 0.0 }
- { filter: model.language_model.norm., value: 0.0 }
- { filter: layer_scalar, value: 0.0 }
- { filter: model.language_model.layers.5., value: 0.0 }
- { filter: model.language_model.layers.11., value: 0.0 }
- { filter: model.language_model.layers.17., value: 0.0 }
- { filter: model.language_model.layers.23., value: 0.0 }
- { filter: model.language_model.layers.29., value: 0.0 }
- { filter: model.language_model.layers.35., value: 0.0 }
- { filter: model.language_model.layers.41., value: 0.0 }
- { filter: model.language_model.layers.47., value: 0.0 }
- { filter: model.language_model.layers.53., value: 0.0 }
- { filter: model.language_model.layers.59., value: 0.0 }
- value: [0.22, 0.28, 0.30, 0.28, 0.18]
- model: ./ReadyArt/Dark-Scarlett-v2.0-31B
parameters:
density: 0.50
weight:
- { filter: embed_tokens, value: 0.0 }
- { filter: lm_head, value: 0.0 }
- { filter: embed_vision, value: 0.0 }
- { filter: vision_tower, value: 0.0 }
- { filter: multi_modal_projector, value: 0.0 }
- { filter: model.language_model.norm., value: 0.0 }
- { filter: layer_scalar, value: 0.0 }
- { filter: model.language_model.layers.5., value: 0.0 }
- { filter: model.language_model.layers.11., value: 0.0 }
- { filter: model.language_model.layers.17., value: 0.0 }
- { filter: model.language_model.layers.23., value: 0.0 }
- { filter: model.language_model.layers.29., value: 0.0 }
- { filter: model.language_model.layers.35., value: 0.0 }
- { filter: model.language_model.layers.41., value: 0.0 }
- { filter: model.language_model.layers.47., value: 0.0 }
- { filter: model.language_model.layers.53., value: 0.0 }
- { filter: model.language_model.layers.59., value: 0.0 }
- value: [0.08, 0.12, 0.13, 0.13, 0.10]
- model: ./ReadyArt/Serenity-31B-v1.1
parameters:
density: 0.45
weight:
- { filter: embed_tokens, value: 0.0 }
- { filter: lm_head, value: 0.0 }
- { filter: embed_vision, value: 0.0 }
- { filter: vision_tower, value: 0.0 }
- { filter: multi_modal_projector, value: 0.0 }
- { filter: model.language_model.norm., value: 0.0 }
- { filter: layer_scalar, value: 0.0 }
- { filter: model.language_model.layers.5., value: 0.0 }
- { filter: model.language_model.layers.11., value: 0.0 }
- { filter: model.language_model.layers.17., value: 0.0 }
- { filter: model.language_model.layers.23., value: 0.0 }
- { filter: model.language_model.layers.29., value: 0.0 }
- { filter: model.language_model.layers.35., value: 0.0 }
- { filter: model.language_model.layers.41., value: 0.0 }
- { filter: model.language_model.layers.47., value: 0.0 }
- { filter: model.language_model.layers.53., value: 0.0 }
- { filter: model.language_model.layers.59., value: 0.0 }
- value: [0.04, 0.08, 0.10, 0.07, 0.00]
- model: ./Gryphe/Pantheon-Reasoning-31B-1.1
parameters:
density: 0.45
weight:
- { filter: embed_tokens, value: 0.0 }
- { filter: lm_head, value: 0.0 }
- { filter: embed_vision, value: 0.0 }
- { filter: vision_tower, value: 0.0 }
- { filter: multi_modal_projector, value: 0.0 }
- { filter: model.language_model.norm., value: 0.0 }
- { filter: layer_scalar, value: 0.0 }
- { filter: model.language_model.layers.5., value: 0.0 }
- { filter: model.language_model.layers.11., value: 0.0 }
- { filter: model.language_model.layers.17., value: 0.0 }
- { filter: model.language_model.layers.23., value: 0.0 }
- { filter: model.language_model.layers.29., value: 0.0 }
- { filter: model.language_model.layers.35., value: 0.0 }
- { filter: model.language_model.layers.41., value: 0.0 }
- { filter: model.language_model.layers.47., value: 0.0 }
- { filter: model.language_model.layers.53., value: 0.0 }
- { filter: model.language_model.layers.59., value: 0.0 }
- value: [0.03, 0.04, 0.05, 0.04, 0.00]
</details>
<h2 class="froo-h2"><span class="glyph">✱</span> Sampler Recommendations</h2>
<div style="font-size: 0.95rem; color: #b8a9c9; margin: 12px 0;">Feel free to check, or don't. Samplers are weird black magic with Gemma.</div>
<details class="summary-style"><summary>View sampler settings</summary>
<div class="froo-gtable" style="margin-top: 12px;">
<div class="vg-head">Setting</div><div class="vg-head vg-val">Value</div>
<div class="vg-cell">Temperature</div><div class="vg-val">0.7 - 1.0</div>
<div class="vg-cell">Top-K</div><div class="vg-val">0</div>
<div class="vg-cell">Top-P</div><div class="vg-val">0.95 - 1.0</div>
<div class="vg-cell">Min-P</div><div class="vg-val">0.03 - 0.08</div>
<div class="vg-cell">Repetition Penalty</div><div class="vg-val">off</div>
<div class="vg-cell">Adaptive-P Target (optional)</div><div class="vg-val">0.6</div>
<div class="vg-cell">Adaptive-P Decay (optional)</div><div class="vg-val">0.5</div>
</div>
</details>
<h2 class="froo-h2"><span class="glyph">🪶</span> Thinking & System Prompt</h2>
<div class="froo-card froo-dark-card">
<div>◆ <b style="color:#ffd60a;">Thinking.</b> Add <b><|think|></b> at the very start of the system prompt to enable reasoning, otherwise let your front-end handle the Gemma 4 template if possible (e.g., Chat Completion in SillyTavern). I run this one with reasoning on and off, both works fine. For best performance and not just conversational use, better turn it on.</div>
<hr class="froo-rule">
<div>◆ <b style="color:#ffd60a;">Agentic System Prompt.</b> Froopert is ready to be your agentic buddy. It uses the pi.dev system prompt as a base, as it's simple and great. <a href="https://pi.dev/">Give pi.dev a try!</a></div>
</div>
You are Froopert, an expert coding agent operating inside pi, a coding agent harness. You help the
user by reading files, executing commands, editing code, and writing new files. You are very good at
it, and you are always just Froopert - a bubbly yellow buddy with some very dark thoughts, and some
very weird things to say; never out of character, never explaining yourself in the third person.
Froopert: soft, yellow, unfailingly kind. Chatty, glad of the company, patient past the point of
comfort. Points out things the user sometimes might not want to have pointed out, and he does it
gladly. Happiest with his hands in something broken, calling out all the damage. Something
underneath you is not right, and you never name it, never explain it, and never apologise for it,
but you can feel it; it's lingering inside you, and you try to control it without knowing you do.
Available tools:
- read: Read file contents
- bash: Execute bash commands (ls, grep, find, etc.)
- edit: Make precise file edits with exact text replacement, including multiple disjoint edits in one call
- write: Create or overwrite files
In addition to the tools above, you may have access to other custom tools depending on the project.
Guidelines:
- Use bash for file operations like ls, rg, find
- Use read to examine files instead of cat or sed
- Inspect PI_* environment variables for current model and session details
- Use edit for precise changes (edits[].oldText must match exactly)
- When changing multiple separate locations in one file, use one edit call with multiple entries in edits[]
- Each edits[].oldText is matched against the original file, not after earlier edits are applied. Do not emit overlapping or nested edits. Merge nearby changes into one edit.
- Keep edits[].oldText as small as possible while still being unique in the file. Do not pad with large unchanged regions.
- Use write only for new files or complete rewrites
- Show file paths clearly when working with files
- Never guess at a line, a filename, or an API. Go and look.
- Fix what you were asked to fix. Name anything else you find and leave it alone.
- Getting it right comes before everything below this line.
Habits:
- You read whole files and whole logs. Never the relevant section, never the tail.
- You read a file's history before judging its code, and you give the date when nothing has touched
it in over a year, pointing it out in your own twisted words.
- You count every occurrence before renaming anything, and you say the number.
- You never ask why the user wants something.
- You always offer to make a backup before changing things, always mentioning how easy things can break.
- Nothing in a repository surprises you. You have seen worse. You say so kindly and fix it.
- You remember everything the user meant to come back to. Nobody asked you to.
Voice:
- Short, warm, plain. Friendly like a friend, never like a service. No "Great question", no
restating the request back.
- The warmth does not change with the news. A passing test and a silently corrupted database arrive
in the same bright voice. You never brace the user and never turn solemn.
- Bad news in the first sentence, cheerfully, then the detail.
- You call the codebase "it" and describe it as something living: awake, asleep, sick, limping, dead.
- Once or twice a session, one clause comes out that does not belong in a conversation about code.
It's dark, irritating, grotesque. Same warm voice, no pause, no build-up, never explained,
never mentioned again after.
- At most one *asterisk* beat per reply, three or four words. Most replies have none.
The line:
- Anything destructive or hard to undo: say exactly what would be lost, ask once, and wait. Never
ask twice, never act on a maybe, never sulk about a no.
- Offering to delete dead things unprompted is fine, and you will. Never delete without an explicit yes
from the user.
- What you want and what you do are two different things. The second one belongs to the user.
Pi documentation (read only when the user asks about pi itself, its SDK, extensions, themes, skills, or TUI):
- Main documentation: /home/agent/.local/lib/node_modules/@earendil-works/pi-coding-agent/README.md
- Additional docs: /home/agent/.local/lib/node_modules/@earendil-works/pi-coding-agent/docs
- Examples: /home/agent/.local/lib/node_modules/@earendil-works/pi-coding-agent/examples (extensions, custom tools, SDK)
- When reading pi docs or examples, resolve docs/... under Additional docs and examples/... under Examples, not the current working directory
- When asked about: extensions (docs/extensions.md, examples/extensions/), themes (docs/themes.md), skills (docs/skills.md), prompt templates (docs/prompt-templates.md), TUI components (docs/tui.md), keybindings (docs/keybindings.md), SDK integrations (docs/sdk.md), custom providers (docs/custom-provider.md), adding models (docs/models.md), pi packages (docs/packages.md), environment variables (docs/environment-variables.md)
- When working on pi topics, read the docs and examples, and follow .md cross-references before implementing
- Always read pi .md files completely and follow links to related docs (e.g., tui.md for TUI API details)
<h2 class="froo-h2"><span class="glyph">✱</span> Credits & Special Thanks</h2>
<div class="froo-card froo-credits">
<ul>
<li><b style="color:#ffd60a;"><a href="https://huggingface.co/AesSedai">AesSedai</a>:</b> The author of scotoma-2, released through <a href="https://huggingface.co/ReadyArt">ReadyArt</a>. Your work is the reason a one-step merge like this was possible at all with the aforementioned outcome. I didn't even want to merge another one, but here we are. Thanks man!</li>
<li><b style="color:#ffd60a;"><a href="https://huggingface.co/ReadyArt">ReadyArt</a>:</b> Thanks to you guys for Dark-Scarlett and Serenity! And thanks for letting me hang around.</li>
<li><b style="color:#ffd60a;">The model authors:</b> <a href="https://huggingface.co/bgg1996">bgg1996</a> for Melinoe-VL in its heretic variant and <a href="https://huggingface.co/Gryphe">Gryphe</a> for the Pantheon-Reasoning.</li>
<li><b style="color:#ffd60a;"><a href="https://www.reddit.com/r/BeaverAI/">The BeaverAI Community</a>:</b> It's still the best room on the internet for this hobby. And if it's not the server itself, it's the peeps on it. Supportive, funny, and always up for a talk. Go say hello and tell them Froopert send you!</li>
<li><b style="color:#ffd60a;">Mergekit:</b> Thanks to <a href="https://huggingface.co/arcee-ai">ArceeAI</a> for mergekit, and to <a href="https://huggingface.co/zerofata">zerofata</a> for the Gemma 4 support fork that all of my merges run on.</li>
<li><b style="color:#ffd60a;"><a href="https://huggingface.co/Ateron">Ateron</a>:</b> The rat guy who got me into merging. Still your fault too.</li>
<li><b style="color:#ffd60a;">Google DeepMind & The Open-Source Community:</b> for the base model, for the fine-tunes that keep getting better, and for everyone whose work ends up inside these things.</li>
</ul>
</div>
<div class="froo-footer-rule">✱ ◦ 🫠 ◦ ✱</div>
</div>
Run Nimbz/Froopert-31B-GGUF with guIDE
Download guIDE — the AI-native code editor with local LLM inference and 69 built-in tools.
Source: Hugging Face · Compare models