RuleStack

Configs

Stacks

Compare

Diff

RuleStack

Configs

Stacks

Compare

Diff

Read API

RuleStack

Configs

Stacks

Compare

Diff

Read API

Configs/opf/openproject/diff

Two files, one repository

opf/openproject ships 2 formats across 8 indexed files. The question worth asking is whether the second one says anything the first does not.

CompareAGENTS.md ↔ Copilot instructions
A · AGENTS.md · 545 wordsB · app/AGENTS.md · 164 words
What each file covers, counted
DimensionSharedOnly in AOnly in BOverlap
Sections11655%
Commands0800%
Section tags16113%

What each file covers

Sections

1 shared · 16 only in A · 5 only in B
  • − OpenProject AI Coding Agent Instructions
  • − Repository Overview
  • − Critical Setup Requirements
  • − Local Development Setup
  • − Access at http://localhost:3000
  • − Docker Development Setup
  • − Project Structure
  • − Key Directories
  • − Configuration Files
  • − Linting (Run Before Committing)
  • − JavaScript/TypeScript
  • − ERB Templates
  • − Install Git Hooks (recommended)
  • − JavaScript and TypeScript Copyright Headers
  • − Commit Messages
  • − Additional Documentation
  • + App
  • + Directory Structure
  • + Code Style Guidelines
  • + Templates
  • + Translations
  •   Ruby

Commands

0 shared · 8 only in A · 0 only in B
  • − bundle install
  • − bundle exec rails db:migrate
  • − bundle exec rubocop
  • − bundle exec lefthook install
  • − docker/dev/AGENTS.md
  • − docker/dev/
  • − rake copyright:update_typescript
  • − rake copyright:update_js

Section tags

1 shared · 6 only in A · 1 only in B
  • − setup
  • − lint-format
  • − types
  • − git-pr
  • − agent-behaviour
  • − docs
  • + code-style
  •   architecture

Line diff

+23 added−103 removed8 unchanged7.2% identical
opf/openproject · AGENTS.md
@@ −1 @@
1# OpenProject AI Coding Agent Instructions
2 
3> **Note for developers**: You can create `AGENTS.local.md` (or `CLAUDE.local.md`) in this directory to add your own custom instructions or preferences for AI coding agents. These files are git-ignored and will not be committed to the repository.
4 
5## Repository Overview
 
 
 
 
 
6 
7**OpenProject** is a web-based, open-source project management software written in Ruby on Rails with PostgreSQL for data persistence.
8 
9- **Size**: Large monorepo (~840MB, ~1M+ lines of code)
10- **Backend**: Ruby 3.4.7, Rails ~8.0.3
11- **Frontend**: Node.js 24.x (>= 24.15.0), npm 11.x, TypeScript
12- **Database**: PostgreSQL (required)
13- **Architecture**: Server-rendered HTML with Hotwire (Turbo + Stimulus). Legacy Angular components exist and are being migrated to custom elements. Uses GitHub's Primer Design System via ViewComponent.
14- **Editions**: Community, Enterprise (SSO, LDAP, SCIM), and BIM (construction industry, code in `modules/bim/`)
 
 
15 
16## Critical Setup Requirements
 
 
 
17 
18**ALWAYS verify versions before building:**
19- Ruby: `3.4.7` (see `.ruby-version`)
20- Node: `^24.15.0` (see `package.json` engines)
21- Bundler: Latest 2.x
22 
23### Local Development Setup
24 
25```bash
26bundle install # Install Ruby gems
27cd frontend && npm ci && cd .. # Install Node packages
28bundle exec rails db:migrate # Setup database
29bin/dev # Start all services (Rails, frontend, Good Job worker)
30# Access at http://localhost:3000
31```
32 
33### Docker Development Setup
34 
35See [`docker/dev/AGENTS.md`](docker/dev/AGENTS.md) for full Docker setup and commands.
36 
37## Project Structure
38 
39### Key Directories
40 
41- `app/` — Rails application code
42- `config/` — Rails configuration, routes, locales
43- `db/` — Database migrations and seeds
44- `docker/dev/` — Docker development environment
45- `frontend/` — TypeScript/Angular/Stimulus frontend
46- `lib/` — Ruby libraries and extensions
47- `lookbook/` — ViewComponent previews (<https://qa.openproject-edge.com/lookbook/>)
48- `modules/` — OpenProject plugin modules
49- `spec/` — RSpec test suite
50 
51### Configuration Files
52 
53- `.ruby-version` - Ruby version
54- `.rubocop.yml` - Ruby linting rules
55- `.erb_lint.yml` - ERB template linting
56- `frontend/eslint.config.mjs` - JavaScript/TypeScript linting
57- `Gemfile` - Ruby dependencies
58- `package.json` / `frontend/package.json` - Node.js dependencies
59- `lefthook.yml` - Git hooks configuration
60 
61### Linting (Run Before Committing)
62 
63```bash
64# Ruby
65bundle exec rubocop # Check all files
66bin/dirty-rubocop --uncommitted # Check only uncommitted changes
67 
68# JavaScript/TypeScript
69cd frontend && npx eslint src/ && cd ..
70 
71# ERB Templates
72erb_lint {files}
73 
74# Install Git Hooks (recommended)
75bundle exec lefthook install
76```
77 
78### JavaScript and TypeScript Copyright Headers
79 
80All first-party JavaScript and TypeScript files must use the canonical compact
81line-comment copyright header generated from `COPYRIGHT_short`:
82 
83```typescript
84//-- copyright
85// OpenProject is an open source project management software.
86// ...
87//++
88 
89```
90 
91Use `//-- copyright` and `//++` exactly as shown. Prefix non-empty body lines
92with `// `, prefix empty body lines with `//`, and leave one blank line between
93the header and the source code. Do not compose or reformat the header manually.
94 
95Run `rake copyright:update_typescript` to add or repair headers in `.ts` and
96`.tsx` files. Run `rake copyright:update_js` for `.js`, `.mjs`, and `.cjs`
97files. Both commands accept an optional path argument.
98 
99## Commit Messages
100- First line: < 72 characters, then blank line, then detailed description
101- Reference work packages when applicable
102- Merge strategy: "Merge pull request" (not squash), except single-commit PRs can use "Rebase and merge"
103 
104## Additional Documentation
105 
106- `docs/development/` — Development documentation
107- `docs/development/running-tests/` — Testing guide
108- `docs/development/code-review-guidelines/` — Code review standards
109- `CONTRIBUTING.md` — Contribution workflow
110- `.github/copilot-instructions.md` — Extended agent instructions with troubleshooting
111 
opf/openproject · app/AGENTS.md
@@ +1 @@
1# App
2 
3## Directory Structure
4 
5- `app/components/` - ViewComponent-based UI components (Ruby + ERB)
6- `app/contracts/` - Validation and authorization contracts
7- `app/controllers/` - Rails controllers
8- `app/models/` - ActiveRecord models
9- `app/services/` - Service objects (business logic)
10- `app/workers/` - Background job workers
11 
12## Code Style Guidelines
13 
14### Ruby
15- Follow [Ruby community style guide](https://github.com/bbatsov/ruby-style-guide)
16- Use service objects for complex business logic (return `ServiceResult`)
17- Use contracts for validation and authorization
18- Keep controllers thin, models focused
19- Document with [YARD](https://yardoc.org/)
20- Write RSpec tests for all new features
21- **Work package identifiers**: `WorkPackage.find("PROJ-42")` resolves semantic identifiers transparently. Use `find_by_display_id` only when input could legitimately be numeric OR semantic (controllers, URL-driven components, macro resolvers). Low-level code (queries, filters, services) should stick to `find_by(id:)` with primary keys. See `app/models/work_package/semantic_identifier/finder_methods.rb`.
22 
23### Templates
24- Use ERB for server-rendered views
25- Use ViewComponents for reusable UI (with Lookbook previews)
26- Lint with erb_lint before committing
27 
28## Translations
 
 
 
29 
30- UI strings must use translation keys (never hard-coded)
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
31 
@@ −1 +1 @@
1−# OpenProject AI Coding Agent Instructions
1+# App
22  
3−> **Note for developers**: You can create `AGENTS.local.md` (or `CLAUDE.local.md`) in this directory to add your own custom instructions or preferences for AI coding agents. These files are git-ignored and will not be committed to the repository.
3+## Directory Structure
44  
5−## Repository Overview
5+- `app/components/` - ViewComponent-based UI components (Ruby + ERB)
6+- `app/contracts/` - Validation and authorization contracts
7+- `app/controllers/` - Rails controllers
8+- `app/models/` - ActiveRecord models
9+- `app/services/` - Service objects (business logic)
10+- `app/workers/` - Background job workers
611  
7−**OpenProject** is a web-based, open-source project management software written in Ruby on Rails with PostgreSQL for data persistence.
12+## Code Style Guidelines
813  
9−- **Size**: Large monorepo (~840MB, ~1M+ lines of code)
10−- **Backend**: Ruby 3.4.7, Rails ~8.0.3
11−- **Frontend**: Node.js 24.x (>= 24.15.0), npm 11.x, TypeScript
12−- **Database**: PostgreSQL (required)
13−- **Architecture**: Server-rendered HTML with Hotwire (Turbo + Stimulus). Legacy Angular components exist and are being migrated to custom elements. Uses GitHub's Primer Design System via ViewComponent.
14−- **Editions**: Community, Enterprise (SSO, LDAP, SCIM), and BIM (construction industry, code in `modules/bim/`)
14+### Ruby
15+- Follow [Ruby community style guide](https://github.com/bbatsov/ruby-style-guide)
16+- Use service objects for complex business logic (return `ServiceResult`)
17+- Use contracts for validation and authorization
18+- Keep controllers thin, models focused
19+- Document with [YARD](https://yardoc.org/)
20+- Write RSpec tests for all new features
21+- **Work package identifiers**: `WorkPackage.find("PROJ-42")` resolves semantic identifiers transparently. Use `find_by_display_id` only when input could legitimately be numeric OR semantic (controllers, URL-driven components, macro resolvers). Low-level code (queries, filters, services) should stick to `find_by(id:)` with primary keys. See `app/models/work_package/semantic_identifier/finder_methods.rb`.
1522  
16−## Critical Setup Requirements
23+### Templates
24+- Use ERB for server-rendered views
25+- Use ViewComponents for reusable UI (with Lookbook previews)
26+- Lint with erb_lint before committing
1727  
18−**ALWAYS verify versions before building:**
19−- Ruby: `3.4.7` (see `.ruby-version`)
20−- Node: `^24.15.0` (see `package.json` engines)
21−- Bundler: Latest 2.x
28+## Translations
2229  
23−### Local Development Setup
24− 
25−```bash
26−bundle install # Install Ruby gems
27−cd frontend && npm ci && cd .. # Install Node packages
28−bundle exec rails db:migrate # Setup database
29−bin/dev # Start all services (Rails, frontend, Good Job worker)
30−# Access at http://localhost:3000
31−```
32− 
33−### Docker Development Setup
34− 
35−See [`docker/dev/AGENTS.md`](docker/dev/AGENTS.md) for full Docker setup and commands.
36− 
37−## Project Structure
38− 
39−### Key Directories
40− 
41−- `app/` — Rails application code
42−- `config/` — Rails configuration, routes, locales
43−- `db/` — Database migrations and seeds
44−- `docker/dev/` — Docker development environment
45−- `frontend/` — TypeScript/Angular/Stimulus frontend
46−- `lib/` — Ruby libraries and extensions
47−- `lookbook/` — ViewComponent previews (<https://qa.openproject-edge.com/lookbook/>)
48−- `modules/` — OpenProject plugin modules
49−- `spec/` — RSpec test suite
50− 
51−### Configuration Files
52− 
53−- `.ruby-version` - Ruby version
54−- `.rubocop.yml` - Ruby linting rules
55−- `.erb_lint.yml` - ERB template linting
56−- `frontend/eslint.config.mjs` - JavaScript/TypeScript linting
57−- `Gemfile` - Ruby dependencies
58−- `package.json` / `frontend/package.json` - Node.js dependencies
59−- `lefthook.yml` - Git hooks configuration
60− 
61−### Linting (Run Before Committing)
62− 
63−```bash
64−# Ruby
65−bundle exec rubocop # Check all files
66−bin/dirty-rubocop --uncommitted # Check only uncommitted changes
67− 
68−# JavaScript/TypeScript
69−cd frontend && npx eslint src/ && cd ..
70− 
71−# ERB Templates
72−erb_lint {files}
73− 
74−# Install Git Hooks (recommended)
75−bundle exec lefthook install
76−```
77− 
78−### JavaScript and TypeScript Copyright Headers
79− 
80−All first-party JavaScript and TypeScript files must use the canonical compact
81−line-comment copyright header generated from `COPYRIGHT_short`:
82− 
83−```typescript
84−//-- copyright
85−// OpenProject is an open source project management software.
86−// ...
87−//++
88− 
89−```
90− 
91−Use `//-- copyright` and `//++` exactly as shown. Prefix non-empty body lines
92−with `// `, prefix empty body lines with `//`, and leave one blank line between
93−the header and the source code. Do not compose or reformat the header manually.
94− 
95−Run `rake copyright:update_typescript` to add or repair headers in `.ts` and
96−`.tsx` files. Run `rake copyright:update_js` for `.js`, `.mjs`, and `.cjs`
97−files. Both commands accept an optional path argument.
98− 
99−## Commit Messages
100−- First line: < 72 characters, then blank line, then detailed description
101−- Reference work packages when applicable
102−- Merge strategy: "Merge pull request" (not squash), except single-commit PRs can use "Rebase and merge"
103− 
104−## Additional Documentation
105− 
106−- `docs/development/` — Development documentation
107−- `docs/development/running-tests/` — Testing guide
108−- `docs/development/code-review-guidelines/` — Code review standards
109−- `CONTRIBUTING.md` — Contribution workflow
110−- `.github/copilot-instructions.md` — Extended agent instructions with troubleshooting
30+- UI strings must use translation keys (never hard-coded)
11131  

Also from Kynth Studios

Built for the same person as RuleStack

ToolDrift

What the AI coding tools changed last night

tooldrift.kynth.studio

StillShipping

Which agent tools have stopped shipping

stillshipping.kynth.studio

BlockDex

Search inside every shadcn registry

blockdex.kynth.studio

The studio list

One product, taken apart, once a month

Kynth Studios pulls one shipped product open every month — what it does, what it cost to build, what the pipeline behind it looks like, and what the numbers did. One email a month, nothing in between.

Double opt-in — we send one confirmation link and nothing else until you click it.

RuleStack

Built by

Kynth Studios

the studio behind ToolDrift, StillShipping and BlockDex

part of Toolproof, the measurement layer for AI agent tooling

Directory

Configs
Stacks
Compare formats
AGENTS.md vs CLAUDE.md
Cursor rules alternatives
Diff two configs
Best AGENTS.md examples
Best Cursor rules examples
What goes in a CLAUDE.md

Formats

AGENTS.md
CLAUDE.md
Cursor rules
Copilot instructions

Reference

Read API
Corpus health
Privacy Policy
Terms

© 2026 RuleStack. A Kynth Studios product. Changelog

RuleStack

The studio list

One product, taken apart, once a month

Kynth Studios pulls one shipped product open every month — what it does, what it cost to build, what the pipeline behind it looks like, and what the numbers did. One email a month, nothing in between.

Double opt-in — we send one confirmation link and nothing else until you click it.

RuleStack

Built by

Kynth Studios

the studio behind ToolDrift, StillShipping and BlockDex

part of Toolproof, the measurement layer for AI agent tooling

Directory

Configs
Stacks
Compare formats
AGENTS.md vs CLAUDE.md
Cursor rules alternatives
Diff two configs
Best AGENTS.md examples
Best Cursor rules examples
What goes in a CLAUDE.md

Formats

AGENTS.md
CLAUDE.md
Cursor rules
Copilot instructions

Reference

Read API
Corpus health
Privacy Policy
Terms

© 2026 RuleStack. A Kynth Studios product. Changelog

RuleStack

The studio list

One product, taken apart, once a month

Kynth Studios pulls one shipped product open every month — what it does, what it cost to build, what the pipeline behind it looks like, and what the numbers did. One email a month, nothing in between.

Double opt-in — we send one confirmation link and nothing else until you click it.

RuleStack

Built by

Kynth Studios

the studio behind ToolDrift, StillShipping and BlockDex

part of Toolproof, the measurement layer for AI agent tooling

Directory

Configs
Stacks
Compare formats
AGENTS.md vs CLAUDE.md
Cursor rules alternatives
Diff two configs
Best AGENTS.md examples
Best Cursor rules examples
What goes in a CLAUDE.md

Formats

AGENTS.md
CLAUDE.md
Cursor rules
Copilot instructions

Reference

Read API
Corpus health
Privacy Policy
Terms

© 2026 RuleStack. A Kynth Studios product. Changelog

RuleStack