Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
128 commits
Select commit Hold shift + click to select a range
97b994c
feat(daemon): supervisor-owned rlm spawn ledger as family authority (…
sethkarten Aug 14, 2026
06e4a19
refactor(daemon): consolidate rlm subagent metadata onto the spawn le…
snimu Aug 16, 2026
2c34b82
chore(ai): refresh the generated model catalog from live provider cat…
snimu Aug 16, 2026
e64fbcb
Add Ctrl+J to toggle edit diffs independently of tool output (#1388)
snimu Aug 17, 2026
875aba9
feat(coding-agent): always-visible edit summary with inline Ctrl+J di…
snimu Aug 17, 2026
849c921
Agents view: hint 'type to search sessions' instead of 'type to start…
snimu Aug 17, 2026
26f7f1a
fix(daemon): move supervisor authority records out of $TMPDIR (#1449)
snimu Aug 17, 2026
a9a8655
fix(daemon): drop deleted rlm children's kernel state and dedupe arti…
snimu Aug 17, 2026
35f37ed
feat(coding-agent): show subagent model and effort in agents view (#1…
sethkarten Aug 17, 2026
941d7b3
Regenerate the model catalog (#1481)
snimu Aug 17, 2026
114a1d6
Resume interrupted work after an automatic compaction (#1279)
snimu Aug 17, 2026
61131b2
chore(release): prepare v0.7.3 (#1492)
sethkarten Aug 17, 2026
e85a67a
fix(coding-agent): reset daemon root depth (#1496)
sethkarten Aug 17, 2026
7ca4493
prompt: make long-running RLM work nonblocking, visible, and clear (#…
samsja Aug 18, 2026
20b5497
fix(coding-agent): preserve goal continuation after compaction (#1316)
samsja Aug 18, 2026
032e3ee
chore: remove redundant comments and unused internals (#1505)
sethkarten Aug 18, 2026
aa0bdfa
prompt: remove reference to unshipped async bash() kernel helper (#1508)
snimu Aug 18, 2026
8ee310c
fix(coding-agent): keep Shift+Enter newline working where it sends a …
snimu Aug 18, 2026
d51590c
Keep the draft when opening the agents view (#1372)
snimu Aug 18, 2026
824a9ee
Let subagents be spawned with their own reasoning level (#1510)
snimu Aug 18, 2026
8189b12
Normalize daemon socket paths before deriving identity (#1520)
snimu Aug 18, 2026
e7b8cae
CI: require a linked Linear ticket on PRs (#1480)
snimu Aug 18, 2026
1663d44
Keep large IPython state from slowing later turns (#1540)
rasdani Aug 19, 2026
f8f0036
docs: add Trendshift badge (#1500)
willccbb Aug 19, 2026
b09fbdb
fix(coding-agent): rank model search by intent (#539)
eliebak Aug 19, 2026
af0b8e0
chore(release): prepare v0.7.4 (#1569)
snimu Aug 19, 2026
d98d076
feat(acp): harden resident session lifecycle (#1494)
sethkarten Aug 20, 2026
02e217e
fix(coding-agent): answer ACP prompts only once the session admits th…
snimu Aug 20, 2026
91b5c61
fix(coding-agent): treat a set-but-empty credential env var as missin…
snimu Aug 20, 2026
f8f0222
feat: add generic kernel-owned MCP runtime (#1495)
sethkarten Aug 20, 2026
ab3db32
fix(coding-agent): reject headless idle waiters when a post-compactio…
snimu Aug 20, 2026
55277ff
fix(coding-agent): survive kernel cold boots and stop leaking raw zmq…
snimu Aug 20, 2026
bb61ca2
fix(coding-agent): close MCP runtime review follow-ups (#1585)
snimu Aug 20, 2026
b5807b6
Changelog fragments: conflict-free changelog entries (#1589)
snimu Aug 20, 2026
a3af021
fix(coding-agent): dim the queue-browse header so it reads as a hint,…
snimu Aug 20, 2026
addfc23
Kernels exit when their owner dies (#1559)
snimu Aug 20, 2026
c75a637
feat(coding-agent): support ACP MCP programs (#1378)
hallerite Aug 20, 2026
bb3ac37
feat(coding-agent): render the subagents summary as a bordered tile (…
snimu Aug 21, 2026
848081e
Support /fast with OpenAI API-key authentication (#1609)
snimu Aug 21, 2026
e51d226
fix(coding-agent): hold goal continuations while subagent work is uns…
snimu Aug 21, 2026
35103cb
refactor(agent): typed codes for Agent.continue precondition failures…
snimu Aug 21, 2026
48b6478
fix(coding-agent): keep the working-status elapsed timer across sessi…
snimu Aug 21, 2026
108eff3
feat(coding-agent): session_before_refine extension hook (#1558)
snimu Aug 21, 2026
274cbb8
feat(coding-agent): surface refinement status and outcomes (#447)
snimu Aug 21, 2026
8c749fb
fix(ai): follow MCP protected-resource OAuth discovery (#1591)
sethkarten Aug 21, 2026
34b294f
fix(daemon): skip failed workers in heartbeat catalog (#1621)
snimu Aug 21, 2026
a3d86fb
fix(coding-agent): refresh MCP providers after add (#1629)
sethkarten Aug 21, 2026
8d7deea
chore(release): prepare v0.8.0 (#1618)
sethkarten Aug 21, 2026
e319a66
chore(ai): regenerate the model catalog from live provider catalogs (…
eliebak Aug 21, 2026
a44b07e
Highlight the whole ipython cell so multi-line strings keep color (#1…
snimu Aug 24, 2026
9e49b73
feat(coding-agent): default RLM max depth to 2 (#1493)
sethkarten Aug 24, 2026
a9b5d88
fix: preserve ACP quiescence and Chat reasoning lineage (#1612)
hallerite Aug 24, 2026
0686084
ENG-5528 (#1747)
alexzhang13 Aug 25, 2026
9bc0055
chore(ai): regenerate the model catalog from live provider catalogs (…
snimu Aug 25, 2026
b5ee2f8
fix(acp): preserve assistant message boundaries (#1781)
hallerite Aug 25, 2026
5146337
chore: prepare v0.8.1 release (#1794)
sethkarten Aug 26, 2026
0940833
Async bash() tool for the kernel runtime (#1684)
sethkarten Aug 26, 2026
61eb647
Minimal CPython REPL runtime (rlm.repl) (#1685)
sethkarten Aug 26, 2026
bc0fa76
test(coding-agent): cover root sibling agent messaging (#1698)
sethkarten Aug 26, 2026
0fa717d
chore(ai): regenerate the model catalog from live provider catalogs (…
snimu Aug 28, 2026
90343dc
fix(coding-agent): trust supervisor-approved session renames in worke…
snimu Aug 28, 2026
8c4ab8f
refactor(coding-agent): centralize the session-path predicate (#1846)
snimu Aug 28, 2026
378e32d
refactor(coding-agent): remove test-only config cache reset APIs (#1849)
snimu Aug 28, 2026
0f6a388
refactor(coding-agent): read messageCount instead of a shadow flag (#…
snimu Aug 28, 2026
d90062b
refactor(coding-agent): derive available connection models on read (#…
snimu Aug 28, 2026
5e0e288
Remove unused kernel seams (#1835)
snimu Aug 28, 2026
8090271
fix(runtime): ordered bash output completion sentinel (#1838)
snimu Aug 28, 2026
ceb4180
refactor(coding-agent): centralize agent-message admission in AgentSe…
snimu Aug 28, 2026
af14f06
fix(coding-agent): dispatcher-owned host-reply envelope (#1836)
snimu Aug 28, 2026
d60fab8
fix(coding-agent): repair corrupt REPL protocol frames (#1839)
snimu Aug 28, 2026
80bf72c
fix(coding-agent): avoid retrying delivered remote agent messages (#1…
snimu Aug 29, 2026
0560146
refactor(coding-agent): remove test-only parser and feature-hint seam…
snimu Aug 29, 2026
ee8fd69
fix(coding-agent): wait for worker recovery before session reuse (#1756)
snimu Aug 29, 2026
bab1242
fix(coding-agent): single-source the interactive queue state (#1842)
snimu Aug 29, 2026
c0334a1
fix(coding-agent): single projection for RLM child snapshots (#1845)
snimu Aug 29, 2026
dfffea2
fix(coding-agent): unify legacy RLM registry parsing (#1847)
snimu Aug 29, 2026
9db2722
refactor(coding-agent): remove the NODE_ENV=test telemetry branch (#1…
snimu Aug 29, 2026
18fe5d5
refactor(coding-agent): delete unreachable empty-selector auto-cancel…
snimu Aug 29, 2026
85c236d
refactor(coding-agent): derive scoped heartbeats at render time (#1857)
snimu Aug 29, 2026
dab03c0
refactor(coding-agent): wake RLM quiescence on activity changes inste…
snimu Aug 29, 2026
853041e
fix(coding-agent): abort every in-flight bash command with its own co…
snimu Aug 29, 2026
8ca5255
refactor(ai): delete the unused getOverflowPatterns export (#1850)
snimu Aug 29, 2026
bcf69db
refactor(coding-agent): remove the test-only daemon-lookup seam from …
snimu Aug 29, 2026
6322b7b
refactor(coding-agent): await in-flight bash completion during daemon…
snimu Aug 29, 2026
5b6c0e9
fix(coding-agent): enforce session ownership when joining an in-fligh…
snimu Aug 29, 2026
a903d4b
chore: vouch sirouk as an external contributor (#1899)
snimu Aug 30, 2026
c382f09
feat(coding-agent): render Mermaid diagrams inline in the terminal (#…
snimu Aug 30, 2026
c718bf3
fix(coding-agent): steer the model away from subprocess.run toward ba…
snimu Aug 31, 2026
cbc0f7d
fix(coding-agent): honest status and prompt eviction for empty sessio…
snimu Aug 31, 2026
9f5edc1
fix(coding-agent): surface the real spawn error when the daemon canno…
snimu Aug 31, 2026
9f71270
fix(ai): advance Anthropic cache marker across tool results (#1927)
sethkarten Sep 1, 2026
4e42fab
feat(coding-agent): shared agent-status classifier, honest worker vis…
snimu Sep 1, 2026
8d5722e
feat(coding-agent): event-driven supervisor agent roster serving list…
snimu Sep 1, 2026
1d2e91d
feat(coding-agent): roster subscription push consumed by the agents v…
snimu Sep 1, 2026
15ef456
fix(coding-agent): reject reconnect-loop requests on socket close ins…
snimu Sep 1, 2026
71c0108
feat(coding-agent): preview bash-skill commands as bash in collapsed …
snimu Sep 1, 2026
173d845
feat(coding-agent): direct session transport between TUI and worker (…
snimu Sep 1, 2026
74c8d39
fix(coding-agent): harden daemon startup and recovery ownership (#1929)
sethkarten Sep 1, 2026
1b5830f
fix(coding-agent): single-dump kernel snapshots (#1945)
snimu Sep 1, 2026
23e5515
fix(coding-agent): evict empty drafts when the last direct viewer det…
snimu Sep 1, 2026
6179a60
fix(coding-agent): suppress rlm_child_update emits with an unchanged …
snimu Sep 1, 2026
083c68d
fix(coding-agent): replace TUI process after update (#1631)
sethkarten Sep 1, 2026
85ac06e
fix(coding-agent): show the expand hint on sent agent-message summary…
snimu Sep 1, 2026
3d639f7
fix(coding-agent): make subagent deletion user-requested in the syste…
snimu Sep 1, 2026
48c69d4
revert(coding-agent): restore subagent cleanup guidance (#1955)
sethkarten Sep 1, 2026
0749e06
fix(coding-agent): scope the roster seed to registered workers' famil…
snimu Sep 1, 2026
3da8c5a
fix(coding-agent): don't block RLM subagent deletion on trace upload …
snimu Sep 1, 2026
c394506
chore: prepare v0.9.0 release (#1956)
snimu Sep 1, 2026
c32f272
fix(coding-agent): load the saved catalog when the agents view opens …
snimu Sep 1, 2026
81ae3cb
chore: prepare v0.9.1 release (#1961)
snimu Sep 1, 2026
e72da00
chore: require environment details in bug reports (#1965)
sethkarten Sep 2, 2026
408e749
ci: default Prime Agent tickets to Research (#1966)
sethkarten Sep 2, 2026
0ba0423
fix(coding-agent): stabilize daemon process identity (fixes #879) (#1…
sethkarten Sep 2, 2026
3f02aa5
fix(ai): bump impersonated Claude Code version to 2.1.257 for Fable 5…
snimu Sep 2, 2026
cd10724
fix(installer): support npm 12 remote dependency policy (#1992)
sethkarten Sep 2, 2026
7f21fa3
fix: register ACP MCP tools as native callable tools via cpython prox…
sethkarten Sep 3, 2026
7941b31
refactor(coding-agent): schedule agent-trace uploads through a disk-c…
snimu Sep 3, 2026
4f30152
fix: publish roster rows when the idle verdict's currency changes (#1…
snimu Sep 3, 2026
118c1d9
refactor(coding-agent): extract the append-only event-log substrate f…
snimu Sep 3, 2026
d72beaf
fix: heartbeat sessions are normal sessions — idle display and normal…
snimu Sep 3, 2026
1768ace
feat(coding-agent): ACP semantic-edges-v1 provenance producer (#1885)
snimu Sep 3, 2026
1c07eaa
feat(coding-agent): deliver the semantic-edge ledger through the agen…
snimu Sep 3, 2026
6165572
fix: count busy descendants in the agents-view subagents indicator (#…
snimu Sep 3, 2026
6950bc8
fix(coding-agent): settle late compaction slices and forward daemon s…
snimu Sep 3, 2026
d74a75f
feat: token and cost details on agents view rows (#2003)
snimu Sep 3, 2026
4dcfcde
Add durable shared task coordination
phytal Sep 4, 2026
b279072
Merge fork main into 0.9.1 coordination branch
phytal Sep 4, 2026
b1bb605
test(ai): align Cloudflare handoff model id
phytal Sep 4, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
The table of contents is too big for display.
Diff view
Diff view
  •  
  •  
  •  
56 changes: 50 additions & 6 deletions .github/DISCUSSION_TEMPLATE/bug-reports.yml
Original file line number Diff line number Diff line change
Expand Up @@ -51,16 +51,60 @@ body:
id: version
attributes:
label: Prime Agent version
description: Include the output of `prime-agent --version`, or the commit if running from source.
placeholder: "0.0.0 or commit SHA"
description: Include the output of `prime-agent --version`, or the commit SHA when running from source.
placeholder: "e.g. 0.9.1 or 81ae3cb"
validations:
required: true
- type: dropdown
id: install_method
attributes:
label: Installation method
description: How was this Prime Agent version installed?
options:
- Stable release installer
- Beta release installer
- npm package
- From source
- Other
validations:
required: true
- type: dropdown
id: os
attributes:
label: Operating system
options:
- macOS
- Linux
- Windows
- Windows Subsystem for Linux (WSL)
- Other
validations:
required: true
- type: input
id: os_version
attributes:
label: Operating system version
description: Include the exact release or build. For WSL, include both the distribution and Windows version.
placeholder: "e.g. macOS 15.6, Ubuntu 24.04, or Windows 11 24H2"
validations:
required: true
- type: dropdown
id: architecture
attributes:
label: CPU architecture
description: Use `uname -m`, or `$env:PROCESSOR_ARCHITECTURE` in PowerShell, if unsure.
options:
- arm64 / aarch64
- x86_64 / amd64
- Other
validations:
required: true
- type: input
id: environment
id: shell_terminal
attributes:
label: Environment
description: Include your operating system, terminal, and any other relevant environment details.
placeholder: "macOS 15, Terminal.app"
label: Shell and terminal
description: Include both the shell and terminal application where the problem occurred.
placeholder: "e.g. zsh 5.9 in Terminal.app or PowerShell 7.5 in Windows Terminal"
validations:
required: true
- type: textarea
Expand Down
45 changes: 43 additions & 2 deletions .github/ISSUE_TEMPLATE/bug-report.yml
Original file line number Diff line number Diff line change
Expand Up @@ -43,8 +43,21 @@ body:
id: version
attributes:
label: Prime Agent version
description: Output of `prime-agent --version`.
placeholder: "e.g. 0.1.0"
description: Output of `prime-agent --version`, or the commit SHA when running from source.
placeholder: "e.g. 0.9.1 or 81ae3cb"
validations:
required: true
- type: dropdown
id: install_method
attributes:
label: Installation method
description: How was this Prime Agent version installed?
options:
- Stable release installer
- Beta release installer
- npm package
- From source
- Other
validations:
required: true
- type: dropdown
Expand All @@ -55,9 +68,37 @@ body:
- macOS
- Linux
- Windows
- Windows Subsystem for Linux (WSL)
- Other
validations:
required: true
- type: input
id: os_version
attributes:
label: Operating system version
description: Include the exact release or build. For WSL, include both the distribution and Windows version.
placeholder: "e.g. macOS 15.6, Ubuntu 24.04, or Windows 11 24H2"
validations:
required: true
- type: dropdown
id: architecture
attributes:
label: CPU architecture
description: Use `uname -m`, or `$env:PROCESSOR_ARCHITECTURE` in PowerShell, if unsure.
options:
- arm64 / aarch64
- x86_64 / amd64
- Other
validations:
required: true
- type: input
id: shell_terminal
attributes:
label: Shell and terminal
description: Include both the shell and terminal application where the problem occurred.
placeholder: "e.g. zsh 5.9 in Terminal.app or PowerShell 7.5 in Windows Terminal"
validations:
required: true
- type: textarea
id: context
attributes:
Expand Down
4 changes: 3 additions & 1 deletion .github/PULL_REQUEST_TEMPLATE.md
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,9 @@ https://github.com/PrimeIntellect-ai/prime-agent/discussions

## Context

<!-- Link the accepted Issue or Discussion and explain why this change is needed. -->
<!-- Link the accepted Issue or Discussion and explain why this change is needed.
Prime Agent Linear tickets should normally use the Research team and the Prime Agent: Long-Horizon research project.
If this change has no ticket, add `No-Ticket: <short reason>` below. -->

## Changes

Expand Down
1 change: 1 addition & 0 deletions .github/VOUCHED.td
Original file line number Diff line number Diff line change
@@ -1,2 +1,3 @@
# Trusted external contributors, one GitHub username per line without @.
# Maintainers, bots, and collaborators with write access are allowed automatically.
sirouk
35 changes: 35 additions & 0 deletions .github/workflows/build-binaries.yml
Original file line number Diff line number Diff line change
Expand Up @@ -172,6 +172,41 @@ jobs:
--base-url "$PRIME_AGENT_DOWNLOAD_BASE_URL" \
--out-dir packages/coding-agent/release/beta

- name: Smoke test installer with npm 12
run: |
npm install --global npm@12.0.2
npm --version | grep -Eq '^12\.'

SMOKE_VERSION=0.0.0-installer-smoke
SMOKE_BASE_URL=http://127.0.0.1:18188
SMOKE_OUT=packages/coding-agent/release/npm12-smoke
SMOKE_ROOT=$(mktemp -d)

npm run release:pack -- \
--channel stable \
--version "$SMOKE_VERSION" \
--base-url "$SMOKE_BASE_URL" \
--out-dir "$SMOKE_OUT"

mkdir -p "$SMOKE_ROOT/releases/v$SMOKE_VERSION"
cp "$SMOKE_OUT/artifacts/"* "$SMOKE_ROOT/releases/v$SMOKE_VERSION/"
sed \
-e "s|__PRIME_AGENT_DOWNLOAD_BASE_URL__|$SMOKE_BASE_URL|g" \
-e 's|__PRIME_AGENT_DEFAULT_RELEASE_CHANNEL__|stable|g' \
install.sh > /tmp/prime-agent-npm12-install.sh

python3 -m http.server 18188 --bind 127.0.0.1 --directory "$SMOKE_ROOT" >/tmp/prime-agent-npm12-http.log 2>&1 &
server_pid=$!
trap 'kill "$server_pid" 2>/dev/null || true; rm -rf "$SMOKE_ROOT" "$SMOKE_OUT"' EXIT

curl -fsS --retry 5 --retry-connrefused "$SMOKE_BASE_URL/releases/v$SMOKE_VERSION/SHA256SUMS"
export NPM_CONFIG_PREFIX="$SMOKE_ROOT/npm-prefix"
PATH="$NPM_CONFIG_PREFIX/bin:$PATH" \
PRIME_AGENT_BOOTSTRAP_KERNEL_ON_INSTALL=0 \
PRIME_AGENT_INSTALLER_PLAIN=1 \
sh /tmp/prime-agent-npm12-install.sh "$SMOKE_VERSION"
test -x "$NPM_CONFIG_PREFIX/bin/prime-agent"

- name: Upload production artifacts
if: env.PUBLISH_PRODUCTION == 'true'
uses: actions/upload-artifact@043fb46d1a93c77aae656e7c1c64a875d1fc6a0a # v7
Expand Down
76 changes: 76 additions & 0 deletions .github/workflows/changelog-fragment.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,76 @@
name: Changelog fragment

on:
pull_request:
types: [opened, synchronize, reopened, labeled, unlabeled]
branches: [main]

permissions:
pull-requests: read

jobs:
changelog-fragment:
name: Check changelog fragment
runs-on: ubuntu-latest
if: github.event.pull_request.user.type != 'Bot'
steps:
- name: Require a changelog fragment for changed packages or an explicit opt-out
uses: actions/github-script@60a0d83039c74a4aee543508d2ffcb1c3799cdea # v7.0.1
with:
script: |
const pr = context.payload.pull_request;
if (pr.labels.some((label) => label.name === "no-changelog")) {
core.info("Label no-changelog is set; skipping changelog check.");
return;
}
// listFiles caps at 3000 files; beyond that the check cannot see every change.
if (pr.changed_files > 3000) {
core.setFailed("PR changes more than 3000 files; split it or apply the no-changelog label.");
return;
}
const files = await github.paginate(github.rest.pulls.listFiles, {
owner: context.repo.owner,
repo: context.repo.repo,
pull_number: pr.number,
per_page: 100,
});
const packages = ["agent", "ai", "coding-agent", "tui"];
const failing = [];
for (const pkg of packages) {
const srcPrefix = `packages/${pkg}/src/`;
const srcChanged = files.some(
(f) =>
f.filename.startsWith(srcPrefix) ||
(f.previous_filename !== undefined && f.previous_filename.startsWith(srcPrefix)),
);
if (!srcChanged) {
continue;
}
// Fragments must be direct children of .changes/ — release.mjs ignores nested paths.
const fragmentRe = new RegExp(`^packages/${pkg}/\\.changes/[^/]+\\.md$`);
const hasFragment = files.some(
(f) =>
f.status === "added" &&
f.additions > 0 &&
fragmentRe.test(f.filename) &&
!f.filename.endsWith("/README.md"),
);
if (!hasFragment) {
failing.push(pkg);
}
}
if (failing.length === 0) {
core.info("Changelog fragments present for all changed packages.");
return;
}
core.setFailed(
failing
.map(
(pkg) =>
`packages/${pkg}/src changed but no changelog entry found. ` +
`Add packages/${pkg}/.changes/<branch-slug>.md containing e.g. ` +
"`- Fixed the frobnicator dropping input on resize.`, " +
"or apply the no-changelog label.",
)
.join("\n"),
);
4 changes: 4 additions & 0 deletions .github/workflows/ci.yml
Original file line number Diff line number Diff line change
Expand Up @@ -109,6 +109,10 @@ jobs:
package: packages/coding-agent
command: npm run test:kernel
install_uv: true
- name: runtime python
package: prime-agent-runtime
command: uv run python -m unittest discover -s test
install_uv: true
steps:
- name: Checkout
uses: actions/checkout@9c091bb21b7c1c1d1991bb908d89e4e9dddfe3e0 # v7.0.0
Expand Down
42 changes: 42 additions & 0 deletions .github/workflows/linear-ticket.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,42 @@
name: Linear ticket

on:
pull_request:
types: [opened, edited, reopened, synchronize]
branches: [main]

permissions:
pull-requests: read

jobs:
linear-ticket:
name: Check Linear ticket link
runs-on: ubuntu-latest
if: github.event.pull_request.user.type != 'Bot'
steps:
- name: Require a Linear ticket reference or an explicit opt-out
uses: actions/github-script@60a0d83039c74a4aee543508d2ffcb1c3799cdea # v7.0.1
with:
script: |
const pr = context.payload.pull_request;
const text = `${pr.title}\n${pr.body ?? ""}\n${pr.head.ref}`;
const ticket = /\bres-\d+\b|linear\.app\/[\w-]+\/issue\/res-\d+/i;
const optOut = /^\s*No-Ticket:\s*\S.*$/im;
if (ticket.test(text)) {
core.info("Linear ticket reference found.");
return;
}
const match = (pr.body ?? "").match(optOut);
if (match) {
core.info(`No-ticket opt-out present: ${match[0].trim()}`);
return;
}
core.setFailed(
[
"No Linear ticket is linked in this pull request.",
"Prime Agent tickets should normally use the Research team and the Prime Agent: Long-Horizon research project.",
"Add the ticket ID (e.g. RES-1234) or a linear.app issue link to the PR title or description,",
"or use a branch named after the ticket (e.g. res-1234).",
'If this change genuinely has no ticket, add a line to the PR description: "No-Ticket: <short reason>".',
].join(" "),
);
25 changes: 10 additions & 15 deletions AGENTS.md
Original file line number Diff line number Diff line change
Expand Up @@ -104,28 +104,23 @@ You, yourself, are often running into a tmux session, so be careful when killing

## Changelog

Location: `packages/*/CHANGELOG.md` (each package has its own)
Location: `packages/<pkg>/.changes/<slug>.md` (one fragment file per PR per touched package)

### Format

A flat list of plain bullets under `## [Unreleased]`. No `### Added` / `### Changed` / `### Fixed` / `### Removed` subsections — just one bullet per change, written as a short sentence starting with a past-tense verb (Added, Changed, Fixed, Removed). Keep each bullet to one line; describe the user-visible change, not the implementation.
Do NOT edit `packages/*/CHANGELOG.md` directly. Instead, add a fragment file `packages/<pkg>/.changes/<slug>.md` (slug = kebab-case, branch- or ticket-derived, e.g. `eng-1234-fix-resize.md`) containing exactly the bullet line(s) for the change. Bullets are plain `- ...` lines with no `### Added` / `### Changed` / `### Fixed` / `### Removed` subsections — one bullet per change, written as a short sentence starting with a past-tense verb (Added, Changed, Fixed, Removed). Keep each bullet to one line; describe the user-visible change, not the implementation. The release script folds fragments into the release section of CHANGELOG.md and deletes them.

Example of a well-formed `[Unreleased]` section:
Example fragment (`packages/coding-agent/.changes/eng-1234-effort-command.md`):

```markdown
## [Unreleased]

- Added `/effort` to set the reasoning level, with autocomplete for the levels the current model supports.
- Changed `prime-agent` to open a new chat by default instead of resuming the previous session.
- Fixed onboarding showing no models after entering a provider key.
- Removed the interactive `!` / `!!` bash shortcuts; use IPython instead.
```

### Rules

- Read the full `[Unreleased]` section first so you don't duplicate an existing bullet
- New entries ALWAYS go under `## [Unreleased]`
- NEVER modify already-released version sections (e.g., `## [0.2.1]`) — each is immutable once released
- One fragment file per PR per touched package; a fragment may contain multiple bullets
- NEVER modify already-released version sections in CHANGELOG.md (e.g., `## [0.2.1]`) — each is immutable once released
- Purely internal changes may opt out via the `no-changelog` PR label

### Attribution

Expand Down Expand Up @@ -183,7 +178,7 @@ Create provider file exporting:
### 7. Documentation

- `packages/ai/README.md`: Add to providers table, document options/auth, add env vars
- `packages/ai/CHANGELOG.md`: Add entry under `## [Unreleased]`
- `packages/ai/.changes/<slug>.md`: Add a changelog fragment (see Changelog above)

## Releasing

Expand All @@ -196,15 +191,15 @@ Create provider file exporting:

### Steps

1. **Update CHANGELOGs**: Ensure all changes since last release are documented in the `[Unreleased]` section of each affected package's CHANGELOG.md
1. **Check fragments**: Ensure all changes since last release have fragment files in `packages/<pkg>/.changes/`

2. **Run release script**:
```bash
npm run release:patch # Fixes and additions
npm run release:minor # API breaking changes
```

The script handles: version bump, CHANGELOG finalization, commit, tag, publish, and adding new `[Unreleased]` sections.
The script handles: version bump, folding `.changes/` fragments into the release section, commit, tag, and publish.

## **CRITICAL** Git Rules for Parallel Agents **CRITICAL**

Expand Down Expand Up @@ -239,7 +234,7 @@ git status

# 2. Add ONLY your specific files
git add packages/ai/src/providers/transform-messages.ts
git add packages/ai/CHANGELOG.md
git add packages/ai/.changes/eng-1234-fix-resize.md

# 3. Commit
git commit -m "fix(ai): description"
Expand Down
Loading
Loading