What I Built
Let’s be honest about the two chores every software engineer dreads the most:
-
The 6:00 PM Exhaustion Commit: You’ve been coding for six hours across multiple files. You are way too tired to stage chunks cleanly, write meaningful Conventional Commits, and draft a thorough Pull Request description. So you type
git commit -m "wip fix stuff"and close your laptop. - The 8:58 AM Standup Panic: You roll out of bed two minutes before the daily Zoom standup, staring blankly at your screen with zero recollection of what you actually accomplished yesterday.
In honor of International Sloth Day and the Slow and Steady challenge, I built SlothOS—a 100% local, open-source autonomous developer harness powered by Ollama (qwen2.5-coder:7b / open-weight models), Node.js, and a React/Tailwind dashboard.
SlothOS moves at a calm, steady pace on localhost to do the heavy lifting so you don't have to:
-
🌙 Night Mode (
SlothShip): Inspects your messy, uncommittedgit diffacross any local repository, runs a Local Secret Redactor Guardrail (SlothGuard) to strip out accidental API keys or.envsecrets, splits your chaos into logical Atomic Commits with clear reasoning, executes those commits in one click, and writes a ready-to-paste Markdown PR description. -
☕ Morning Mode (
SlothStandup): Digests your local Git commit history overnight and hands you a 3-column "Yesterday / Today / Blockers" cheat sheet—complete with a built-in *Web Speech API voice synthesizer * that reads your verbatim 30-second Zoom script out loud while you make coffee.
Demo
(SlothShip Atomic Commits + Auto-Generated PR Description)

(9 AM Standup Cheat Sheet + Voice Script)

[🔗 GitHub Repository: ]
(https://github.com/Abhinav202104/sloth-os)
Code
SlothOS is built around a lightweight agent harness (server.js) and a zero-build reactive dashboard (index.html). Here is a snippet of how the local agent inspects Git state and enforces structured JSON reasoning:
javascript
// Local agent harness analyzing uncommitted diffs offline
app.post('/api/sloth-ship', async (req, res) => {
try {
const { repoPath, model } = req.body;
const targetDir = getValidGitRepo(repoPath);
const rawDiff = runGit('git diff', targetDir) + '\n' + runGit('git diff --staged', targetDir);
const combinedDiff = redactSecrets(rawDiff.slice(0, 10000));
const prompt = `You are SlothGit, an autonomous developer agent. Analyze these changes and group them into atomic commits. Return ONLY valid JSON.`;
const { result, usedModel } = await askSlothAgent(prompt, model, fallbackPlan);
res.json({ status: 'ready', usedModel, plan: result });
} catch (error) {
res.status(400).json({ error: error.message });
}
});
Top comments (0)