Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
78 commits
Select commit Hold shift + click to select a range
add5d40
docs: establish `codex-toolloop` monorepo, including core packages, C…
BjornMelin Jan 20, 2026
f55c9e9
docs: add new README.md and LICENSE
BjornMelin Jan 20, 2026
b534d54
feat: establish monorepo structure with new packages, CLI, and AI SDK…
BjornMelin Jan 20, 2026
b393dda
docs: update ADRs for Node.js runtime, Vitest standardization, and dy…
BjornMelin Jan 21, 2026
25d6a2a
docs: update PRD, architecture, and getting started documentation for…
BjornMelin Jan 21, 2026
eb5fea7
chore: remove Codex SDK and non-interactive mode documentation
BjornMelin Jan 21, 2026
5bc68ac
docs: update specifications for Codex ToolLoop monorepo, MCP platform…
BjornMelin Jan 21, 2026
16f941a
chore: update package manager to pnpm and restructure workspace
BjornMelin Jan 21, 2026
6274bec
chore(tsconfig): format include array for better readability
BjornMelin Jan 22, 2026
b8519bb
chore: initialize CI, CodeQL, and Scorecard workflows; add Dependabot…
BjornMelin Jan 22, 2026
b10413a
chore: update zod dependency version to allow minor updates
BjornMelin Jan 22, 2026
8e8e980
chore: add reference to AGENTS.md in CLAUDE.md
BjornMelin Jan 22, 2026
b193942
chore: initialize package.json files for cli, core, codex, mcp, testk…
BjornMelin Jan 22, 2026
3e179eb
chore: update documentation and configuration examples for clarity an…
BjornMelin Jan 22, 2026
34cc5a0
feat: Introduce modular architecture with new `codex`, `mcp`, `workfl…
BjornMelin Jan 22, 2026
e9b52dd
feat(cli): add environment diagnostic checks for Node.js, pnpm, and c…
BjornMelin Jan 22, 2026
34341af
chore(cli): update package.json to include devDependencies for tsx
BjornMelin Jan 22, 2026
a841066
feat(docs): add Turborepo configuration guidelines and specifications
BjornMelin Jan 22, 2026
e24da21
chore: implement Turborepo configuration and update scripts for monorepo
BjornMelin Jan 22, 2026
9a703d7
feat: introduce MCP configuration loading, parsing, and discovery wit…
BjornMelin Jan 22, 2026
96b210c
feat(docs): update Turborepo monorepo configuration with globalDepend…
BjornMelin Jan 22, 2026
02aee87
fix(deps): update @openai/codex-sdk to version 0.88.0
BjornMelin Jan 22, 2026
b332175
fix(deps): update @openai/codex-sdk to version 0.88.0 and @ai-sdk/mcp…
BjornMelin Jan 22, 2026
41f0357
fix(codex): honor sdk options and normalize file changes
BjornMelin Jan 22, 2026
ec6b9e1
fix(mcp): add newline at end of package.json
BjornMelin Jan 22, 2026
868043f
feat(codex): introduce backend interface and run options
BjornMelin Jan 22, 2026
b4c0096
feat(codex): add event types and exec backend for Codex interactions
BjornMelin Jan 22, 2026
62fd76b
chore(turbo): update globalDependencies and clean up outputs in tasks
BjornMelin Jan 22, 2026
3b2b872
test: add unit tests for MCP client manager, config loading, and tool…
BjornMelin Jan 22, 2026
39ce690
chore(ci): standardize YAML formatting and update test command
BjornMelin Jan 22, 2026
1b88955
chore(dependencies): update @ai-sdk/mcp to version 1.0.11
BjornMelin Jan 22, 2026
d2f4fbe
feat(mcp): enhance event handling and improve test coverage with mock…
BjornMelin Jan 22, 2026
b66031c
fix: resolve PR review comments
BjornMelin Jan 22, 2026
fe02f95
chore(tooling): update lint config and docs
BjornMelin Jan 22, 2026
36ed6f4
chore(deps): bump ai and zod
BjornMelin Jan 22, 2026
5cf855a
chore(docs): improve clarity in CLI and memory context specifications
BjornMelin Jan 22, 2026
197fcd3
chore(docs): enhance memory context and optional UI specifications wi…
BjornMelin Jan 22, 2026
898fd98
chore(docs): update specifications for CLI and repo layout consistency
BjornMelin Jan 22, 2026
59b7b1c
fix: address pr review comments
BjornMelin Jan 22, 2026
fbb3374
chore(docs): update PRD and optional Next.js UI specifications for cl…
BjornMelin Jan 22, 2026
27d7739
chore: remove empty code change entries
BjornMelin Jan 22, 2026
784736b
chore(docs): enhance SDK backend option fidelity documentation and ad…
BjornMelin Jan 22, 2026
eac53eb
chore(docs): update Codex app-server schema documentation and integra…
BjornMelin Jan 23, 2026
088b3b4
feat(docs): add specifications for Codex collaboration modes, skills,…
BjornMelin Jan 23, 2026
9cfdb33
feat(app-server): implement event mapper and UI stream for Codex
BjornMelin Jan 23, 2026
bda8325
feat(app-server): add initial implementation of app-server protocol a…
BjornMelin Jan 23, 2026
4f931cd
feat(docs): enhance backend specifications with web search and networ…
BjornMelin Jan 23, 2026
ebcff4c
feat(app-server): implement Codex app-server protocol and JSON-RPC va…
BjornMelin Jan 23, 2026
d1b3daa
feat(types): update URL validation in transport schemas to use z.url()
BjornMelin Jan 23, 2026
cefcd4e
chore(.gitignore): add docs/research/ to ignore list
BjornMelin Jan 23, 2026
723086d
docs: fix specs documentation issues
BjornMelin Jan 23, 2026
84befbe
chore(docs): update status of multiple specifications to completed
BjornMelin Jan 23, 2026
3fef601
feat(tests): add tests for approval and user input server request events
BjornMelin Jan 23, 2026
2e2b904
fix(codex): prevent lastAgentText bleed across interleaved messages
BjornMelin Jan 23, 2026
8764455
docs: add transport-layer security, streaming guidance, and fix punct…
BjornMelin Jan 23, 2026
e424abd
docs(AGENTS): add pnpm-workspace.yaml#allowBuilds policy and approval…
BjornMelin Jan 23, 2026
52dda15
chore: update .nvmrc version, enhance README, and improve error handl…
BjornMelin Jan 23, 2026
1540a8b
feat(protocol): add v2 types for thread and turn management
BjornMelin Jan 23, 2026
e3b6791
chore: add .agents/ to .gitignore
BjornMelin Jan 23, 2026
5dec603
chore: update repo configuration
BjornMelin Jan 24, 2026
3ed3f9e
docs(AGENTS): revise project layout and commands sections for clarity
BjornMelin Jan 24, 2026
a472d36
fix(mcp): prevent empty allowlist intersection widening
BjornMelin Jan 25, 2026
f4bb874
fix(mcp): reject empty allowTools in config
BjornMelin Jan 25, 2026
1ff9965
test(mcp): cover allowlist semantics and guardrails
BjornMelin Jan 25, 2026
76a8cce
docs(specs): clarify allowTools semantics
BjornMelin Jan 25, 2026
59ecbfd
docs(adr): record allowlist intersection hardening
BjornMelin Jan 25, 2026
cf534e1
docs(specs): fix turborepo spec links
BjornMelin Jan 25, 2026
916c573
fix: address pr review comments
BjornMelin Jan 25, 2026
65233e4
docs: update specs and ADRs
BjornMelin Jan 25, 2026
7c448e6
docs: rename app-server backend
BjornMelin Jan 25, 2026
4448f93
fix(ci): split workflow to required checks
BjornMelin Jan 25, 2026
c9c11da
fix(ci): align CodeQL check name
BjornMelin Jan 25, 2026
805d692
docs: resolve PR review comments (3 threads)
BjornMelin Jan 25, 2026
7fda0b0
ci: pin pnpm version to 10.28.1 in all jobs
BjornMelin Jan 25, 2026
835733b
chore(ci): deduplicate CI setup steps via composite action
BjornMelin Jan 25, 2026
2dfa23f
fix(ci): add required checkout step before composite action
BjornMelin Jan 25, 2026
e73ea81
feat(ci): add job dependencies for fail-fast build job
BjornMelin Jan 25, 2026
54dc715
feat(ci): add explicit permissions and concurrency control
BjornMelin Jan 25, 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
  •  
  •  
  •  
1 change: 0 additions & 1 deletion .editorconfig
Original file line number Diff line number Diff line change
Expand Up @@ -7,4 +7,3 @@ insert_final_newline = true
indent_style = space
indent_size = 2
trim_trailing_whitespace = true

8 changes: 8 additions & 0 deletions .env.example
Original file line number Diff line number Diff line change
Expand Up @@ -5,3 +5,11 @@
# This repo also falls back to `OPENAI_API_KEY` for convenience.
CODEX_API_KEY=
OPENAI_API_KEY=

# MCP config (SPEC 010)
# Either point to a JSON config file, or provide an inline JSON string.
#
# CODEX_TOOLLOOP_MCP_CONFIG_JSON='{"servers":{...},"bundles":{...}}'
# CODEX_TOOLLOOP_MCP_CONFIG_PATH=./codex-toolloop.mcp.json
CODEX_TOOLLOOP_MCP_CONFIG_JSON=
Comment thread
BjornMelin marked this conversation as resolved.
CODEX_TOOLLOOP_MCP_CONFIG_PATH=
25 changes: 25 additions & 0 deletions .github/actions/ci-setup/action.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,25 @@
name: CI Setup
description: "Shared CI setup: pnpm, node, install (requires prior checkout)"

inputs:
node-version-file:
description: "Path to node version file (default: package.json)"
required: false
default: "package.json"
pnpm-version:
description: "pnpm version to install (default: 10.28.1)"
required: false
default: "10.28.1"

runs:
using: composite
steps:
- uses: pnpm/action-setup@v3
with:
version: ${{ inputs.pnpm-version }}
- uses: actions/setup-node@v4
with:
node-version-file: ${{ inputs.node-version-file }}
cache: pnpm
- run: pnpm install --frozen-lockfile
shell: bash
6 changes: 6 additions & 0 deletions .github/codeql/codeql-config.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,6 @@
name: "CodeQL Config"

disable-default-queries: false

queries:
- uses: security-extended
30 changes: 30 additions & 0 deletions .github/dependabot.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,30 @@
version: 2
updates:
- package-ecosystem: "npm"
directory: "/"
schedule:
interval: "weekly"
day: "friday"
time: "04:00"
groups:
dev-dependencies:
patterns:
- "*"
dependency-type: "development"
update-types:
- "minor"
- "patch"
production-dependencies:
patterns:
- "*"
dependency-type: "production"
update-types:
- "minor"
- "patch"
commit-message:
prefix: "chore(deps)"
prefix-development: "chore(deps-dev)"
ignore:
- dependency-name: "@types/node"
update-types: ["version-update:semver-major"]
open-pull-requests-limit: 10
90 changes: 90 additions & 0 deletions .github/workflows/ci.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,90 @@
name: CI

"on":
push:
branches: ["main"]
pull_request:
branches: ["main"]

Comment thread
coderabbitai[bot] marked this conversation as resolved.
permissions:
contents: read

concurrency:
group: ci-${{ github.workflow }}-${{ github.ref }}
cancel-in-progress: ${{ github.event_name == 'pull_request' }}

jobs:
lint:
name: Lint (Biome)
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
with:
fetch-depth: 0
- uses: ./.github/actions/ci-setup
- name: Run Turbo lint
env:
TURBO_TEAM: ${{ vars.TURBO_TEAM }}
TURBO_TOKEN: ${{ secrets.TURBO_TOKEN }}
run: |
if [ "${{ github.event_name }}" = "pull_request" ]; then
pnpm -s turbo run lint --filter=...[origin/${{ github.base_ref }}]
else
pnpm -s turbo run lint
fi
typecheck:
name: Typecheck
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
with:
fetch-depth: 0
- uses: ./.github/actions/ci-setup
- name: Run Turbo typecheck
env:
TURBO_TEAM: ${{ vars.TURBO_TEAM }}
TURBO_TOKEN: ${{ secrets.TURBO_TOKEN }}
run: |
if [ "${{ github.event_name }}" = "pull_request" ]; then
pnpm -s turbo run typecheck --filter=...[origin/${{ github.base_ref }}]
else
pnpm -s turbo run typecheck
fi
test:
name: Test
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
with:
fetch-depth: 0
- uses: ./.github/actions/ci-setup
- name: Run Turbo test
env:
TURBO_TEAM: ${{ vars.TURBO_TEAM }}
TURBO_TOKEN: ${{ secrets.TURBO_TOKEN }}
run: |
if [ "${{ github.event_name }}" = "pull_request" ]; then
pnpm -s turbo run test --filter=...[origin/${{ github.base_ref }}]
else
pnpm -s turbo run test
fi
build:
name: Build
needs: ["lint", "typecheck"]
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
with:
fetch-depth: 0
- uses: ./.github/actions/ci-setup
- name: Run Turbo build + codex:gen:check
env:
TURBO_TEAM: ${{ vars.TURBO_TEAM }}
TURBO_TOKEN: ${{ secrets.TURBO_TOKEN }}
run: |
if [ "${{ github.event_name }}" = "pull_request" ]; then
pnpm -s turbo run build codex:gen:check \
--filter=...[origin/${{ github.base_ref }}]
else
pnpm -s turbo run build codex:gen:check
fi
Comment thread
coderabbitai[bot] marked this conversation as resolved.
42 changes: 42 additions & 0 deletions .github/workflows/codeql.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,42 @@
name: "CodeQL"

on:
push:
branches: ["main"]
pull_request:
branches: ["main"]
schedule:
- cron: '30 1 * * 0'

jobs:
analyze:
name: CodeQL analysis
runs-on: ubuntu-latest
permissions:
actions: read
contents: read
security-events: write

strategy:
fail-fast: false
matrix:
language: ['javascript-typescript']

steps:
- name: Checkout repository
uses: actions/checkout@v4

- name: Initialize CodeQL
uses: github/codeql-action/init@v3
with:
languages: ${{ matrix.language }}
queries: security-extended
config-file: ./.github/codeql/codeql-config.yml

- name: Autobuild
uses: github/codeql-action/autobuild@v3

- name: Perform CodeQL Analysis
uses: github/codeql-action/analyze@v3
with:
category: "/language:${{matrix.language}}"
68 changes: 68 additions & 0 deletions .github/workflows/scorecard.yml
Original file line number Diff line number Diff line change
@@ -0,0 +1,68 @@
name: Scorecard supply-chain security
"on":
# For Branch-Protection check. Only the default branch is supported. See
# https://github.com/ossf/scorecard/blob/main/docs/checks.md#branch-protection
branch_protection_rule:
# To guarantee Maintained check is occasionally updated. See
# https://github.com/ossf/scorecard/blob/main/docs/checks.md#maintained
schedule:
- cron: '20 7 * * 2'
push:
branches: ["main"]

# Declare default permissions as read only.
permissions: read-all

jobs:
analysis:
name: Scorecard analysis
runs-on: ubuntu-latest
permissions:
# Needed to upload the results to code-scanning dashboard.
security-events: write
# Needed to publish results and get a badge (see publish_results below).
id-token: write
# Needed for checkout.
contents: read
actions: read

steps:
- name: "Checkout code"
uses: actions/checkout@v4
with:
persist-credentials: false

- name: "Run analysis"
uses: ossf/scorecard-action@v2.4.0
with:
results_file: results.sarif
results_format: sarif
# (Optional) "write" PAT token. Uncomment the `repo_token` line below if:
# - you want to enable the Branch-Protection check on a *public* repository.
# - you are installing Scorecards on a *private* repository.
# To create the PAT, follow the steps in https://github.com/ossf/scorecard-action#authentication-with-pat.
# repo_token: ${{ secrets.SCORECARD_TOKEN }}

# Public repositories:
# - Publish results to OpenSSF REST API for easy access by consumers
# - Allows the repository to include the Scorecard badge.
# - See https://github.com/ossf/scorecard-action#publishing-results.
# For private repositories:
# - `publish_results` will always be set to `false`, regardless
# of the value entered here.
publish_results: true

# Upload the results as artifacts (optional). Commenting out will disable uploads of run results in SARIF
# format to the repository Actions tab.
- name: "Upload artifact"
uses: actions/upload-artifact@v4
with:
name: SARIF file
path: results.sarif
retention-days: 5

# Upload the results to GitHub's code scanning dashboard.
- name: "Upload to code-scanning"
uses: github/codeql-action/upload-sarif@v3
with:
sarif_file: results.sarif
12 changes: 7 additions & 5 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -19,12 +19,13 @@ pnpm-debug.log*
.env.*
!.env.example

# Bun
.bun/
bun.lockb

# Local Codex workspace data
.codex/
docs/research/

# Generated Codex JSON schema bundles (reproducible artifacts)
tools/codex-schemas/
tools/.trash/

# Tooling caches
.eslintcache
Expand All @@ -44,4 +45,5 @@ opensrc/
.claude/
.cursor/
.agent/

.agents/
Comment thread
BjornMelin marked this conversation as resolved.
.firecrawl/
1 change: 1 addition & 0 deletions .nvmrc
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
24.11
Loading
Loading