FuckCode is a fork of OpenCode focused on security auditing, penetration testing, and coding assistance. Contributions that fit that direction are welcome:
- Bug fixes
- Pentest and security tooling improvements
- Context window, token efficiency, and performance work
- Additional LSPs / formatters
- Provider support
- Documentation improvements
Open an issue before large features so the direction can be discussed.
The repository carries the full upstream OpenCode history, so a regular clone is heavy. Use a blobless partial clone to avoid downloading historical blobs:
git clone --filter=blob:none https://github.com/NoNFake/fuckcode.gitGit fetches file contents on demand afterward.
-
Requirements: Bun 1.3+
-
Install dependencies and start the dev TUI from the repo root:
bun install bun dev
By default, bun dev runs FuckCode in the packages/opencode directory. To run it against a different directory:
bun dev <directory>To run it in the root of this repo:
bun dev ../packages/opencode/script/build.ts --singleThen run it:
./packages/opencode/dist/fuckcode-<platform>/bin/fuckcodeReplace <platform> with your platform (e.g. darwin-arm64, linux-x64).
To build every platform and produce release archives:
bun run build:allpackages/opencode: core business logic and server.packages/tui: the TUI, written in SolidJS with opentui.packages/app: shared web UI components, written in SolidJS.packages/desktop: native desktop app, built with Electron.packages/plugin: source for@opencode-ai/plugin.
bun dev serveThe headless server listens on port 4096 by default. Use --port to change it.
Start the server, then:
bun run --cwd packages/app devbun run --cwd packages/desktop devNote
If you change the API or SDK, run ./script/generate.ts to regenerate the SDK and related files.
Follow the style guide.
- Keep pull requests small and focused.
- Explain the issue and why the change fixes it.
- Link the issue with
Fixes #123orCloses #123. - For UI changes, include before/after screenshots.
- For logic changes, explain how you verified the change.
- Prefer short descriptions over long generated text.
Use conventional commit style:
feat:new featurefix:bug fixdocs:documentationchore:maintenance, dependency updatesrefactor:behavior-preserving refactortest:tests
Optional scope, e.g. feat(app):, fix(desktop):, chore(opencode):.
- Keep logic in one function unless a split adds clear reuse.
- Avoid unnecessary destructuring and
elsestatements. - Reach for precise types and avoid
any. - Prefer immutable patterns over
let. - Use Bun helpers such as
Bun.file()where they fit. - Follow
AGENTS.mdfor package conventions.
Open an issue describing the problem, the proposed approach, and why it belongs in FuckCode. Wait for approval before opening a large feature PR.