An Agent Skill that writes development logs from real repository history, not from recollection.
English | 中文
A cairn is the stack of stones a hiker leaves to mark a path that has already been walked. This skill does the same job for a codebase: it records work that is done, in a form the next person can follow.
Ask an agent to "write a development log" without guidance and you usually get three problems:
- Invention. Features that were never built, performance numbers that were never measured.
- Range drift. No sense of which period to cover, so it repeats last quarter or skips what you finished yesterday.
- Wrong register. Release notes stuffed with internal refactoring detail; an engineering journal written as marketing copy.
Cairn addresses each one: it anchors every statement to a source of truth, it infers the incremental range from the previous entry, and it separates three output modes explicitly.
The acceptance criterion is a single sentence: every statement in the log can be traced to git history, a diff, or file contents.
Cairn is a set of instructions, not a program. It has no dependencies, no virtual environment, and no bundled model. It uses two capabilities the host agent already has: running commands and reading and writing files.
Place the skill folder so that SKILL.md sits at its root:
.trae/skills/cairn-skill/SKILL.md
~/.trae/skills/cairn-skill/SKILL.md
Trae also accepts a .zip or .skill file with SKILL.md at the root of the archive.
Build one with the command in Packaging, then import it from the IDE.
The root SKILL.md starts with YAML frontmatter. Its non-empty name and description
fields are what Trae uses to identify the skill and decide when to load it.
The same folder works without modification. Only the location differs:
| Host | Path |
|---|---|
| Claude Code | .claude/skills/cairn-skill/ |
| Kiro | .kiro/skills/cairn-skill/ |
After installing, refresh skill discovery in your host's settings, then ask for a development log in any git repository.
Run this from inside the repository directory:
Compress-Archive -Path .\SKILL.md, .\references, .\LICENSE -DestinationPath .\cairn-skill.zip -ForceRename the result to cairn-skill.skill if your host prefers that extension. The two
formats are identical.
The bundle carries only what the skill needs at run time. README.md, CONTRIBUTING.md,
DEVLOG.md, and .github/ are repository governance files: they add size and contribute
nothing to execution. LICENSE stays, because a distributed artifact should carry its
license.
Watch the archive root. Right-clicking the folder in Windows Explorer and choosing "Compress to ZIP file" wraps everything in an extra
cairn-skill/directory, so the archive containscairn-skill/SKILL.mdinstead ofSKILL.md, and the import fails. Use the command above, then unzip the result and confirmSKILL.mdis at the top level.
Ask in plain language. Cairn picks a mode from your wording, writes the entry, and tells you which mode it used.
| You say | Cairn writes |
|---|---|
| 写篇开发日志 | An engineering journal entry, in Chinese |
| Write a release note for v1.2 | Release notes, user-facing wording only |
| 把这周的工作写成一篇能发社区的文章 | A narrative post with the trade-offs left in |
只记录 packages/core 的改动 |
An entry restricted to that subdirectory |
A first run in a repository with three commits produces something like this, appended to
the top of DEVLOG.md:
## 2026-08-29 · Engineering journal
**What changed**
- Added incremental range inference anchored on the commit hash in each entry's footnote,
in `SKILL.md` (`a1b2c3d`)
- Filled in the "Fixed" section of the release notes template, in
`references/templates.md` (`e4f5g6h`)
**Why**
Inferring the start point from a date meant two entries written on the same day overlapped.
A hash is precise; a date is not.
**Pitfalls**
`git log | sort -u` is unavailable on Windows PowerShell, so contributor counts come from
`git shortlog -sn` instead.
**Next**
- The narrative example in `references/templates.md` is still placeholder text
<sub>Based on commits `a1b2c3d..e4f5g6h` · branch `main`</sub>The footnote is load-bearing. It records the exact commit range, so the next run knows where to resume without re-covering old ground.
Outside a git repository, Cairn says so, asks what you did, reads the relevant files as
supporting evidence, and marks the entry
Based on the user's account and current file state; no git record. The log keeps its
tiers of reliability instead of quietly flattening them.
Cairn makes no model calls and bundles no inference runtime. Everything it contains is instruction text for the host agent, so it is model-agnostic: point the host at a different backend and Cairn works unchanged.
That has a useful consequence. Point the host at a local runtime and the whole pipeline runs on-device, with no code changes.
Isvik is one such runtime. It runs locally and exposes OpenAI- and Anthropic-compatible endpoints:
Trae (host, with Cairn-Skill installed)
| OpenAI / Anthropic compatible HTTP request
v
Isvik (local inference runtime, Nim + OpenVINO)
|
v
Local CPU / GPU / NPU
Set the host's model endpoint to Isvik's local address, and the entire chain — collecting history, reading diffs, writing the entry — stays on the machine.
To be precise about what this does and does not mean: Cairn does not integrate with Isvik, and does not require it. Any backend works. Isvik is one option that happens to make the whole thing offline.
New entries go to the top, so concurrent authors collide. This is deliberate. Splitting entries into one file each would remove the ability to read the whole log top to bottom, which is the point of keeping a log. For a team, have one person write the log before a release rather than everyone appending their own.
Range inference needs the footnote. Editing or removing the <sub> footnote from the
newest entry costs Cairn its anchor, and it falls back to a less precise date comparison.
CHANGELOG.md is off limits. That file follows a separate strict convention and
belongs to a release process. Cairn will not touch it.
See CONTRIBUTING.md. This project follows the Contributor Covenant.
Apache License 2.0. See LICENSE.
Copyright 2026 AbyssGG