alchi 用 Gemma 3 1B 撰寫每日工作摘要,並過濾無依據內容
alchi: I let a 1B model write my standups, and taught it not to lie
Sandesh gadal 開發 alchi,使用本機 Ollama 執行的 Gemma 3 1B,根據 Git 提交及檔案編輯紀錄生成每日工作摘要和每週工時表。工具會逐句核對生成內容與實際活動,關鍵詞匹配率低於 0.6 的句子會被剔除,資料不會離開本機。Gemma 3 1B 約使用 870 MB 記憶體;作者表示,整理 5 個專案一週的工作紀錄,在 M5 MacBook 上不到 5 秒。
This is a submission for the Hacktoberfest Open-Source AI Challenge Week 3: Slow and Steady
What I Built
alchi (अल्छी) means "lazy" in Nepali. It writes my standup and my weekly timesheet so I don't have to.
I work on a lot of small projects at once: my portfolio, a video bot, a few websites. Some are git repos, some are just folders I keep editing. When someone asks "what did you do this week?", I honestly have to go and look.
So now I type one command:
$ alchi
**Standup, Mon 26 Oct** (since Fri 23 Oct)
**Done**
- **N-portfolio**: SEO and performance pass completed; Prerender the page at build time
- **backend-shorts**: Post twice a day to Instagram Reels via Cloudflare R2
- **ccsithub**: Explored the shop's content and layout
**Next**
- **backend-shorts**: Test the video format
**Blockers**
- None
Or alchi week for a timesheet:
| Project | Hours (est.) | What got done |
| ---------------- | ------------ | -------------------------------------------------------- |
| backend-shorts | 3h | Added a bot to post videos daily; Scheduled Instagram Reels |
| N-portfolio | 2h | SEO and performance pass; Prerender the page at build time |
| Dashain-Daskhina | 0.25h | Finished the page content; Added the bill HTML |
Dashain-Daskhina and ccsithub aren't git repos, but alchi still picks them up.
Code
Sandesh-Gadal
/
alchi
Writes your standup and timesheet from git commits and file edits, on a local Gemma 3 1B. Nothing leaves your machine.
alchi 🦥
alchi (अल्छी, Nepali for "lazy") writes your daily standup and weekly timesheet for you.
It reads what you actually did, meaning git commits and recently edited files across all your project folders. A small open-weight model running on your own laptop (Gemma 3 1B via Ollama) summarizes each project, and you get notes you can paste straight into Slack, Teams or Discord.
$ alchi -r ~/Development/Personal
**Standup, Mon 26 Oct** (since Fri 23 Oct)
**Done**
- **N-portfolio**: SEO and performance pass completed; Prerender the page at build time
- **backend-shorts**: Post twice a day to Instagram Reels via Cloudflare R2
- **ccsithub**: Worked on Explore, Shop, Visit the store
**Next**
- **alchi**: Test the time saved counter
**Blockers**
- None
alchi has saved you about 0h 10m over 1 run. Go lie down.
- Private. Your commit history, file names and code never leave your machine. The…
It's one Python file with no dependencies. You only need Ollama and ollama pull gemma3:1b.
How It Works
- Collect. For every project folder, alchi grabs my commits from the time window (only mine, matched by git email) and the files I saved. For folders without git, it reads the edited files and pulls out page titles, headings and function names.
- Summarize. Each project is sent separately to Gemma 3 1B running locally through Ollama. The model replies in a fixed JSON shape: what got done, and what's next.
- Check. Every line the model writes is compared with the real activity. If most of its key words aren't there, the line is thrown away.
- Count hours. Commits and saves less than 45 minutes apart are counted as one work session. That's plain Python, no AI.
Small models make things up
This was the main problem. On my first run, Gemma said I "added a small image of a tree to the footer". There is no tree.
A 1B model is fast and light, but when it doesn't have enough facts, it fills the gap. I fixed that in three ways:
-
Give it real facts. Headings and function names from the files, not just
index.html. - Show one example. One sample project with a perfect answer worked better than a long list of rules.
- Check the output. This small function decides whether a line stays:
def grounded(item, source):
words = [w for w in re.findall(r"[a-z]{5,}", item.lower()) if w not in STOPWORDS]
if not words:
return True
hits = sum(1 for w in words if w[:5] in source.lower())
return hits / len(words) >= 0.6
alchi also prints what it threw away, so I can see it working:
dropped, not in your activity: "Review the computer's inventory"
dropped, not in your activity: "Develop the shop's homepage"
Neither of those happened. It's not perfect, but it stopped the made-up lines from reaching my standup.
It doesn't slow down my Mac
- Gemma 3 1B uses about 870 MB of RAM and unloads itself one minute after the run.
- A full week across 5 projects took under 5 seconds on my M5 MacBook.
- If Ollama isn't running, alchi still works and uses the plain commit messages.
Why Does Open Innovation Matter?
A standup tool reads everything I work on, including client projects that aren't public yet. I don't want to send that to a cloud API every morning.
With an open model, everything stays on my laptop. The only network call goes to localhost. No API key, no cost, and it still works when the internet goes down, which happens here in Nepal more often than I'd like.
Open weights also let me use the smallest model that does the job and fix its weak spots myself. If you want a bigger model, set ALCHI_MODEL=llama3.2:3b.
The Lazy Payoff
Writing a standup used to take me around 10 minutes. alchi does it in about 2 seconds. That's roughly 40 hours a year I get back, and alchi saved keeps count so I don't even have to do that maths.
This post and the code were written with an AI coding agent, which I directed and reviewed. The model alchi runs on is Google's Gemma 3 1B, served by Ollama.
來源:DEV Community · dev.to