AI Second Brain · template

    Laporan mingguan, notulen, dan prioritas pagi, dikerjain AI. Lo tinggal review.

    Senin pagi lo buka sepuluh tab dan ngabisin 90 menit nyusun laporan. Ini sistem yang gw pakai tiap hari buat ngerjain itu, gratis, tinggal lo sesuaiin.

    Asisten kerja lo

    Tulis laporan progres minggu ini.

    Draft laporan udah jadi, disusun dari notulen rapat dan catatan lo minggu ini. Mau gw rapihin bagian risikonya dulu?

    Bikinin juga notulen rapat tadi pagi, plus action item-nya.

    Perintahnya udah ada. Lo tinggal minta.

    Gratis di GitHub: github.com/BrianArfi/ai-second-brain (publik, Apache-2.0).

    Kabar baiknya

    Sekarang AI bisa ngerjain rutinitas lo, bukan cuma chat.

    Notulen rapat, prioritas pagi, laporan mingguan, draft balasan. AI bisa ngerjain semuanya dan naruh hasilnya langsung di Google Doc lo. Syaratnya satu: sistemnya harus ada dulu.

    Masalahnya

    Tapi nyusun sistemnya sendiri mulai dari folder kosong.

    • Hari pertama

      Lo buka folder kosong. Perintah apa dulu? Aturannya apa? Lo bingung mulai dari mana.

    • Abis nonton YouTube

      Lo nyontek setup orang lain. Ternyata gak cocok sama kerjaan lo.

    • Tiap Jumat

      Lo ngetik prompt yang sama buat laporan mingguan, lagi. Terus nempelin catatan rapat satu per satu.

    • Jumat sore

      Rapat minggu ini ada delapan. Action item-nya kepencar, gak ada yang nyatet siapa pegang apa.

    Solusinya

    Mulai dari sistem yang udah dipakai kerja beneran.

    Diambil dari kerja product gw sehari-hari: perintah buat prioritas pagi, notulen rapat, laporan mingguan, draft balasan, PRD, dan prototype. Lo tinggal cerita siapa lo, lalu minta pakai bahasa biasa.

    Bedanya

    Sebelum dan sesudah.

    Sebelum

    • Mulai dari folder kosong.
    • Tiap chat baru, jelasin konteks dari nol.
    • Senin pagi bongkar sepuluh tab buat laporan.
    • Koreksi hal yang sama tiap minggu.

    Sesudah

    • Mulai dari sistem yang udah dipakai kerja beneran.
    • Isi profil sekali. Dia baca itu sebelum tiap tugas.
    • Minta laporannya. Lo tinggal review di Google Doc.
    • Koreksi sekali, sesi berikutnya dia udah tau.

    Cara kerjanya

    Tiga langkah, udah.

    1. Salin template-nya

      Gratis, sekali unduh.

    2. Biarin AI-nya kenalan sama lo

      Dia nanya soal kerjaan, proyek, tim, dan aturan lo, lalu nulis profil lo sendiri.

    3. Mulai minta

      "Tulis laporan minggu ini." Sambungin Google Docs, Slack, dan kalender kalau lo udah siap.

    Yang bisa dia lakuin

    Perintah buat kerjaan yang berulang tiap minggu.

    Lo minta pakai bahasa biasa, gak perlu hafal perintahnya.

    Gak ada yang kekirim tanpa persetujuan lo.

    • 01

      Prioritas hari ini udah disusun tiap pagi

      Dia baca kalender, email, Slack yang udah lo sambungin, dan rapat kemarin, lalu kasih lima hal yang paling penting. Sorenya dia nyocokin yang beres sama rencana pagi.

      Lo bilang ke AI"Siapin hari gw."
    • 02

      Rapat selesai, notulen dan action item-nya jadi

      Keputusan, action item lengkap sama pemilik dan tenggatnya, plus pertanyaan yang masih terbuka. Kalau pemiliknya gak jelas, ditandai, bukan ditebak.

      Lo bilang ke AI"Tulis notulen rapat tadi pagi."
    • 03

      Masuk rapat udah pegang konteksnya

      Satu halaman berisi siapa yang ikut, konteks dari catatan lama, hal yang belum beres, dan pertanyaan yang perlu lo angkat.

      Lo bilang ke AI"Siapin brief buat rapat budget jam 3."
    • 04

      Laporan mingguan tanpa bongkar sepuluh tab

      Dia baca semua rapat dan catatan minggu ini, dahuluin yang beneran penting, lalu update Google Doc laporan yang sama. Bukan bikin dokumen baru tiap minggu.

      Lo bilang ke AI"Tulis laporan progres minggu ini."
    • 05

      Balasan yang ketunda ketemu semua, draft-nya siap

      Dia nyari siapa yang nunggu lo, dan lo nunggu siapa, dari catatan, Slack, email, dan tiket (kalau alatnya udah disambungin). Draft balasannya dibikinin, dan gak ada yang kekirim sebelum lo setujui satu per satu.

      Lo bilang ke AI"Cek balasan yang masih gw utang minggu ini."
    • 06

      PRD yang dimulai dari pertanyaan yang tepat

      Sebelum nulis, dia nanya dulu: siapa yang paling butuh, gimana mereka ngakalinnya sekarang, dan gimana lo tau fiturnya berhasil. Kalau PRD-nya udah ada di Google Drive, dia revisi yang itu.

      Lo bilang ke AI"Bikin PRD buat alur checkout baru."
    • 07

      Ide jadi prototype yang bisa diklik, atau slide

      Satu file yang kebuka di browser mana pun: layar yang bisa dipencet buat demo, slide yang jalan pakai keyboard, atau halaman penjelas buat dikirim ke atasan.

      Detailnya di halaman /mockup · /artifact

      Lo bilang ke AI"Bikin prototype alur daftar akun buat demo besok."
    • 08

      Koreksi sekali, sesi berikutnya dia udah tau

      Bilang apa yang salah. Dia rangkum jadi aturan, lo setujui, dan dia inget tanpa lo ingetin lagi.

      Tiap minggu lo ngingetin "tanya gw dulu sebelum kirim ke Slack".Sekali bilang, dia selalu nanya dulu.
    Dipakai buatPrioritas pagi sebelum buka laptopNotulen abis rapat klienBrief sebelum rapat pentingLaporan mingguan ke atasanBalasan Slack dan email yang ketundaDraft PRD fitur baruPrototype buat demo besokSlide buat presentasi
    Ini sistem yang gw pakai tiap hari: tiap pagi "siapin hari gw", abis rapat "tulis notulennya", dan dalam seminggu puluhan draft balasan yang nunggu gw setujui. Gw rapihin, terus gw bagiin.
    Brian Arfi FaridhiBrian Arfi FaridhiProduct Director di Merit · AI Builder · Pembuat alat ini33 bintang dan 13 fork di GitHub

    Lihat jalannya

    Dashboard template di pagi hari: jumlah yang telat dan jatuh tempo, briefing pagi, dan tiga action item dari rapat

    Dashboard pagi: yang telat, yang jatuh tempo hari ini, briefing, dan action item dari rapat kemarin.

    Notulen buatan /mom: data rapat, ringkasan, dua keputusan, dan lima action item dengan pemilik dan tenggat

    Notulen yang ditulis /mom dari catatan rapat: keputusan, action item, pemilik, dan tenggat.

    Template aslinya, dijalankan dengan contoh workspace fiktif.

    Keraguan yang wajar

    Yang biasanya ditanyain dulu.

    Perlu bisa coding?
    Perlu sedikit nyaman sama terminal buat masangnya. Abis itu lo ngobrol biasa. Kalau belum nyaman, aplikasi desktop AI Second Brain lebih cocok buat lo.
    Beneran gratis?
    Iya. Lisensinya Apache-2.0: pakai, ubah, jual yang lo bangun. Nama "AI Second Brain", nama AI Circle, dan artwork-nya gak termasuk, jadi versi lo pakai nama sendiri.
    Harus nyambungin semua alat dulu?
    Gak. Jalur cepatnya kira-kira 15 menit, tanpa API key. Nyambungin Google, Slack, dan kalender makan kira-kira 2 sampai 4 jam, kebanyakan buat login Google. Pilih yang lo pakai aja.
    Data gw aman?
    Catatan dan kredensial lo tetap di komputer lo. Yang dibaca AI dikirim ke layanan AI yang lo pakai, sama kayak chat biasa. Gak ada yang dikirim, diposting, atau dihapus tanpa persetujuan lo.
    Harus pakai Claude?
    Dibikin buat Claude Code. Instruksi intinya juga jalan di alat AI agent lain.

    ai-second-brain

    Mulai dari sistem yang udah jalan, bukan dari folder kosong.

    Gratis dan terbuka. Ambil, ceritain kerjaan lo, lalu mulai minta.

    Bagikan

    Kenal orang yang butuh ini? Kirim ke dia.

    Teks yang ikut kekirim

    Laporan mingguan, notulen, dan prioritas pagi dikerjain AI, lo tinggal review. Template-nya gratis.

    brianarfi.com/skills/ai-second-brain

    Buat yang teknisCara pasang, kebutuhan, lisensi, dan changelog lengkap.

    Cara pasang

    Dari nol sampai jalan.

    Langkahnya diambil dari README repo-nya. Tinggal salin.

    1. Jalur 15 menit, tanpa API key dan OAuth

      install.sh ngecek tooling lo, bikin CLAUDE.md dari template, dan nyiapin .env.

      bash
      git clone https://github.com/BrianArfi/ai-second-brain.gitcd ai-second-brainbash install.shclaude
    2. Isi CLAUDE.md

      Buka foldernya di editor dan jalanin /setup. AI-nya nanya-nanya, minta akses ke alat lo, dan nulis CLAUDE.md buat lo. Mau manual? Isi sendiri pakai docs/CUSTOMIZING.md.

      bash
      /setup
    3. Sambungin alat yang lo pakai

      Ikutin docs/SETUP.md: Google, Slack, kalender, Jira, langkah demi langkah. Gak harus semua. Siapin 2 sampai 4 jam, kebanyakan buat OAuth Google.

    Kebutuhan

    • Claude Code. Instruksi intinya juga jalan di harness agentic lain.
    • macOS, WSL, atau Windows.
    • Jalur 15 menit tanpa API key dan tanpa OAuth. Konektor (Google, Slack, Calendar, Jira, analytics) opsional.

    Lisensi

    Apache-2.0

    Versi, lisensi, dan changelog dicek ulang ke sumbernya 2026-10-01

    Changelog

    Apa yang berubah, versi demi versi.

    Disalin dari CHANGELOG produknya, dicek 2026-10-01. Versi yang belum terbit gak ditampilkan.

    Versi 0.8.1Terbaru1 Okt 2026

    Changed

    • The README tells you what the template does for you first. It opens with the shift, the gap and the fix, a diagram of the daily loop and a table of what is inside, then the quick start. The deeper reference moved to docs/ARCHITECTURE.md, docs/DASHBOARD.md and docs/SETUP.md, so nothing was dropped.
    • /daily-update reads your timezone from CLAUDE.md. It no longer assumes WIB.
    • Domain sharing reads WORK_DOMAIN from your environment or .env, so a fork shares Google files to its own domain without editing code.

    Fixed

    • Runtime files that a demo session committed by mistake are removed: .agent/harness.json, a ledger session file, a dashboard cache and a sample commitment.
    • The ledger watcher counts a Google Doc update only when gdoc_surgical.py runs a command that writes. Reading its source or running read no longer blocks the end of a turn.
    Versi 0.8.030 Sep 2026

    Added

    • What's new tab in the dashboard. The local dashboard renders this changelog, newest release first, from /api/changelog. The text is escaped before it is rendered, HTML comments are dropped, and links to repository files show as plain text.
    • Reply drafts show what they answer. A new reply_draft_guard.py hook blocks a reply draft under journal/drafts/ that does not quote the original message, with sender and time, and the thread so far. It also blocks draft text inside a code fence, because a fence does not wrap.

    Changed

    • Release notes come from this file. sync.py builds the GitHub release body from the changelog section for the version being cut. When that section is missing it uses the Unreleased section, and when that is empty too it falls back to the commit titles, as before. Until now every release said "Harness sync from the private repo".
    • Versions v0.2.0 to v0.7.0 have their own sections. They were backfilled from the git tags, the public repo's diff per tag range, and the private commit log. Each section names its sources in an HTML comment.
    • Release headings use the ## [x.y.z] - YYYY-MM-DD form. tools/pack.py reads both this form and the older ## vX.Y.Z form.

    Fixed

    • The meeting recorder survives a trimmed common.py. The pipeline helpers moved to meeting-recorder/pipeline_common.py, and common.py re-exports them, so a copy of common.py without the helpers no longer stops the watcher.
    • The conversation claim guard no longer matches a top-level post against open threads in the same channel.
    Versi 0.7.028 Sep 2026

    Added

    • Draft feedback tracker. draft_feedback.py measures how the owner edits the drafts the harness writes, and a weekly job commits the report so weekly planning can read it. draft_need_check.py runs before a reply is drafted: it skips a message the owner already answered, and suggests a reaction instead of a reply for a plain acknowledgement. It is wired into the reply queue, the reply router brief and the Slack send protocol.
    • Stale-status guard. unanswered_status_check.py cross-checks calendar RSVPs and Slack threads, so an item the owner already handled is not reported as unanswered. The daily update runs the calendar check on every run. Identity is resolved at runtime (a new gcal_manager.py whoami action and Slack auth.test), with environment variables to override it.
    • Read-only JQL search in the Jira connector, on every configured site.
    • Record one window. The meeting recorder can record the window you were last in, or a window you pick, instead of every monitor (list_windows, active_window, WindowsCapture). It picks the video encoder that the local ffmpeg actually has.

    Changed

    • send_slop_guard.py warns when a draft adds lines past what the message needs.

    Fixed

    • The Windows recorder GUI imported window helpers that recorder.py did not ship in v0.3.0 to v0.6.0. They ship now.
    Versi 0.6.027 Sep 2026

    Changed

    • The cheap-model chain adapts to the machine. cheap_llm.py builds its chain from the backends the machine actually has. The default order stays Gemini Flash, then GLM, then Haiku.
    • Idle work-tree nodes archive themselves. A node with no activity for 30 days is archived by work_tree_stale.py. work_tree.py add-node records the creation time, so a new empty node is never counted as idle. docs/ledger_hygiene.md describes the rule.
    Versi 0.5.026 Sep 2026

    Added

    • Ledger verification by script first. cheap_llm.py and the ledger CLIs check a record against its evidence with a script first, a cheap model second, and Claude last, so a chase is not sent for work that is already done.
    • Ledger hygiene rules in docs/ledger_hygiene.md, with work_tree_stale.py for nodes that have gone quiet.
    • Google Doc publish checks R1 to R4 in readability_gate.py: internet links only, sized tables, every promised image exists, and one header field per line. publish_prd.sh can embed screenshots.
    • Text-drawn diagrams are refused in Google Docs. Use a rendered Mermaid image. Override once with GDOC_ALLOW_ASCII_DIAGRAM=1.
    • Work hours per machine. Each host writes its own shard under journal/state/work_hours_hosts/, and the tracker merges them, so every machine can sweep.

    Fixed

    • A meeting recorder run with --once writes a heartbeat that stays valid until the next cron tick, so a recording is not reported as "nothing is transcribing it".
    • slack_client.py reads --text-file as UTF-8, so bullets do not post as mojibake on Windows.
    • meeting-recorder/common.py is the full module again, after a trimmed copy replaced it.
    Versi 0.4.023 Sep 2026

    Added

    • Standing rules ship with the template. CLAUDE.md.template had not changed since July, so a fork started without the rules the private harness had learned since. It now carries a Standing Rules section: do the work instead of reporting on it, fix what is broken, never claim an action that has not happened, verify before you report, treat a question as a question, done means done, answer first and stop, record it where it is tracked in the same turn, link every file you name, read a shared document before you replace it, never act on a garbled instruction, and offer to save a correction as a rule. Each one is there because leaving it out caused a failure that repeated. The block sits between two markers, so the desktop app exports the same text and a rule learned once reaches both.

    Changed

    • A leaner CLAUDE.md, and one less process per command. Incident history, command lists and kill switches moved out of the always-loaded CLAUDE.md into docs/harness_reference.md, word for word, under five new anchors. Each rule stays in CLAUDE.md as one line plus a link. The no-op drive_verify hook, which started a Python process after every Bash call and did nothing, is unregistered.
    • Moving machines: the record travels, content does not. harness_migrate.py export now leaves video, audio, images, archives and installers behind wherever they sit, and prints how much it skipped. The first real run found 3.5 GB of rendered video in a 3.9 GB bundle. The desktop app's own chat transcripts, which the bundle never carried, now travel and are restored on import. The migrate test runs in a sandbox instead of reading the real app data.
    • The agy-bridge model table brings the GLM models back and probes their ids live.
    • /learn says the truth about memory: it travels with git, and links in MEMORY.md are relative.

    Fixed

    • The session model is detected on Windows. The startup routing hook printed "Session model: unknown" on every Windows session, so the delegation table never had a real tier to work from. Two causes, stacked. The transcript lookup replaced only / when it built the project directory name, while Claude Code replaces every character that is not a letter, a digit or -, so a path with a drive colon never matched. And Python's bare bash resolves to WSL's System32\bash.exe before PATH, so the detection script ran inside Linux against a Windows path. Both are fixed, with a regression test.
    • Tests that failed for the wrong reason. Three tests failed while the code under them was right: one fed Windows paths unquoted, one used 1970 timestamps that a newer staleness rule reads as ancient, and one asserted a routine that had been deliberately removed. The last one hid a real bug: the reply-router settings schema still said a "Scheduled runs" switch gated it, which it does not. All fixed.
    • The access watch credits an on-behalf-of share request to the person who needs access, not to the person who asked.
    • The reply router takes back a dispatch that the app never turned into a chat.
    Versi 0.3.021 Sep 2026

    Added

    • One conversation, one session. conversation_claim_guard.py refuses a send into a Slack conversation that another session already owns.
    • Evidence-gated clean-up for waiting-on records. answer_hunt.py looks for an answer in six sources and splits strong evidence from weak leads, and deprio_discard.py deprioritises or discards a record only on strong evidence. The lifecycle is in docs/waiting_on_lifecycle.md.
    • Model drift check. model_drift_check.py finds dead and outdated model ids in the agy-bridge chain before a call fails on them.
    • Local Ollama backend for agy-bridge, through Ollama's OpenAI-compatible /v1, with a base URL override.
    • Calendar attachments. gcal_manager.py --attach puts a Drive file on an invite, and list --json reports attachments.
    • Slack channel rename, approval-gated like post and create.
    • Automation holds are visible. automation_settings.py gives every automation one held block that says what is held, why, and when it clears.
    • Task board builder. build_task_board.py builds one Kanban board from a roadmap sheet and a backlog, ready for a Linear import.
    • Windows dictation helper. meeting-recorder/dictate_win.pyw records from a global hotkey and puts the transcript on the clipboard.

    Changed

    • The agy-bridge chain moved off retired Gemini ids.
    • The work-hours tracker counts every session on every host, and counts automation as parallel output. The dashboard's automatic sweep backfills the whole stale gap.

    Fixed

    • link_guard.py knows every checkout root and follows writes through UNC paths, and a local file link opens on Windows.
    • Reply drafts quote the whole original message and show people by name, never by a bare id.
    • The ledger guard treats a checkout that is behind as "pull first", not as deleted records.
    • --convert in the Drive connector maps pptx, docx and xlsx to their Google formats.
    • The reply-router close status file is mirrored into every checkout.
    Versi 0.2.111 Sep 2026

    Added

    • SKILL.md files for the gdoc-comment and gemini-image skills.

    Changed

    • The reply router runs from the desktop app scheduler instead of a crontab line that was never installed. /autodraft documents the change.

    Fixed

    • register_prd.py no longer corrupts the first row of every table it writes to.
    Versi 0.2.011 Sep 2026

    Added

    • Seven new commands. They wrap skills that already shipped with nothing in front of them. /user-story turns a feature into stories and holds the line that every Then has to be objectively measurable, because "the user sees a friendly message" cannot be tested and will be argued about. /ticket drafts a tracker issue, resolves its work-tree node first, and waits for explicit approval before filing. /rca runs the incident protocol under one rule: no root cause, no "resolved". On the artifact side, /artifact builds a self-contained HTML explainer or report, /mockup a clickable prototype with presenter keys, /deck a keyboard-driven slide deck, and /diagram a Mermaid diagram validated by an actual render before anyone sees it. The three HTML commands end with the same self-containment grep, because a page that pulls in a font or an image stops working the moment it is sent to someone.
    • Capability packs. tools/pack.py installs skills, commands, agents and hooks from one folder as one unit, and never runs code the pack supplies.
    • The anti-AI-voice gate ships. .agent/skills/no-ai-slop is now in the template, so /no-ai-slop resolves, and answer_budget.md adds the rule that runs first: answer first, stop, and keep to a word ceiling per channel.
    • public_drift_check.py reports how far the public mirror has drifted without running the sync.

    Changed

    • The command list says what each group is for. The command set had grown to 32 with flat descriptions, which reads as one long alphabetical list. Every description now leads with a group, so the picker reads in blocks: Daily, Weekly, Product, Artifact, Comms, Notes, Tracking, Thinking, Setup, Harness.
    • Six commands retired, none of their procedures deleted. Each moved to a permanent home first and every reference was repointed: the Slack send playbook to .agent/protocols/slack_send.md, the offload-mode toggle to .agent/skills/agy-bridge/OFFLOAD_MODE.md, and the morning and evening updates into a now self-contained /daily-update, which takes morning or evening to force a mode. /sync-fathom and /no-ai-slop were pure wrappers over SOPs that already lived in .agent/. Two wirings would have broken silently and were repointed in the same pass: journal/state/routines.json scheduled /morning-update and /evening-update as daily routines, and the SessionStart hook printed /glm on as the way to toggle offload mode.
    • /inbox-sweep is now /sweep, and access-watch ships, so its access pass works.
    • The end-of-turn ledger sync runs in the background (ledger_sync.py --background), so a turn no longer ends waiting on it.

    Fixed

    • A public sync could delete the public template's own onboarding. sync.py copies .claude/commands/ with an rmtree first, so a command retired from the private repo vanishes from the public one on the next run. That is right for a real restructuring and wrong for the generic starter commands, which the private repo drops because it has richer replacements while a fresh fork has nothing. /setup and /update-harness would both have gone, and README.md names /update-harness in its own text. PRESERVE_PUBLIC_COMMANDS now restores those ten from the public repo's git HEAD after the tree copy.
    • A synced command could point at a skill that deliberately does not ship. Scrubbing renames client strings; it cannot remove a whole section, so the public /artifact would have told a reader to publish through artifact-host, which is excluded. PUBLIC_OVERRIDES copies a public-specific version from .agent/skills/sync-public/public_overrides/ after the tree copy. Two related gaps closed the same way round: reply-router and linear-connector now ship, because /autodraft and /ticket named them and they were absent, with linear-connector/teams.json held back for its real workspace and team ids.
    • The leak audit caught a home path with the real username in it, on a file type nothing blocked. meeting-recorder/logs/watcher.err synced because *.log was a blocked pattern and *.err was not. The audit refused the push, which is the guard working, but the file had already been written into the public tree. Log directories are now blocked by directory name as well as by suffix, so the next runtime file does not have to be discovered by the audit first.
    • The Hours tab froze for three weeks and said nothing. Four defects, one shape: every failure was silent and no watch existed on the file. dashboard/server.py spawned the background sweep behind flock, a Linux-only binary, and the except Exception: pass around it turned the resulting FileNotFoundError on macOS into a no-op, so the tab served a frozen work_hours.json and rendered it in the same muted grey as fresh data. The same flock prefix broke the dashboard's manual run-job buttons on macOS. work_hours.py counted every sdk-cli session as cron automation, which drops every session run through the desktop app or the SDK (0 sessions, leverage 1.0x); an app session is now recognised by the chat UI's own line types plus more than one human-typed minute. And gcal_manager.py list never followed nextPageToken, so a window wider than 250 events came back truncated at the old end and the sweep cached the recent days as "no meetings". Data from 10 Aug to 3 Sep 2026 was rebuilt by backfill.
    • Guards, so the next variant of this is loud. A calendar fetch that returns nothing for a day that had events keeps the cached events and warns instead of blanking them. A sweep that finds session transcripts but counts none of them as interactive writes sessions_warning into the state and warns on stderr. work_hours.json joined the harness_health staleness table at 6 hours, next to the four ledgers. The refresh spawn logs both its attempts and its failures, and the failure reaches the Hours tab, which now turns the "updated Xh ago" label into a warning past 6 hours.
    • The sync recovers a stuck rebase instead of skipping every sync after it.
    • A send whose draft file the send gate cannot read yet is refused, instead of passing unchecked.
    • The Slack tracker has a thread-participation pass, so a reply inside a thread you are in is seen even when it does not mention you.
    • Slack mentions are decoded to names everywhere the harness writes text.
    • The Jira connector detects Kanban boards instead of reporting a stale sprint.
    Versi 0.1.023 Agu 2026

    First tagged release of the public template. It has been usable for months; what changed is that it is now legally usable, and that a machine checks it before it ships.

    Added

    • Apache-2.0. The repository was public with no LICENSE, which under copyright means all rights reserved. Nobody could legally fork it. The name and the artwork stay out of the grant, so a fork picks its own name.
    • CONTRIBUTING.md, SECURITY.md, CODE_OF_CONDUCT.md, and issue and pull request templates.
    • tools/repo_check.py: one gate for personal data, script syntax, and skill frontmatter, with a self-test for its own rules. Findings that already exist are recorded in a baseline, so CI fails on new leaks only and the baseline can only shrink.
    • CI that runs the gate and proves install.sh still produces a working workspace on Linux and macOS.

    Fixed

    • The export scrub let a colleague's surname through inside an email local part, a client's product names, and six real Jira project keys. All three are now scrubbed at the source, in .agent/skills/sync-public/sync.py.
    • docs/UPDATING.md and /update-harness both said CLAUDE.md, journal/ and Dashboard.md were gitignored and could never conflict. None of them was. CLAUDE.md is now ignored, and the four tracked seed files are documented with the resolution to use. A fork used to hit a conflict on its first update while being told that was impossible.
    • /update-harness finished conflict resolution with git add -A, which sweeps up whatever untracked personal files happen to be in the tree. It now stages only the files it resolved.