05. Работа с проектом
Как эффективно вести один проект через AstraCode — от первого запуска в репозитории до повторных сессий и долгих задач.
1. Старт в новом проекте
cd ~/myproject astracode
AstraCode видит:
- Где вы находитесь (cwd).
- В Git ли это репозиторий (показывает ветку).
- Какие файлы есть (по запросу — через list_dir).
Что важно для первого turn'а
Полезно сразу дать модели контекст:
Это проект на Rust, бэкенд для платёжной системы. Тесты — cargo test --workspace. Главный модуль — src/payments. Сейчас занимаюсь рефакторингом auth.
Чем больше контекста — тем точнее ответы. Особенно — нестандартные команды, конвенции, текущая задача.
2. AGENTS.md — постоянный контекст проекта
Если вы будете возвращаться к проекту регулярно, создайте AGENTS.md в корне репо. AstraCode читает его автоматически каждый раз.
Запустите:
/init
AstraCode сам соберёт скелет файла: обзор, как собрать, как тестировать, стиль кода. Просмотрите и подправьте.
Хороший AGENTS.md содержит
- О проекте: что это, какие технологии.
- Как сборка:
npm install && npm run build,cargo build --release,make... - Как тесты: какой раннер, нужны ли preconditions.
- Стиль кода: rustfmt? prettier? специфичные правила.
- Коммиты: conventional commits? squash перед merge?
- «Don'ts»: чего никогда не делать в этом проекте.
Что НЕ нужно в AGENTS.md
- Архитектура целиком — модель прочитает код, если ей понадобится.
- Подробности интеграций — лучше в отдельных файлах под
docs/. - Секреты и креды — никогда.
3. Сменить директорию посреди сессии
/cd ../other-project
Tab — авто-дополнение подкаталогов. Повторный Tab — спуститься на уровень.
После /cd AstraCode перечитает AGENTS.md нового проекта, обновит git-контекст.
Sandbox не переключается автоматически — если в новом проекте нужно расширить writable_roots, проверьте /status или поправьте ~/.astracode/config.toml. (В Windows-сборке отдельный путь на чтение можно добавить через /sandbox-add-read-dir; на Linux/macOS этой команды нет.)
4. Упоминать файлы в промпте
Вместо «отрефактори файл auth.rs» используйте @:
Отрефактори @src/auth.rs так, чтобы verify_token возвращал Result вместо panic.
Это сигнал модели: «вот конкретный файл, начни с него». В composer'е @ открывает file picker — введите часть имени, выберите.
Можно указать несколько:
В @src/auth.rs функция verify_token использует константу из @src/config.rs. Перенеси её в @src/auth/constants.rs.
5. Запуск shell-команд
Через модель
Просто скажите, что хотите выполнить:
Запусти cargo test --package myapp -- --nocapture
Модель сама выберет tool (exec_command / shell), покажет результат, прокомментирует.
Напрямую (без модели)
Если хотите быстро что-то сделать руками, не «тратя» токены:
!cargo build !git status !ls -la
Префикс ! — выполнить shell-команду из composer'а. Sandbox и approval применяются так же.
6. Применение патчей
Когда модель предлагает изменение кода, она почти всегда использует apply_patch tool. Вы увидите diff, потом approval-диалог:
*** Update File: src/auth.rs
@@ -42,7 +42,7 @@
-fn verify_token(t: &str) {
+fn verify_token(t: &str) -> Result<()> {
if t.is_empty() {
- panic!("empty token");
+ return Err(Error::EmptyToken);
}
Would you like to make the following edits?
› 1. Yes, proceed (y)
2. Yes, and don't ask again for these files (a)
3. No, and tell AstraCode what to do differently (esc)
Просмотрите diff. Если устраивает — y (или a, чтобы больше не спрашивать для этих файлов). Если нет — esc и попросите изменить:
Не паникуй, а возвращай Err — но с понятным контекстом ошибки. Используй anyhow::bail.
Запись за пределами рабочей директории
В режиме workspace-write AstraCode, как правило, не пишет за пределами рабочей директории без подтверждения, а к служебным каталогам вроде .git/, .astracode/, .agents/ относится осторожно. Если запись действительно нужна — расширьте writable_roots в ~/.astracode/config.toml или смените sandbox-режим (не рекомендуется). В Windows-сборке отдельный путь на чтение добавляется через /sandbox-add-read-dir (на Linux/macOS этой команды нет).
7. Использование тестов как обратной связи
Лучший способ убедить модель не ошибаться — заставить её прогонять тесты:
Реализуй фичу X. После каждого изменения запускай cargo test --workspace. Если падает — сначала разберись, потом продолжай.
Модель будет цикл «изменить → запустить → починить» делать сама. Если падают тесты, она увидит stacktrace и поправит.
8. Git workflow
AstraCode хорошо умеет git:
Создай ветку feat/oauth, посмотри что я уже сделал в main, и обнови ветку.
Покажи git diff между HEAD и origin/main одним блоком.
Сделай коммит с текущими изменениями. Сообщение по conventional commits.
⚠️ Никогда не push'ит без явного разрешения. Force-push требует ваше явное «да».
/diff даёт полноэкранный pager со всеми текущими изменениями — удобнее, чем читать в чате.
9. Несколько проектов параллельно
Если работаете в нескольких репозиториях:
Вариант 1 — отдельные TUI:
# Терминал 1 cd ~/projectA astracode # Терминал 2 cd ~/projectB astracode
Каждый — своя сессия, своя история, общие настройки.
Вариант 2 — /cd внутри одной сессии:
/cd ~/projectA ... сделать там что-то ... /cd ~/projectB ... сделать там что-то ...
Контекст один. Модель будет помнить, что недавно работала в А.
Вариант 3 — tmux + /resume:
- Закрываете TUI в одном проекте.
- Открываете в другом.
- /resume показывает обе сессии — переключайтесь как угодно.
10. Долгая задача — /goal
Если задача займёт час или несколько сессий — задайте цель:
/goal Добавить OAuth-логин через Google. Соответствует ADR-042. Бюджет — 300k токенов.
После этого, что бы вы ни делали — модель помнит про цель. После /new или перезапуска — /resume восстановит контекст.
См. 07-goals.md.
11. Когда контекст переполняется
Каждое сообщение тратит токены. При длинной сессии видите в status line 45.0k / 50.0k tokens — близко к лимиту.
Что делать:
- /compact — модель сожмёт старые turn'ы в резюме, освободит место.
- /new — начать сначала (потеряет нюансы текущего разговора, но контекст с проектом всё равно есть в AGENTS).
- /fork — копия сессии для экспериментов.
AstraCode сам предложит compact, когда близко к лимиту.
12. Side conversation — спросить, не отвлекаясь
Посреди длинной задачи вы хотите уточнить что-то — но не загрязнять основной разговор:
/side как работает Rc<RefCell<T>> по сравнению с Arc<Mutex<T>>?
Откроется временный sub-разговор. Закончили — Esc, вернётесь в main. Главный turn не «увидит» этот вопрос.
13. Подключение к большим контекстам через MCP
Если работаете с задачами в Linear/Jira, переписками в Slack, кодом в GitHub PRs — подключите MCP-сервер:
# ~/.astracode/config.toml [mcp_servers.linear] command = "npx" args = ["-y", "@linear/mcp-server"] env_vars = ["LINEAR_API_KEY"]
После рестарта /mcp покажет, что Linear доступен, и модель сможет сама смотреть тикеты, создавать комментарии и т.п. См. 11-mcp.md.
14. Индексирование проекта (/index)
Для больших проектов AstraCode умеет строить локальный обзор модулей — суб-агент проходит по дереву, группирует файлы в модули (Cargo workspace → single crate → fallback по top-level директориям) и для каждого пишет короткое markdown-резюме (5–15 строк). Результат лежит как Obsidian-style vault в ~/.astracode/projects/<sha256>/:
~/.astracode/projects/3b38e074.../
├── index.md # карта проекта
├── meta.json # cwd, модель, дата, число модулей
└── modules/
├── astracode-cli.md
├── astracode-core.md
└── ...
Команды:
/index build # построить (или перестроить) индекс для текущей cwd /index status # показать состояние: модели, число модулей, дата /index clear # удалить vault текущего проекта
Подкоманда build уважает текущую TUI-cwd: если вы /cd /path/to/other-project, индекс построится для этой директории, а не той, откуда был запущен astracode. После завершения в чат выводится строка Индекс проекта построен: N/M модулей → ... — с путём к vault'у.
Прогресс идёт в нижнюю status-строку TUI («Индексирую проект…», «[1/8] формирую сводку astracode-cli…»). Это занимает обычно 1–5 минут в зависимости от размера проекта и скорости провайдера.
Когда полезно: при работе с незнакомым кодом — модель может смотреть в index.md чтобы быстро понять структуру, прежде чем читать конкретные файлы.
15. Подсказки по эффективности
Делайте задачу узкой
Плохо:
Перепиши auth с нуля как считаешь нужным.
Хорошо:
В @src/auth.rs verify_token использует unwrap. Замени на ? и убедись, что все вызывающие функции корректно обрабатывают Err.
Просите план перед действием
Для крупного — /plan:
/plan Мигрировать auth с JWT на OAuth2 (использовать crate oauth2 0.5)
Модель сначала напишет план — посмотрите, скорректируйте, дайте go.
Используйте /review перед коммитом
Привычка: перед git commit запустить /review. Поймаете много мелких косяков ещё до тестов.
Учите модель «своему стилю»
В AGENTS.md явно: «Используем anyhow::Result, не custom Error enum». «Тесты с cargo nextest run, не cargo test». «PR title в conventional commits».
Сохраняйте успешные паттерны
Если разговор привёл к хорошему результату — сделайте резюме в AGENTS.md или docs/:
Подключение OAuth2 — см.
docs/oauth-setup.md.
В следующий раз AstraCode прочитает это в начале сессии.
16. Не забывайте про /help
Если забыли команду или хотите узнать про функцию — /help. Каждая страница имеет EN/RU версии.
Например:
/help goal /help model /help review
Откроется pager с описанием меню, USAGE, DETAILS и NOTES.