@@ -0,0 +1,40 @@
|
||||
This file provides guidance to Claude Code (claude.ai/code), Cursor, and any
|
||||
other Agentic coding tools when working with code in this repository.
|
||||
|
||||
# Project Overview
|
||||
|
||||
This codebase is the beginning of a pretty ambitious project to build a personal server runtime/overlay OS.
|
||||
The idea is that users should be able to have a conceptual personal server
|
||||
operating system that is instantiated on several nodes that all communicate
|
||||
with each other and share personal documents in a decentralized way. A node
|
||||
might be a smartphone, a desktop or laptop PC, a browser extension, a headless
|
||||
server running in a cloud; and a user can have arbitrarily many nodes. Personal
|
||||
data could be files like PDF documents, music/video files; but also things like
|
||||
"how many minutes into this podcast did I listen to", "how long into this
|
||||
youtube video did I watch", "which Twitter/X/BlueSky/Mastodon feeds have I read and/or archived", etc.
|
||||
|
||||
This project is inspired by Urbit, and in particular the Urbit concept of a
|
||||
planet with subordinate moons - each node in this system is effectively a moon,
|
||||
without any central planet. Like in Urbit, each node has an individual
|
||||
cryptographic keypair to sign and encrypt messages; but also nodes have access
|
||||
to a global keypair that signifies ownership of the node at large. Eventually,
|
||||
different sets of nodes should be able to communicate with each other in an
|
||||
encrypted and authenticated way.
|
||||
|
||||
# Build Commands
|
||||
- Android: `./gradlew build` or `./gradlew assemble`
|
||||
- Rust: `just build-rust` or `cd rust && cargo build --target aarch64-linux-android --release`
|
||||
- Run tests:
|
||||
- Kotlin: `./gradlew test` (unit tests), `./gradlew connectedAndroidTest` (instrumented)
|
||||
- Rust: `cargo nextest run` in the `rust`directory
|
||||
- Run single test: `./gradlew test --tests "ExampleUnitTest.testName"`
|
||||
|
||||
# Code Style
|
||||
- Kotlin: Follow Kotlin conventions with 4-space indentation
|
||||
- Rust: Follow Rust idioms, use `thiserror` for error types and `anyhow` for propagation.
|
||||
- Rust code should conform to the style guidelines enforced by `cargo fmt` and `cargo clippy`.
|
||||
- in particular, don't generate code like `documents::Artifacts::new()` that has fully-qualified type names; instead prefer to `use documents::Artifacts` and then have just `Artifacts::new()`
|
||||
- Naming: camelCase for variables/functions, PascalCase for classes/interfaces
|
||||
- Errors: Use typed errors with meaningful messages
|
||||
- Architecture: Jetpack Compose for UI, JNI for Rust integration
|
||||
- Types: Use explicit types for public APIs, leverage type inference for local variables
|
||||
@@ -1,39 +0,0 @@
|
||||
This file provides guidance to Claude Code (claude.ai/code) when working with code in this repository.
|
||||
|
||||
# Project Overview
|
||||
|
||||
This codebase is the beginning of a pretty ambitious project to build a personal server runtime/overlay OS.
|
||||
The idea is that users should be able to have a conceptual personal server
|
||||
operating system that is instantiated on several nodes that all communicate
|
||||
with each other and share personal documents in a decentralized way. A node
|
||||
might be a smartphone, a desktop or laptop PC, a browser extension, a headless
|
||||
server running in a cloud; and a user can have arbitrarily many nodes. Personal
|
||||
data could be files like PDF documents, music/video files; but also things like
|
||||
"how many minutes into this podcast did I listen to", "how long into this
|
||||
youtube video did I watch", "which Twitter/X/BlueSky/Mastodon feeds have I read and/or archived", etc.
|
||||
|
||||
This project is inspired by Urbit, and in particular the Urbit concept of a
|
||||
planet with subordinate moons - each node in this system is effectively a moon,
|
||||
without any central planet. Like in Urbit, each node has an individual
|
||||
cryptographic keypair to sign and encrypt messages; but also nodes have access
|
||||
to a global keypair that signifies ownership of the node at large. Eventually,
|
||||
different sets of nodes should be able to communicate with each other in an
|
||||
encrypted and authenticated way.
|
||||
|
||||
# Build Commands
|
||||
- Android: `./gradlew build` or `./gradlew assemble`
|
||||
- Rust: `just build-rust` or `cd rust && cargo build --target aarch64-linux-android --release`
|
||||
- Run tests:
|
||||
- Kotlin: `./gradlew test` (unit tests), `./gradlew connectedAndroidTest` (instrumented)
|
||||
- Rust: `cargo nextest run` in the `rust`directory
|
||||
- Run single test: `./gradlew test --tests "ExampleUnitTest.testName"`
|
||||
|
||||
# Code Style
|
||||
- Kotlin: Follow Kotlin conventions with 4-space indentation
|
||||
- Rust: Follow Rust idioms, use `thiserror` for error types and `anyhow` for propagation.
|
||||
- Rust code should conform to the style guidelines enforced by `cargo fmt` and `cargo clippy`.
|
||||
- in particular, don't generate code like `documents::Artifacts::new()` that has fully-qualified type names; instead prefer to `use documents::Artifacts` and then have just `Artifacts::new()`
|
||||
- Naming: camelCase for variables/functions, PascalCase for classes/interfaces
|
||||
- Errors: Use typed errors with meaningful messages
|
||||
- Architecture: Jetpack Compose for UI, JNI for Rust integration
|
||||
- Types: Use explicit types for public APIs, leverage type inference for local variables
|
||||
Reference in New Issue
Block a user