project-engineering

Enforces repository-specific conventions for Effect services, RPC contracts, tests, and UI components.

1|Updated Jan 29, 2026
One-click install
npx skills add https://github.com/MP281X/deslop --skill project-engineering-mp281x
Or copy as Structured Prompt for Agent
Please help me install this Agent Skill.
Skill: project-engineering
Source: https://github.com/MP281X/deslop/tree/main/.agents/skills/project-engineering
Command: npx skills add https://github.com/MP281X/deslop --skill project-engineering-mp281x

SYSTEM DOCUMENTATION & REQUIREMENTS

What problem does it solve? Engineers working in this monorepo need consistent patterns for service layout, dependency keys, imports, RPC streams, tests, exports, and component styling, and this Skill encodes those conventions as concrete good/bad examples. ## Core Features & Use Cases - Service and App Layout Rules: Defines the exact file structure for packages (schema.ts, service.ts, lib/, internal/) and apps (rpcs/, services/, main.server.ts, main.client.tsx). - Effect and RPC Conventions: Specifies Context.Service key naming (@deslop/<package>/<path>), RpcGroup contracts with streaming, AtomRpc clients, and it.layer test patterns. - Tooling and UI Standards: Covers subpath import maps, package exports, root-owned dependencies, vp generators, oxlint/fallow enforcement, and flat monospace shadcn component styling. - Use Case: When adding a new service to packages/ai or a new app under apps/, apply this Skill to produce code that matches the repository's enforced structure and passes its lint and dead-code checks. ## Quick Start Apply the project-engineering skill to scaffold a new Effect service in this repository following its layout, key, and testing conventions.

Frequently Asked Questions about project-engineering

High-intent search queries and answers about installing and using this skill.

FAQPage Schema
How do I structure a new Effect service package in this monorepo?

Create schema.ts for schemas and domain errors, service.ts for the tag and static layers, lib/utils.ts for pure helpers, and internal/ for the implementation. Tests live beside the public interface as service.test.ts, never inside internal/.

How do I define a streaming RPC contract with Effect RpcGroup?

Extend RpcGroup.make with Rpc.make entries setting stream: true and a success schema, then implement handlers via RpcContracts.toLayer returning RpcContracts.of. Clients connect through AtomRpc.Service with a group and protocol layer.

What naming convention do Context.Service keys use here?

Keys follow the pattern @deslop/<package>/<path>, such as '@deslop/ai/service/Ai' or '@deslop/portfolio/RpcClient'. Keys must not be derived from arbitrary paths or use unscoped names.

Can a package redeclare dependencies already in the root package.json?

No. Shared dependencies like effect are declared once in the root package.json, and packages omit them while still importing them. Package-level package.json files only declare dependencies unique to that package.

Why does fallow report unused exports in this repository?

Every export must have an importer; the only exceptions are packages/*/src/schema.ts and packages/components/src/components/**, which are whitelisted in .fallowrc.json. Suppression comments are considered bad practice.

What are the UI component styling conventions for this repo?

Components are flat, compact, and bordered with zero border radius, using JetBrains Mono fonts and semantic tokens like border-border and bg-background. Avoid cards, rounded corners, hard-coded hex colors, and tooltips on conventional icons.