Project Info
Inspiration
Consulting and agency teams operate on a fragile assumption: that scope stays where the contract says it should. In practice, scope creep doesn't announce itself in a meeting, it slips in through a pull request, an "extra" feature added mid-sprint that nobody flags until it's already built and unbillable. Every existing scope-monitoring tool watches conversations, tasks, and emails. None of them watch the one place the actual, billable work materializes: the code itself. That gap is ScopeLint.
What it does
ScopeLint is a GitHub Action and CLI that checks every pull request against a project's statement of work, automatically, the same way tests and linters already run. Commit the contract as scope.md, and GPT-5.6 classifies each functional area of a pull request as in scope, out of scope, or gray area, citing the exact clause it matched. Out-of-scope work gets a client-ready change order draft attached on the spot. A running scope ledger tracks cumulative drift and estimated unbilled hours across the life of a project. A bundled replay mode with canned fixtures lets anyone try it with zero API key.
How we built it
Built solo, end to end, with Codex, staged deliberately across six phases: the offline CLI skeleton and replay mode, live GPT-5.6 classification with structured JSON output, GitHub Actions integration and PR-comment posting, the scope ledger, tests and documentation, and finally a full demo project, an Express loyalty API with a real statement of work and three staged pull requests, used for this submission's live evidence. The classifier runs on gpt-5.6-terra, chosen for its balance of structured reasoning and cost on a per-pull-request task.
Challenges we ran into
Real infrastructure friction, not algorithm design, ate most of the time: git authentication with a personal access token that needed the workflow scope before GitHub would accept a change to .github/workflows/, a Codex session that reported creating a file it hadn't actually written to disk (caught only when a live pull request check failed with a missing-key error), and pacing Codex's effort level up or down per stage to make $100 in credits last across all six build phases plus a full second demo repository.
Accomplishments we're proud of
A working, live demo where every claim is verifiable, not staged screenshots. The three pull requests in the demo repository actually run ScopeLint through GitHub Actions, call GPT-5.6 live, and post real verdicts a judge can click into and inspect themselves, including the model correctly refusing to cite a contract clause when the scope document didn't actually contain one, rather than hallucinating a match. Shipping a full CLI, GitHub Action, ledger system, test suite, and a second demo repository with staged scenarios, solo, inside a single day's build window.
What we learned
That most of the risk in a build like this isn't the AI reasoning, it's the plumbing around it. GitHub Actions rejecting a workflow file over a missing token scope, git authentication breaking silently, an agent reporting success on a file it hadn't actually written, these cost more time than designing the classification prompt itself. We also learned to pace an AI coding agent's effort level deliberately: high reasoning for structurally complex stages like the GitHub Action and the demo repository, lower effort for templated work like documentation and tests, to make a fixed credit budget stretch across a full six-stage build.
What's next
A hosted dashboard aggregating the scope ledger across every repo a consulting team manages, so a delivery lead sees drift trends across an entire client portfolio, not just one project. Direct integrations so an approved change order pushes straight into Jira or a billing tool instead of sitting in a pull request comment. Support for multiple scope documents per repo, for teams running several concurrent workstreams against one codebase.

ScopeLint
ScopeLint lints code changes against the contract. It compares a pull-request diff with the repository's scope.md statement of work, classifies each functional area as in scope, out of scope, or a gray area, and drafts a client-ready change order when work falls outside the agreement.
The problem
Scope creep quietly erodes project margins: teams do useful work that was never priced, while clients lose a clear record of what changed. ScopeLint makes the contract part of pull-request review, so questionable work is visible before it is merged.
Quickstart: replay mode (no API key)
git clone <owner>/scopelint
cd scopelint
npm install
npx scopelint init
npx scopelint check --diff-file fixtures/diffs/pr2-admin-dashboard.diff --replay
Replay mode reads the canned response paired with the diff filename, so it is useful for demos and CI-free evaluation. The final command prints an out-of-scope verdict and a draft change order without contacting the OpenAI API.
Live mode setup
Create a local .env file (it is ignored by Git) with your API key:
OPENAI_API_KEY=your_key_here
Then run a live check:
npx scopelint check --diff-file fixtures/diffs/pr2-admin-dashboard.diff
ScopeLint uses gpt-5.6-terra by default. Pass --model <id> to choose a different compatible model.
To run ScopeLint automatically for pull requests, grant the workflow permission to update pull-request comments:
name: ScopeLint
on: pull_request
permissions:
pull-requests: write
contents: read
jobs:
scopelint:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- uses: <owner>/scopelint@main
env:
OPENAI_API_KEY: ${{ secrets.OPENAI_API_KEY }}
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
The action fetches the pull-request diff, posts one marked ScopeLint comment, and updates that same comment on later runs. Use its scope-path, fail-on, and model inputs as needed.
Demo repository walkthrough
scopelint-demo-acme is the companion Express API project. Its staged pull requests demonstrate an in-scope points-accrual feature, an out-of-scope admin analytics endpoint, and a mixed accrual/payment-adapter change. The exported diffs and replay responses live in this repository under fixtures/.
The demo project is available beside this repository at ../scopelint-demo-acme, with these branches ready to open as pull requests:
feat/points-accrual-enginefeat/admin-analytics-dashboardfix/accrual-rounding-payment-adapter
How it works
flowchart LR
A[scope.md contract] --> C[ScopeLint classifier]
B[Pull request diff] --> C
C --> D[Terminal verdict]
C --> E[Pull request comment]
C --> F[Optional scope ledger]
Built with Codex and GPT-5.6
ScopeLint was built end-to-end in a single primary Codex session, staged deliberately across six phases: project skeleton and offline replay mode, live GPT-5.6 classification, GitHub Actions integration, the scope ledger, tests and documentation, and finally the Acme demo project used in this submission's live pull requests. A short second session generated and staged the demo repository's branches.
Codex accelerated the build most visibly in three places: scaffolding the composite
GitHub Action (action.yml) and its PR-comment update logic, generating the structured
JSON schema validation and retry handling for the classifier, and producing the three
matched diff/canned-response fixture pairs used in ScopeLint's zero-API-key replay mode.
The build wasn't one-shot. Mid-session, Codex initially reported creating the GitHub Actions caller workflow file when it hadn't actually written it to disk, caught only when the file was missing from a live pull request check. Effort level was also tuned down for templated stages (README, tests) and kept high for structurally complex ones (the Action, the demo repo), to manage Codex credit usage across the full build.
The classifier itself runs on gpt-5.6-terra, chosen for its balance of structured
reasoning and cost on a per-pull-request classification task.
Codex session ID: 019f7b1b-5a14-7420-81c7-774cfa15a943

Roadmap
- Hosted dashboard and multi-repository views
- Authentication and persistent hosted storage
- Jira and Slack integrations
- IDE extensions
- Team analytics for recurring out-of-scope work
License
MIT. See LICENSE.
Analysis
View
Metric
- 5
Figures cover GitHub contributors during the hackathon window. A co-authored commit counts in full for each author, so per-member totals add up to more than the whole-team figures.
Technology
- OpenAIIn code
- TypeScriptIn code
2 of 2 appear in the indexed code.
AI coding agents
No AI coding agent signals were found in this repository.
Detected from committed agent config files and commit authorship. Absence of a signal is not proof an agent was unused.
Codebase size
Source size
37 KB
Source files
12
Counts recognized source files only; vendored directories, binaries and lockfiles are excluded, so this is smaller than the repository on disk.
Repository
vinayvkejriwal/scopelint
30 files · 891 KB · @ d96bb95
Structure
Application logic
9 files · 30%Domain rules, services and shared utilities.
Supporting
Layers are inferred from where files sit in the tree, not from reading the code. A project that names its directories unconventionally will read oddly here — open the file browser to check anything the diagram implies.
Languages
- TypeScript83%
- Markdown13%
- YAML3%
Share of indexed source by file size. Binary and vendored files are excluded.
Dependencies
package.json
npm · 7- commander
- dotenv
- openai
- tsx
- +3 more
Declared in the repository’s manifests at the indexed commit. A declared package is not proof it is used, and runtime dependencies are listed first.
This project’s features have not been analysed yet.
Export this project's context (description, README, evidence, key source files) to chat with an AI agent elsewhere.