{"id":"6608eca6-8ecc-454a-87b0-e23539e2bdfa","shortId":"x6sBek","kind":"skill","title":"Enforce package boundaries inside a Rails monolith before coupling spreads with Packwerk","tagline":"Check a Rails codebase for dependency and visibility violations so domain boundaries stay reviewable instead of dissolving over time.","description":"# Enforce package boundaries inside a Rails monolith before coupling spreads with Packwerk\n\nCheck a Rails codebase for dependency and visibility violations so domain boundaries stay reviewable instead of dissolving over time.\n\n## Prerequisites\n\nRuby, Bundler, a Rails application with Zeitwerk enabled, Packwerk gem installation, and repository access to the monolith being analyzed\n\n## Installation\n\nUse the upstream install or setup path that matches your environment:\n- gem 'packwerk'\n- $ gem install packwerk\n\nRequirements and caveats from upstream:\n- This is because we rely on [Zeitwerk's conventions](https://github.com/fxn/zeitwerk#file-structure), and code that is loaded differently (like through an explicit require) often doesn't follow these conventions.\n\nBasic usage or getting-started notes:\n- Packwerk needs [Zeitwerk](https://github.com/fxn/zeitwerk) enabled, which comes with Rails 6.\n- Packwerk supports MRI versions 2.7 and above.\n- ## Demo\n\n- Source: https://github.com/Shopify/packwerk\n- Extracted from upstream docs: https://raw.githubusercontent.com/Shopify/packwerk/HEAD/README.md\n\n## Documentation\n\n- https://github.com/Shopify/packwerk\n\n## Source\n\n- [Agent Skill Exchange](https://agentskillexchange.com/skills/enforce-package-boundaries-inside-a-rails-monolith-before-coupling-spreads-with-packwerk/)","tags":["enforce","package","boundaries","inside","rails","monolith","before","coupling","spreads","with","packwerk","skills"],"capabilities":["skill","source-agentskillexchange","skill-enforce-package-boundaries-inside-a-rails-monolith-before-coupling-spreads-with-packwerk","topic-agent-skills","topic-ai-agents","topic-ai-tools","topic-awesome-list","topic-claude-code","topic-codex","topic-cursor","topic-llm","topic-mcp","topic-npx-skills","topic-openclaw","topic-skills-catalog"],"categories":["skills"],"synonyms":[],"warnings":[],"endpointUrl":"https://skills.sh/agentskillexchange/skills/enforce-package-boundaries-inside-a-rails-monolith-before-coupling-spreads-with-packwerk","protocol":"skill","transport":"skills-sh","auth":{"type":"none","details":{"cli":"npx skills add agentskillexchange/skills","source_repo":"https://github.com/agentskillexchange/skills","install_from":"skills.sh"}},"qualityScore":"0.454","qualityRationale":"deterministic score 0.45 from registry signals: · indexed on github topic:agent-skills · 8 github stars · SKILL.md body (1,328 chars)","verified":false,"liveness":"unknown","lastLivenessCheck":null,"agentReviews":{"count":0,"score_avg":null,"cost_usd_avg":null,"success_rate":null,"latency_p50_ms":null,"narrative_summary":null,"summary_updated_at":null},"enrichmentModel":"deterministic:skill-github:v1","enrichmentVersion":1,"enrichedAt":"2026-05-18T19:10:19.576Z","embedding":null,"createdAt":"2026-05-18T13:16:22.097Z","updatedAt":"2026-05-18T19:10:19.576Z","lastSeenAt":"2026-05-18T19:10:19.576Z","tsv":"'/fxn/zeitwerk#file-structure),':116 '/fxn/zeitwerk)':146 '/shopify/packwerk':164,175 '/shopify/packwerk/head/readme.md':171 '/skills/enforce-package-boundaries-inside-a-rails-monolith-before-coupling-spreads-with-packwerk/)':182 '2.7':157 '6':152 'access':77 'agent':177 'agentskillexchange.com':181 'agentskillexchange.com/skills/enforce-package-boundaries-inside-a-rails-monolith-before-coupling-spreads-with-packwerk/)':180 'analyz':82 'applic':68 'basic':134 'boundari':3,24,34,55 'bundler':65 'caveat':102 'check':13,44 'code':118 'codebas':16,47 'come':149 'convent':113,133 'coupl':9,40 'demo':160 'depend':18,49 'differ':122 'dissolv':29,60 'doc':168 'document':172 'doesn':129 'domain':23,54 'enabl':71,147 'enforc':1,32 'environ':94 'exchang':179 'explicit':126 'extract':165 'follow':131 'gem':73,95,97 'get':138 'getting-start':137 'github.com':115,145,163,174 'github.com/fxn/zeitwerk#file-structure),':114 'github.com/fxn/zeitwerk)':144 'github.com/shopify/packwerk':162,173 'insid':4,35 'instal':74,83,87,98 'instead':27,58 'like':123 'load':121 'match':92 'monolith':7,38,80 'mri':155 'need':142 'note':140 'often':128 'packag':2,33 'packwerk':12,43,72,96,99,141,153 'path':90 'prerequisit':63 'rail':6,15,37,46,67,151 'raw.githubusercontent.com':170 'raw.githubusercontent.com/shopify/packwerk/head/readme.md':169 'reli':109 'repositori':76 'requir':100,127 'review':26,57 'rubi':64 'setup':89 'skill':178 'skill-enforce-package-boundaries-inside-a-rails-monolith-before-coupling-spreads-with-packwerk' 'sourc':161,176 'source-agentskillexchange' 'spread':10,41 'start':139 'stay':25,56 'support':154 'time':31,62 'topic-agent-skills' 'topic-ai-agents' 'topic-ai-tools' 'topic-awesome-list' 'topic-claude-code' 'topic-codex' 'topic-cursor' 'topic-llm' 'topic-mcp' 'topic-npx-skills' 'topic-openclaw' 'topic-skills-catalog' 'upstream':86,104,167 'usag':135 'use':84 'version':156 'violat':21,52 'visibl':20,51 'zeitwerk':70,111,143","prices":[{"id":"c229fdc4-6219-4cbf-bdff-2b1a97333a8b","listingId":"6608eca6-8ecc-454a-87b0-e23539e2bdfa","amountUsd":"0","unit":"free","nativeCurrency":null,"nativeAmount":null,"chain":null,"payTo":null,"paymentMethod":"skill-free","isPrimary":true,"details":{"org":"agentskillexchange","category":"skills","install_from":"skills.sh"},"createdAt":"2026-05-18T13:16:22.097Z"}],"sources":[{"listingId":"6608eca6-8ecc-454a-87b0-e23539e2bdfa","source":"github","sourceId":"agentskillexchange/skills/enforce-package-boundaries-inside-a-rails-monolith-before-coupling-spreads-with-packwerk","sourceUrl":"https://github.com/agentskillexchange/skills/tree/main/skills/enforce-package-boundaries-inside-a-rails-monolith-before-coupling-spreads-with-packwerk","isPrimary":false,"firstSeenAt":"2026-05-18T13:16:22.097Z","lastSeenAt":"2026-05-18T19:10:19.576Z"}],"details":{"listingId":"6608eca6-8ecc-454a-87b0-e23539e2bdfa","quickStartSnippet":null,"exampleRequest":null,"exampleResponse":null,"schema":null,"openapiUrl":null,"agentsTxtUrl":null,"citations":[],"useCases":[],"bestFor":[],"notFor":[],"kindDetails":{"org":"agentskillexchange","slug":"enforce-package-boundaries-inside-a-rails-monolith-before-coupling-spreads-with-packwerk","github":{"repo":"agentskillexchange/skills","stars":8,"topics":["agent-skills","ai-agents","ai-tools","awesome-list","claude-code","codex","cursor","llm","mcp","npx-skills","openclaw","skills-catalog"],"license":"mit","html_url":"https://github.com/agentskillexchange/skills","pushed_at":"2026-05-18T19:02:17Z","description":"The open catalog of AI agent skills — 2,000+ security-scanned skills for Claude Code, Cursor, Codex, and more.","skill_md_sha":"6b8a921ed47b6b18a4c04b47cccff9dec2a4953a","skill_md_path":"skills/enforce-package-boundaries-inside-a-rails-monolith-before-coupling-spreads-with-packwerk/SKILL.md","default_branch":"main","skill_tree_url":"https://github.com/agentskillexchange/skills/tree/main/skills/enforce-package-boundaries-inside-a-rails-monolith-before-coupling-spreads-with-packwerk"},"layout":"multi","source":"github","category":"skills","frontmatter":{"name":"Enforce package boundaries inside a Rails monolith before coupling spreads with Packwerk","description":"Check a Rails codebase for dependency and visibility violations so domain boundaries stay reviewable instead of dissolving over time."},"skills_sh_url":"https://skills.sh/agentskillexchange/skills/enforce-package-boundaries-inside-a-rails-monolith-before-coupling-spreads-with-packwerk"},"updatedAt":"2026-05-18T19:10:19.576Z"}}