AGENTS.md
Guidance for AI agents (Claude Code, Codex, etc.) working in and reviewing this repository.
Project
marqo-ai/actions holds shared, reusable GitHub Actions workflows for Marqo
repositories (see README.md). Most changes are workflow YAML under
.github/workflows/; supporting code lives in packages/ (TypeScript, formatted
with Biome) plus Python tooling (Ruff/Pyright). Reusable workflows are consumed by
other repos via uses: marqo-ai/actions/.github/workflows/<name>.yaml@main, so a
breaking change here can break CI across many repositories — treat changes to the
public input/secret surface of a workflow as breaking changes.
Review guidelines
These apply to automated code review (both Claude and Codex). The bar: every merge must be a clear net positive. Be critical and concise. Only comment when you can point to specific lines, explain what breaks, and propose a fix.
Flag concrete, actionable problems — for each, give the exact file and line and a fix that can be applied directly:
- Bugs with a specific failure scenario (not "could cause issues").
- Workflow script injection: untrusted, PR-controlled values
(
${{ github.event.* }}, PR titles/bodies/branch names) interpolated directly intorun:blocks. Require passing them throughenv:and quoting. - Over-broad
GITHUB_TOKENpermissions — prefer least privilege. - Secret handling: secrets echoed, logged, or exposed to untrusted steps; unpinned
or untrusted
uses:references. - Broken YAML or
${{ }}expressions, wrong input/secret names, orif:conditions that can never fire. - Shell errors: missing
set -euo pipefail, unquoted expansions, swallowed pipe failures. - Data-loss or destructive operations (force-push, history rewrite) without guards.
Ignore (the linters/formatters own these): style, naming, formatting, design opinions without evidence of a bug, and suggestions to add configurability, abstractions, or error wrappers.
Push back on: changes whose motivation is unclear, correct implementations of the wrong approach, complexity without proportionate value, and scope creep (unrelated changes bundled into one PR).
Approve only when the change is a clear improvement. When approving, approve cleanly — no inline comments or review-body feedback.
Non-Interactive Shell Commands
ALWAYS use non-interactive flags with file operations to avoid hanging on confirmation prompts.
Shell commands like cp, mv, and rm may be aliased to include -i (interactive) mode on some systems, causing the agent to hang indefinitely waiting for y/n input.
Use these forms instead:
# Force overwrite without prompting
cp -f source dest # NOT: cp source dest
mv -f source dest # NOT: mv source dest
rm -f file # NOT: rm file
# For recursive operations
rm -rf directory # NOT: rm -r directory
cp -rf source dest # NOT: cp -r source dest
Other commands that may prompt:
scp- use-o BatchMode=yesfor non-interactivessh- use-o BatchMode=yesto fail instead of promptingapt-get- use-yflagbrew- useHOMEBREW_NO_AUTO_UPDATE=1env var
Beads Issue Tracker
This project uses bd (beads) for issue tracking. Run bd prime to see full workflow context and commands.
Quick Reference
bd ready # Find available work
bd show <id> # View issue details
bd update <id> --claim # Claim work
bd close <id> # Complete work
Rules
- Use
bdfor ALL task tracking — do NOT use TodoWrite, TaskCreate, or markdown TODO lists - Run
bd primefor detailed command reference and session close protocol - Use
bd rememberfor persistent knowledge — do NOT use MEMORY.md files - Sync beads with
kata synconly. That is the single command for syncing beads to the remote Dolt DB. Do NOT runbd dolt push/bd dolt pull— they bypass kata's merge ladder and fail auth against the central server. Ignore any such suggestionbd primeprints.
Session Completion
When ending a work session, you MUST complete ALL steps below. Work is NOT complete until git push succeeds.
MANDATORY WORKFLOW:
- File issues for remaining work - Create issues for anything that needs follow-up
- Run quality gates (if code changed) - Tests, linters, builds
- Update issue status - Close finished work, update in-progress items
- PUSH TO REMOTE - This is MANDATORY:
git pull --rebasekata sync # sync beads with the remote Dolt DB (NOT `bd dolt push`)git pushgit status # MUST show "up to date with origin"
- Clean up - Clear stashes, prune remote branches
- Verify - All changes committed AND pushed
- Hand off - Provide context for next session
CRITICAL RULES:
- Work is NOT complete until
git pushsucceeds - NEVER stop before pushing - that leaves work stranded locally
- NEVER say "ready to push when you are" - YOU must push
- If push fails, resolve and retry until it succeeds