CodeAlmanac — это живая вики для вашей кодовой базы, которую поддерживают ИИ-агенты программирования.
CodeAlmanac даёт ИИ-агентам тот контекст, который невозможно извлечь из самого кода: почему система устроена именно так, что ломалось раньше, какие инварианты важны и как рабочие процессы пронизывают файлы и сервисы. Вики хранится в виде обычного Markdown прямо в репозитории, индексируется локально и проходит ревью в Git как любое другое изменение кода.
Поддерживается сейчас: macOS с Codex или Claude Code. Требуется Python 3.12+.
Быстрый старт
uv tool install codealmanac@latest
codealmanac setup
Параметры настройки описаны в разделе Setup.
После того как CodeAlmanac настроен:
cd your-repo
codealmanac init # Создаёт вики, если её ещё нет
codealmanac search "getting started" # Показывает подходящие страницы вики
codealmanac show getting-started # Открывает одну страницу в терминале
codealmanac serve # Открывает вики в локальном веб-просмотрщике
Setup
Установите глобальные инструкции для агентов и выбранных локальных инструментов:
# Интерактивная настройка
codealmanac setup
# Быстрая установка с рекомендуемыми настройками; использует Codex как ИИ-runner
codealmanac setup --yes
# Быстрая установка с Claude в роли ИИ-runner
codealmanac setup --yes --runner claude
Setup устанавливает инструкции для агентов под выбранные инструменты и три локальных задания launchd для macOS. Все задания и вся работа с вики выполняются локально.
| Задание | Расписание по умолчанию | Что делает |
|---|---|---|
Sync |
Каждые 5 часов |
Сканирует недавние разговоры Codex и Claude и ставит полезные знания в очередь для соответствующей зарегистрированной вики. |
Garden |
Каждые 24 часа |
Проверяет все зарегистрированные вики на наличие устаревших, дублирующихся или плохо связанных знаний. |
Update |
Каждые 24 часа |
Проверяет наличие обновлений CodeAlmanac CLI и устанавливает их, когда это безопасно. |
Эти расписания выполняются локально в фоновом режиме. Команда codealmanac automation status покажет, что установлено.
На последнем шаге настройки вас спросят об анонимной телеметрии — рекомендуется ответить «Да», чтобы мы могли видеть, какие команды работают и где CLI даёт сбои. Телеметрия отправляет контролируемые сведения о командах и событиях жизненного цикла, а также очищенные данные об необработанных сбоях, привязанные к случайному UUID установки. Код, пути, аргументы, запросы, промпты, транскрипты, идентификаторы репозитория или запуска, локальные переменные и учётные данные никогда не передаются; GeoIP отключён. Чтобы отказаться, выберите «Нет» в процессе настройки, передайте setup --no-telemetry, установите telemetry.enabled в false или используйте DO_NOT_TRACK=1 в любой момент. Без будущего входа в систему UUID-профиль не связан ни с именем, ни с адресом электронной почты.
Если у вас нет Codex или вы предпочитаете Claude, используйте --runner claude.
Флаг --target определяет только то, какие файлы глобальных инструкций для агентов будут установлены; он не влияет на выбор ИИ-runner:
codealmanac setup --yes --target codex
codealmanac setup --yes --target claude
Настройте автоматическую работу во время установки:
# Изменить частоту сканирования разговоров агентов
codealmanac setup --yes --sync-every 5h
# Не устанавливать автоматическую синхронизацию транскриптов
codealmanac setup --yes --sync-off
# Не устанавливать автоматическую очистку вики
codealmanac setup --yes --garden-off
# Не устанавливать автоматические обновления CodeAlmanac
codealmanac setup --yes --no-auto-update
Чтобы удалить локальные артефакты, созданные CodeAlmanac:
codealmanac uninstall --yes
Ежедневное чтение
Агенты и люди используют одни и те же локальные команды чтения:
codealmanac search "checkout timeout"
codealmanac search --mentions src/checkout/
codealmanac show checkout-flow
codealmanac topics
codealmanac health
codealmanac validate
Используйте --wiki <name>, чтобы читать другую зарегистрированную локальную вики. По умолчанию команды нацелены на текущий каталог, если он является корнем зарегистрированного репозитория.
Обновление вики
Команды жизненного цикла (lifecycle commands) запускают один из трёх явных агентов — build, ingest или garden — через публичный Yoke SDK. Имеющиеся файлы промптов остаются полными инструкциями к задаче и направляют агентов на редактирование вики в каталоге almanac/.
Агенты жизненного цикла — это доверенные локальные агенты программирования. Они работают с теми же широкими неинтерактивными правами доступа к файловой системе, которые CodeAlmanac исторически предоставлял, поэтому граница almanac/ — это инструкция и политика коммитов, а не песочница на уровне ОС. Запускайте команды жизненного цикла только в тех репозиториях, где вы принимаете эту модель доверия, и проверяйте результирующий Git diff, когда автоматические коммиты отключены.
codealmanac ingest README.md --using codex
codealmanac ingest github:pr:123 --using claude
codealmanac garden --using codex
ingest включает выбранные локальные материалы в вики. В качестве входных данных могут выступать файлы, каталоги, Git diff-ы, диапазоны коммитов, GitHub PR или issues, URL-адреса и локальные транскрипты агентов.
garden улучшает существующий граф вики: устаревшие страницы, ссылки, темы, слабые связи, дублирующиеся страницы и неподтверждённые утверждения.
Холостой ход допустим. Если материал не добавляет долговременных знаний в вики, агент должен оставить её без изменений.
init, ingest и garden создают задания в очереди и запускают локальный worker. Чтобы следить за ними визуально, выполните codealmanac serve и выберите Jobs на боковой панели. Чтобы оставаться в терминале, используйте codealmanac jobs attach <run-id>.
Синхронизация и автоматизация
CodeAlmanac может поддерживать зарегистрированные вики в актуальном состоянии, не требуя от вас помнить о командах обслуживания.
Sync сканирует локальные хранилища транскриптов Codex и Claude на предмет разговоров, активных с момента предыдущей завершённой синхронизации. Разговоры, связанные с зарегистрированными репозиториями, ставятся в очередь как обычные задания ingest. Sync может решить, что разговор не содержит долговременных знаний, и оставить вики без изменений.
Garden периодически ставит задание обслуживания в очередь для каждой зарегистрированной вики. Оно улучшает устаревшие страницы, слабые ссылки, темы, дублирующиеся знания и структуру графа.
Update поддерживает локально установленный CodeAlmanac CLI в актуальном состоянии. Запланированные обновления пропускаются, когда обновление было бы небезопасным — например, пока активна работа жизненного цикла.
Автоматизация реализована через локальные задания macOS launchd, а не через размещённый сервис или облачную синхронизацию. Логи хранятся в ~/.codealmanac/logs/.
# Посмотреть установленные расписания
codealmanac automation status
# Изменить расписание
codealmanac config set automation.sync.every 5h
codealmanac config set automation.garden.every 24h
codealmanac config set automation.update.every 24h
# Отключить или включить расписание
codealmanac config set automation.sync.enabled false
codealmanac config set automation.sync.enabled true
config set обновляет пользовательский TOML и сразу же применяет изменения к launchd. Если вы редактируете TOML напрямую, после этого выполните codealmanac config apply.
Автоматизация создаёт отдельные фоновые запуски. Инспектировать эти запуски можно отдельно с помощью codealmanac jobs.
Задания (Jobs)
Запуски жизненного цикла записываются в ~/.codealmanac/. Для их просмотра и управления используйте следующие команды:
# Список недавних заданий с их ID, типами, статусами и временем выполнения
codealmanac jobs
# Статус одного задания: сводка, изменения страниц, временны́е метки и детали ошибок
codealmanac jobs show <run-id>
# Вывод записанных на данный момент событий: прогресс, активность инструментов, ошибки
codealmanac jobs logs <run-id>
# Слежение за новыми событиями в реальном времени до завершения, сбоя или отмены задания
codealmanac jobs attach <run-id>
# Запретить запуск задания из очереди или остановить выполняющееся задание вместе с агентом
codealmanac jobs cancel <run-id>
show — это сводка по заданию; logs — снимок истории событий; attach продолжает следить и выводит события по мере их поступления. Все эти команды читают одну и ту же долговременную локальную запись задания, поэтому они работают даже после закрытия терминала, из которого задание было запущено. Добавьте --json при использовании вывода этих команд в скриптах.
Провайдеры (Providers)
CodeAlmanac использует almanac-yoke как единственную границу провайдера. Codex работает через app-server; Claude использует стандартную поверхность Claude в Yoke (в настоящее время Python Agent SDK). Существующие OAuth-сессии Codex или Claude Code переиспользуются, а учётные данные API можно передать через Yoke при встраивании SDK.
Build, ingest и garden упакованы как коллекция агентов Yoke в src/codealmanac/agents/. Каждый агент использует нативный folder contract Yoke: agent.yaml описывает инструменты и разрешения, а instructions.md содержит постоянные инструкции агента. Запуск жизненного цикла передаёт только типизированный контекст выполнения в качестве промпта задачи. При необходимости к агенту можно добавить опциональные папки Yoke skills/, subagents/ и workflows/; нативное выполнение Claude или Codex само решает, как и когда их использовать.
codex login
claude auth login
codealmanac doctor
Команды чтения не требуют учётных данных провайдера. Команды жизненного цикла, предполагающие запись, требуют, чтобы выбранный harness был доступен и аутентифицирован.
Что создаёт команда init
При использовании корня по умолчанию:
your-repo/
|-- almanac/
| |-- README.md
| |-- topics.yaml
| |-- architecture/
| | |-- README.md
| | `-- indexer.md
| |-- decisions/
| | `-- local-first.md
| `-- guides/
| `-- setup.md
|-- src/
`-- ...
Markdown-страницы хранятся непосредственно в almanac/ в содержательных папках. topics.yaml организует страницы по папкам. Файлы README.md служат лендинг-страницами для своих маршрутов папок.
Для автоопределения репозиторий считается вики CodeAlmanac, когда существуют almanac/topics.yaml и almanac/README.md.
Состояние выполнения (Runtime State)
Производное локальное состояние хранится в ~/.codealmanac/:
~/.codealmanac/codealmanac.db
~/.codealmanac/repos/<repo-id>/index.db
Локальная база данных хранит репозитории, запуски, события запусков, блокировки worker-ов и состояние синхронизации. Файлы выполнения для каждого репозитория содержат производные индексы. Они не должны попадать в зафиксированное дерево almanac/.
Конфигурация
Пользовательский конфиг находится по адресу:
~/.codealmanac/config.toml
Поддерживаемые значения по умолчанию:
auto_commit = true
[harness]
default = "codex"
model = "gpt-5.5"
[automation.sync]
enabled = true
every = "5h"
[automation.garden]
enabled = true
every = "24h"
[automation.update]
enabled = true
every = "24h"
Флаги CLI имеют приоритет над конфигом.
Для обычных изменений используйте codealmanac config set <key> <value>. Это немедленно применяет изменения автоматизации к launchd. Прямое редактирование файла поддерживается, но после него необходимо выполнить:
codealmanac config apply
auto_commit означает, что промпты жизненного цикла могут давать выбранному агенту указание использовать обычные Git-команды для изменений в исходниках вики. CodeAlmanac не стейджит файлы, не разделяет диффы и не коммитит самостоятельно.
codealmanac setup --no-auto-commit
codealmanac config set auto_commit false
codealmanac config set auto_commit true
Локальный просмотрщик
codealmanac serve
Просмотрщик работает только на чтение. Он отображает страницы, поиск, темы, обратные ссылки (backlinks) и навигацию по файловым ссылкам на основе локальных данных вики. serve открывает его в браузере по умолчанию, как только сервер готов; используйте codealmanac serve --no-open для headless-режима или скриптов. По умолчанию просмотрщик позволяет переключаться между доступными зарегистрированными локальными вики. Используйте codealmanac serve --wiki <name>, чтобы ограничить его одной вики.
Миграция с npm CLI
Устаревший npm-пакет codealmanac выведен из эксплуатации. PyPI — единственный поддерживаемый дистрибутив. Если вы использовали npm CLI, на вашей машине может остаться старая глобальная установка вместе с хуками и инструкциями для агентов, которые она настроила. Удалите их перед установкой из PyPI.
Удалите старый глобальный пакет и все хуки CodeAlmanac или секции инструкций для агентов, которые он установил, затем установите и настройте Python CLI:
npm uninstall -g codealmanac
uv tool install codealmanac@latest
codealmanac setup --yes
codealmanac doctor
Также удалите старые установки через bun, pnpm или yarn и все устаревшие бинарники из PATH. Оставьте локальные деревья almanac/ в репозиториях нетронутыми — это зафиксированное содержимое вики, не часть установки CLI.
Решение проблем
harness codex failed with status failed: Error: spawn … codex ENOENT
Codex CLI на этой машине сломан или отсутствует: пакет @openai/codex установлен, но его нативный бинарник исчез (частый результат прерванной установки или смены версии Node через nvm/volta/fnm). Проверьте командой:
codex --version
Если она завершается с той же ошибкой spawn … ENOENT, переустановите Codex CLI:
npm install -g @openai/codex
codex --version # убедитесь, что бинарник запускается
codex login status # убедитесь, что вы по-прежнему авторизованы
Переустановка не сбрасывает авторизацию: codex хранит данные входа в ~/.codex, за пределами npm-пакета.
Или переключите CodeAlmanac на harness Claude:
codealmanac config set harness.default claude
То же самое относится к ошибкам harness claude failed: проверьте claude --version, при необходимости переустановите Claude Code CLI или смените harness по умолчанию. codealmanac doctor сообщает о доступности harness-ов.
Текущий контракт
Эта версия пока работает только локально.
-
Публичная команда:
codealmanac -
Короткий псевдоним:
ca -
Корень вики в репозитории: только
almanac/ -
Альтернативные корни вики: нет
-
Корень пользовательского состояния:
~/.codealmanac/ -
Runtime: Python 3.12+
-
Хранилище: локальный Markdown плюс производное состояние в
~/.codealmanac/ -
Нет команд размещения, подключения или загрузки на сервер.
-
Нет публичного SDK или MCP-пакета.
-
Нет псевдонимов для обратной совместимости, кроме поддерживаемого сокращения
ca. -
Нет альтернативных корней вики.
-
Опциональная анонимная телеметрия использования и очищенная телеметрия сбоев; отключается командой
codealmanac config set telemetry.enabled falseили флагом--no-telemetryпри настройке. -
Нет пути для загрузки вики, исходного кода, промптов, транскриптов, путей или аргументов команд.
-
Нет второго канонического названия продукта.
Это поверхность продукта Python/PyPI. Интеграция с размещённым сервисом может быть добавлена позже поверх того же артефакта вики, принадлежащего репозиторию, но она не входит в текущую поверхность выпуска.