This file provides guidance to Claude Code (claude.ai/code) when working with code in this repository.
Polyglot web shell manager with a multi-language plugin system (Java, Node.js, .NET). Gradle monorepo for Java modules; noone-web (Bun) and noone-docs (NPM) are separate, not part of Gradle.
- Build:
./gradlew :noone-server:build - Test:
./gradlew :noone-server:test - Run:
./gradlew :noone-server:bootRun(requires--add-opens java.base/java.lang=ALL-UNNAMED)
- Install:
bun install --frozen-lockfile - Dev:
bun run dev - Build:
bun run build - Format:
bun run fmt(oxfmt) — run after editing web files - Format check:
bun run fmt:check - Lint:
bun run lint(oxlint) - Typecheck:
bun run typecheck - Test:
bun run test:run(Vitest, single run)
- Test:
./gradlew :noone-plugins:java-plugins:test
- Test:
node noone-plugins/nodejs-plugins/test.mjs
- Build:
cd noone-plugins/dotnet-plugins && dotnet build --configuration Release - Test:
cd noone-plugins/dotnet-plugins.Tests && dotnet test --configuration Release
.NET plugins MUST be built first, then: ./gradlew :noone-plugins:java-plugins:generateRelease
Use conventional commit prefixes: feat:, fix:, refactor:, perf:, docs:, test:, chore:
Plugins are single .class files base64-encoded. They MUST NOT use:
- Lambdas, diamond operator (
<>), try-with-resources - Inner/anonymous classes, multi-catch, enhanced switch
String.join(),List.of(), streams, any Java 7+ API- Use manual
finallyblocks for resource cleanup
- MUST use
node:prefix for all built-in modules (e.g.,node:os,node:fs)
- NO C# 8+ features (nullable reference types, switch expressions, ranges, default interface methods)
- Use
sealed classfor performance
- Strict mode, import alias
@/*→./app/* - Format with oxfmt (
bun run fmt), lint with oxlint (bun run lint) - Prefix unused variables with
_to suppress lint warnings
- All plugins follow the same contract: runtime calls
equals(ctx)wherectxis a Map carrying input params; plugin writes results toctx["result"]and returnstrue - Java plugins need a
javaPluginMappingentry innoone-plugins/build.gradle.ktsto generate payloads - Java plugin tests require JVM flag:
--add-opens java.base/java.net=ALL-UNNAMED - Subdirectory CLAUDE.md files can be added for module-specific instructions (e.g.,
noone-web/CLAUDE.md)