|
1 | 1 | # FineCode |
2 | 2 |
|
3 | | -**FineCode gives you one workflow for code quality and developer tooling across CLI, IDE, CI, and AI assistants.** |
| 3 | +**FineCode gives you one intent-based workflow for developer tooling across CLI, IDE, CI, and AI assistants.** |
4 | 4 |
|
5 | | -FineCode organizes your tooling so tasks like linting, formatting, type checking, build, and publish follow one consistent workflow and can be reused across projects. |
| 5 | +Most teams end up wiring the same tooling logic multiple times: shell scripts for local use, YAML for CI, editor integration, and now MCP or AI-specific glue. FineCode gives you one reusable layer instead, so `lint`, `format`, `type-check`, environment preparation, and other workflows follow the same model everywhere. In FineCode, those intents are modeled as reusable actions. |
6 | 6 |
|
7 | | -Start in one repository in minutes. Then package the same setup and reuse it across your other projects. |
| 7 | +For example, you can define `lint` once and then reuse that same intent: |
8 | 8 |
|
9 | | -## Start in minutes |
| 9 | +- in the terminal: `python -m finecode run lint` |
| 10 | +- in CI: run `lint` as part of your pipeline |
| 11 | +- in the IDE: surface `lint` through the editor integration |
| 12 | +- in AI workflows: expose `lint` through MCP |
10 | 13 |
|
11 | | -Add FineCode and a preset to your `pyproject.toml`: |
| 14 | +Start in one repository. Reuse the same standards across many. Keep the setup flexible instead of locking your project to one tool or one interface. |
12 | 15 |
|
13 | | -```toml |
14 | | -[dependency-groups] |
15 | | -dev_workspace = ["finecode==0.3.*", "fine_python_recommended==0.3.*"] |
| 16 | +## Why teams use FineCode |
16 | 17 |
|
17 | | -[tool.finecode] |
18 | | -presets = [{ source = "fine_python_recommended" }] |
19 | | -``` |
| 18 | +### One workflow across local runs, CI, IDE, and AI |
20 | 19 |
|
21 | | -Run FineCode: |
| 20 | +FineCode lets you define actions once and run them through the surfaces developers already use: |
22 | 21 |
|
23 | | -```bash |
24 | | -# initial one-time setup |
25 | | -python -m venv .venvs/dev_workspace |
26 | | -source .venvs/dev_workspace/bin/activate # Windows: .venvs\dev_workspace\Scripts\activate |
27 | | -python -m pip install --group="dev_workspace" |
28 | | -python -m finecode prepare-envs |
| 22 | +- Local CLI: `python -m finecode run lint` |
| 23 | +- CI: run the same actions instead of re-creating tool wiring in pipelines |
| 24 | +- IDE: connect through the [VSCode and MCP setup guide](getting-started-ide-mcp.md) |
| 25 | +- AI assistants: expose the same action surface through MCP-compatible clients |
29 | 26 |
|
30 | | -# now you are ready to use finecode |
31 | | -# e.g. lint the whole workspace: |
32 | | -python -m finecode run lint |
33 | | -``` |
| 27 | +That means less duplicated glue code and fewer mismatches between "what works on my machine" and "what CI expects". |
34 | 28 |
|
35 | | -NOTE: `pip install --group` requires pip 25.1+. |
| 29 | +### Explicit action model, not ad-hoc scripts |
36 | 30 |
|
37 | | -This gives you a working Python baseline with Ruff, Flake8, and isort through one shared config entry point. |
| 31 | +FineCode is built around explicit actions and handlers: define the operation once, then plug in the tooling that implements it. |
38 | 32 |
|
39 | | -## From one project to reusable standard |
| 33 | +That makes it easier to: |
40 | 34 |
|
41 | | -Once this works in one project, turn it into a shared preset and use it across repositories: |
| 35 | +- swap tools without redesigning the whole workflow |
| 36 | +- keep a stable command surface as your stack evolves |
| 37 | +- support mixed-language workspaces with a clearer abstraction boundary |
| 38 | +- reason about what your tooling setup actually does |
42 | 39 |
|
43 | | -```toml |
44 | | -[dependency-groups] |
45 | | -dev_workspace = ["finecode==0.3.*", "my_team_standards==0.1.*"] |
| 40 | +If you want the deeper reasoning, the docs now explain it directly: |
46 | 41 |
|
47 | | -[tool.finecode] |
48 | | -presets = [{ source = "my_team_standards" }] |
49 | | -``` |
50 | | - |
51 | | -```bash |
52 | | -python -m pip install --group="dev_workspace" |
53 | | -python -m finecode prepare-envs |
54 | | -``` |
| 42 | +- [Why FineCode's Action Model Works](theory/why-action-model.md) |
| 43 | +- [Designing Actions](guides/designing-actions.md) |
55 | 44 |
|
56 | | -Projects can then adopt updates through normal dependency updates. |
57 | | -See [Creating a Preset](guides/creating-preset.md) for the packaging flow. |
58 | | - |
59 | | -You can also combine presets in one project (for example, a language preset and a team preset): |
| 45 | +### Reusable standards for teams |
60 | 46 |
|
61 | | -```toml |
62 | | -[tool.finecode] |
63 | | -presets = [ |
64 | | - { source = "fine_python_recommended" }, |
65 | | - { source = "my_team_standards" }, |
66 | | -] |
67 | | -``` |
| 47 | +FineCode presets let you package your tooling setup once and share it across repositories. Start with a built-in preset, then turn your own conventions into a reusable standard for your team. |
68 | 48 |
|
69 | | -Typical rollout: |
| 49 | +- adopt a working baseline quickly |
| 50 | +- refine it in a real project |
| 51 | +- publish it as a shared preset |
| 52 | +- roll out updates through normal dependency updates |
70 | 53 |
|
71 | | -1. Start with a preset in one repository. |
72 | | -2. Tune handlers and action config to fit your workflow. |
73 | | -3. Publish that setup as a preset package for your team. |
74 | | -4. Reuse it across repositories. |
| 54 | +See [Creating a Preset](guides/creating-preset.md) for the packaging flow. |
75 | 55 |
|
76 | | -## Why developers use FineCode |
| 56 | +### Isolation without fragmentation |
77 | 57 |
|
78 | | -### Core benefits for every project |
| 58 | +FineCode keeps developer tooling isolated from runtime dependencies while still presenting one coherent workflow to the team. You get more predictable execution without forcing every tool into a bespoke setup. |
79 | 59 |
|
80 | | -- Keep tooling config in one place instead of per-tool config sprawl |
81 | | -- Use the same actions in terminal, IDE, and AI-assisted workflows |
82 | | -- Spend less time wiring tools together and more time shipping code |
83 | | -- Keep local runs and CI behavior aligned around the same actions |
| 60 | +### Built to grow from one repo to a workspace |
84 | 61 |
|
85 | | -#### One command surface for local, CI, IDE, and AI |
| 62 | +You can start small, but the model is designed for larger codebases too: |
86 | 63 |
|
87 | | -Use the same actions and config everywhere: |
| 64 | +- single-project repositories |
| 65 | +- multi-project workspaces |
| 66 | +- mixed-language setups |
| 67 | +- team-maintained tooling standards |
88 | 68 |
|
89 | | -- IDE: [VSCode extension setup](getting-started-ide-mcp.md#vscode-setup) |
90 | | -- AI assistants: [MCP setup for AI clients](getting-started-ide-mcp.md#mcp-setup-for-ai-clients) |
91 | | -- Local CLI: `python -m finecode run lint check_formatting` |
92 | | -- CI: `python -m finecode run lint check_formatting` |
93 | | -- Git hooks: run FineCode actions before commit without requiring `pre-commit` |
| 69 | +## Try it in minutes |
94 | 70 |
|
95 | | -#### Isolated environments by purpose |
| 71 | +Add FineCode and a preset to your `pyproject.toml`: |
96 | 72 |
|
97 | | -FineCode keeps developer tooling separate from runtime dependencies: |
| 73 | +```toml |
| 74 | +[dependency-groups] |
| 75 | +dev_workspace = ["finecode==0.3.*", "fine_python_recommended==0.3.*"] |
98 | 76 |
|
99 | | -```text |
100 | | -.venvs/ |
101 | | - dev_workspace/ <- FineCode and presets |
102 | | - dev_no_runtime/ <- lint/format/type-check handlers |
103 | | - dev/ <- tooling that imports project code during execution |
104 | | - runtime/ <- project runtime dependencies |
| 77 | +[tool.finecode] |
| 78 | +presets = [{ source = "fine_python_recommended" }] |
105 | 79 | ``` |
106 | 80 |
|
107 | | -This reduces dependency cross-talk and makes tool execution more predictable. |
108 | | - |
109 | | -These environment roles are examples, not fixed requirements. You can shape the layout to match your workflow. |
110 | | - |
111 | | -#### Workspace-aware by design |
112 | | - |
113 | | -FineCode understands your workspace as a whole, including how individual subprojects fit together. |
114 | | - |
115 | | -Actions can target a single project or the entire workspace, so tasks like linting every subproject run from one command. |
116 | | - |
117 | | -#### Polyglot workflow, one action surface |
118 | | - |
119 | | -FineCode actions are not tied to a single language. A single action can include handlers for different file types (for example Python code, Markdown docs, and JSON/TOML config) while keeping one shared command surface. |
| 81 | +Bootstrap the workspace tooling environment: |
120 | 82 |
|
121 | | -In practice, this means you can keep using the same `lint` and `format` actions across mixed repositories today. Broader first-class preset coverage for combinations such as Python + Rust is on the roadmap. |
122 | | - |
123 | | -### Additional benefits for teams |
124 | | - |
125 | | -- Keep standards centralized in a shared preset package |
126 | | -- Roll out toolchain changes through normal dependency updates |
127 | | -- Keep rollout predictable by updating a shared preset package instead of editing each repository separately |
128 | | - |
129 | | -## Flexible, no lock-in |
130 | | - |
131 | | -Presets are a starting point, not a ceiling. |
| 83 | +```bash |
| 84 | +pipx run finecode bootstrap |
| 85 | +# or |
| 86 | +uvx finecode bootstrap |
| 87 | +``` |
132 | 88 |
|
133 | | -Disable or tune individual handlers: |
| 89 | +Then activate the bootstrapped environment: |
134 | 90 |
|
135 | | -```toml |
136 | | -[[tool.finecode.action_handler]] |
137 | | -source = "fine_python_ruff.RuffLintFilesHandler" |
138 | | -config.line_length = 120 |
139 | | - |
140 | | -[tool.finecode.action.lint] |
141 | | -handlers = [ |
142 | | - { name = "flake8", enabled = false }, |
143 | | - { name = "my_linter", source = "my_team.MyLinterHandler" }, |
144 | | -] |
| 91 | +```bash |
| 92 | +source .venvs/dev_workspace/bin/activate |
| 93 | +# Windows: .venvs\dev_workspace\Scripts\activate |
145 | 94 | ``` |
146 | 95 |
|
147 | | -Replace an action handler set completely: |
| 96 | +Then prepare tool environments and run your first action: |
148 | 97 |
|
149 | | -```toml |
150 | | -[tool.finecode.action.lint] |
151 | | -handlers_mode = "replace" |
152 | | -handlers = [ |
153 | | - { name = "my_linter", source = "my_team.MyLinterHandler" }, |
154 | | -] |
| 98 | +```bash |
| 99 | +python -m finecode prepare-envs |
| 100 | +python -m finecode run lint |
155 | 101 | ``` |
156 | 102 |
|
157 | | -You can also add custom actions and handlers for project-specific workflows. |
| 103 | +This gives you a ready-to-use baseline for Python quality tooling through one shared entry point. |
158 | 104 |
|
159 | | -## Proven in this repository |
| 105 | +For the full setup flow, see [Getting Started](getting-started.md). |
160 | 106 |
|
161 | | -FineCode is used to run quality actions in the FineCode repository itself. |
| 107 | +## Why FineCode feels different |
162 | 108 |
|
163 | | -- TODO: Add repository-scale metrics (actions/day, CI duration impact, setup time before/after) |
| 109 | +FineCode is not just a wrapper around linters and formatters. It gives those tools a shared execution model, so the workflow stays coherent as your project grows. |
164 | 110 |
|
165 | | -## Ready to try FineCode? |
| 111 | +- Your team sees the same actions in terminal, CI, IDE, and AI-assisted flows |
| 112 | +- Your configuration has a clearer structure than a pile of unrelated tool configs |
| 113 | +- Your standards can move from "this repo's setup" to "our team's reusable preset" |
| 114 | +- Your docs can explain the model, not just list commands |
166 | 115 |
|
167 | | -[Get started in 5 minutes ->](getting-started.md) |
| 116 | +## Where to go next |
168 | 117 |
|
169 | | -See also: [Concepts](concepts.md), [Configuration](configuration.md), [available presets and extensions](reference/extensions.md) |
| 118 | +- [Getting Started](getting-started.md) for the full setup path |
| 119 | +- [IDE and MCP Setup](getting-started-ide-mcp.md) to connect editors and AI clients |
| 120 | +- [Concepts](concepts.md) for the core mental model |
| 121 | +- [Why FineCode's Action Model Works](theory/why-action-model.md) for the design rationale |
| 122 | +- [Designing Actions](guides/designing-actions.md) for action design guidance |
| 123 | +- [Extensions](reference/extensions.md) for available integrations |
170 | 124 |
|
171 | 125 | ## Community |
172 | 126 |
|
|
0 commit comments