Setup project configuration and tooling. Use when starting work on new project. Trigger with /epa-project-setup or when initializing a new project.
This skill provides procedures for setting up project configuration and tooling when starting work on a new project. It covers language detection, package manager initialization, dependency installation, linting configuration, testing framework setup, and SERENA MCP activation.
The EPA Project Setup skill equips the Emasoft Programmer Agent (EPA) with a complete, repeatable procedure for initializing any new project workspace. When an EPA agent receives its first task on a project, it must configure the development environment before writing any code. This skill guides that process across eight supported languages (Python, JavaScript/TypeScript, Rust, Go, .NET, C/C++, Objective-C, Swift) by providing six sequential operations: language detection, package manager initialization, dependency installation, linting configuration, testing framework setup, and SERENA MCP activation. Each operation has its own detailed reference file under the references/ subdirectory. The skill ensures that every EPA agent starts from a consistent, fully-configured environment regardless of project language or existing state.
Follow these numbered steps in exact order to set up a new project:
find_symbol.After successful execution of this skill, the following artifacts and states are produced:
pyproject.toml for Python, package.json for JavaScript/TypeScript, Cargo.toml for Rust, go.mod for Go)..venv/ for Python projects).ruff.toml for Python, .eslintrc for JavaScript/TypeScript, clippy.toml for Rust).pytest.ini or pyproject.toml [tool.pytest] for Python, jest.config.js for JavaScript).| Language | Package Manager | Linter | Testing |
|---|---|---|---|
| Python | uv | ruff, mypy | pytest |
| JavaScript/TypeScript | bun, pnpm | eslint | jest, vitest |
| Rust | cargo | clippy | cargo test |
| Go | go mod | golint | go test |
| .NET | dotnet | - | dotnet test |
| C/C++ | cmake, make | clang-tidy | gtest |
| Objective-C | xcodebuild | - | XCTest |
| Swift | swift, xcodebuild | swiftlint | XCTest |
Use this skill when:
Before using this skill:
This skill provides the following operations. Read each operation file before executing its procedure.
Contents:
Contents:
Contents:
File: op-configure-linting.md
Contents:
For ruff linter and formatter configuration, see ruff-configuration-patterns.md:
Contents:
Contents:
Execute these operations in order for a complete project setup:
Copy this checklist and track your progress:
Problem: The expected package manager is not installed on the system.
Solution: Install the package manager first. See the specific operation file for installation instructions for each package manager.
Problem: Dependencies fail to install due to version conflicts or missing packages.
Solution: Check the op-install-dependencies.md file for troubleshooting steps specific to each package manager.
Problem: Linter fails to run or produces incorrect configuration errors.
Solution: Verify the linter configuration file format. See op-configure-linting.md for correct configuration templates.
Problem: SERENA MCP fails to activate or does not respond to commands.
Solution: See op-activate-serena-mcp.md for SERENA-specific troubleshooting steps.
Problem: Project uses multiple languages and needs multiple toolchains.
Solution: Run the setup procedure for each language independently. Start with the primary language (usually the one with the entry point), then set up secondary languages.
When errors occur during project setup, follow these resolution steps:
.python-version, .nvmrc). If the project is truly empty, ask the orchestrator (EOA) for the intended language before proceeding.--version flag.[tool.pytest] in pyproject.toml) and re-run dependency installation..claude/settings.json. If the server is not configured, follow the full activation procedure in op-activate-serena-mcp.md.sudo or change file ownership. Report the permission issue and the exact file path to EOA for resolution.Scenario: You receive a task to work on a Python library project that has a pyproject.toml but no virtual environment or linting configuration.
Step 1: Read this SKILL.md (done).
Step 2: Navigate to {baseDir}/my-python-lib and confirm write access.
Step 3: Run language detection. Found pyproject.toml and src/*.py files. Detected language: Python.
Step 4: Run "uv venv --python 3.12" to create virtual environment, then "source .venv/bin/activate".
Verify with "uv --version". Output: "uv 0.7.12". Success.
Step 5: Run "uv sync" to install all dependencies from pyproject.toml.
Output shows 47 packages installed, 0 errors. Success.
Step 6: Create ruff.toml using the Emasoft standard template from ruff-configuration-patterns.md.
Run "uv run ruff check src/" to verify. Output: "All checks passed". Success.
Step 7: Verify [tool.pytest.ini_options] exists in pyproject.toml.
Run "uv run pytest --co" (collect-only) to verify framework. Output: "no tests ran". Success (framework works, no tests yet).
Step 8: Activate SERENA MCP. Run find_symbol(name="main") to verify. SERENA responds with results. Success.
Step 9: Mark all checklist items as done.
Step 10: Report to EOA: "Project setup complete. Python 3.12, uv, ruff, pytest, SERENA all configured."
Scenario: You receive a task to work on a TypeScript web application that has a package.json but dependencies are not installed.
Step 1: Read this SKILL.md (done).
Step 2: Navigate to {baseDir}/my-ts-app and confirm write access.
Step 3: Run language detection. Found package.json with "typescript" in devDependencies and src/*.ts files.
Detected language: TypeScript.
Step 4: Check for bun.lockb or pnpm-lock.yaml. Found bun.lockb. Package manager: bun.
Run "bun --version". Output: "1.2.5". Success.
Step 5: Run "bun install" to install all dependencies.
Output shows 312 packages installed, 0 errors. Success.
Step 6: Check for existing .eslintrc or eslint.config.js. Found eslint.config.js already present.
Run "bun run eslint src/" to verify. Output: "0 errors, 2 warnings". Success (configuration works).
Step 7: Check package.json scripts for test command. Found "test": "vitest".
Run "bun run vitest --run" to verify framework. Output: "Test Files: 3 passed". Success.
Step 8: Activate SERENA MCP. Run find_symbol(name="App") to verify. SERENA responds. Success.
Step 9: Mark all checklist items as done.
Step 10: Report to EOA: "Project setup complete. TypeScript, bun, eslint, vitest, SERENA all configured."
Scenario: You receive a task to work on a Rust command-line tool project with an existing Cargo.toml.
Step 1: Read this SKILL.md (done).
Step 2: Navigate to {baseDir}/my-rust-cli and confirm write access.
Step 3: Run language detection. Found Cargo.toml and src/main.rs. Detected language: Rust.
Step 4: Cargo is the default package manager for Rust. Run "cargo --version".
Output: "cargo 1.82.0". Success.
Step 5: Run "cargo build" to fetch and install all dependencies.
Output: "Compiling 23 crates, Finished dev target". Success.
Step 6: Clippy is the standard Rust linter. Run "cargo clippy -- -D warnings" to verify.
Output: "Checking my-rust-cli... Finished". Success.
Step 7: Run "cargo test" to verify the test framework.
Output: "running 5 tests... test result: ok. 5 passed". Success.
Step 8: Activate SERENA MCP. Run find_symbol(name="main") to verify. SERENA responds. Success.
Step 9: Mark all checklist items as done.
Step 10: Report to EOA: "Project setup complete. Rust 1.82, cargo, clippy, cargo test, SERENA all configured."
Related skills and documentation for the EPA programmer agent:
epa-coding-standards) — Coding conventions and style rules to apply after project setup is complete.epa-task-execution) — The next skill to use after project setup, covering how to execute assigned implementation tasks.