| Crates.io | thoughts-tool |
| lib.rs | thoughts-tool |
| version | 0.7.0 |
| created_at | 2025-08-07 01:54:41.67007+00 |
| updated_at | 2026-01-05 17:25:19.524772+00 |
| description | Flexible thought management using filesystem mounts for git repositories |
| homepage | https://github.com/allisoneer/agentic_auxilary |
| repository | https://github.com/allisoneer/agentic_auxilary |
| max_upload_size | |
| id | 1784596 |
| size | 629,742 |
A flexible thought management tool that helps developers organize notes and documentation across git repositories using filesystem mounts (mergerfs on Linux, fuse-t on macOS) with a three-space architecture.
Thoughts Tool creates a unified filesystem view of documentation through three distinct mount spaces:
It automatically mounts and syncs git-backed directories, allowing you to access all your project notes, decisions, and documentation from a single location while keeping them versioned with their respective repositories.
apt install mergerfs or yum install mergerfs)brew install macos-fuse-t/homebrew-cask/fuse-t)# Clone the repository
git clone <repository-url>
cd thoughts_tool
# Build the project
just build
# Install globally
cargo install --path .
cd /path/to/your/project
thoughts init
This creates:
.thoughts/ directory for configuration.thoughts-data/ directory for mount storagethoughts/, context/, and references/ pointing to the mount spacesEdit .thoughts/config.json to add your personal workspace repository:
{
"version": "2.0",
"thoughts_mount": {
"remote": "git@github.com:user/my-thoughts.git",
"sync": "auto"
}
}
# Add a team documentation repository
thoughts mount add https://github.com/team/docs-repo.git team-docs
# Add a reference repository (automatically organized by org/repo)
thoughts references add https://github.com/rust-lang/rust
# Mount everything configured
thoughts mount update
# Sync all git repositories
thoughts sync --all
# Initialize a work directory for current branch
thoughts work init
thoughts [COMMAND] [OPTIONS]
init - Initialize thoughts for a repositorysync [<mount>] - Sync specific mount or all with --allstatus - Show current mount status and configurationmount add <source> <name> - Add a new context mountmount remove <name> - Remove a context mountmount list - List all configured mountsmount update - Update/refresh all active mountsmount clone <url> [<path>] - Clone a repository to local pathreferences add <url> - Add a reference repositoryreferences remove <url> - Remove a reference repositoryreferences list - List all configured referencesreferences sync - Clone missing reference repositorieswork init - Initialize work directory for current branchwork complete - Move current work to completed with date rangework list [--recent N] - List active and completed work directoriesconfig create - Create a new configurationconfig show - Display current configurationconfig edit - Edit configuration with $EDITORconfig validate - Validate configuration syntaxThoughts Tool uses a repository-based configuration system with automatic v1 to v2 migration support.
The configuration file (.thoughts/config.json) defines:
{
"version": "2.0",
"mount_dirs": {
"thoughts": "thoughts",
"context": "context",
"references": "references"
},
"thoughts_mount": {
"remote": "git@github.com:user/my-thoughts.git",
"subpath": "projects/current",
"sync": "auto"
},
"context_mounts": [
{
"remote": "https://github.com/team/shared-docs.git",
"mount_path": "team-docs",
"sync": "auto"
},
{
"remote": "git@github.com:company/architecture.git",
"mount_path": "architecture",
"subpath": "docs",
"sync": "auto"
}
],
"references": [
"https://github.com/rust-lang/rust",
"git@github.com:tokio-rs/tokio.git"
]
}
Automatic migration happens on the first write operation (e.g., thoughts init, thoughts mount add, thoughts references add):
.thoughts/config.v1.bak-*.json)sync: none or paths starting with references/ → become referencesYou can also explicitly migrate with:
thoughts config migrate-to-v2 --dry-run # Preview
thoughts config migrate-to-v2 --yes # Execute
For detailed migration instructions, see MIGRATION_V1_TO_V2.md.
The tool organizes all mounts into three distinct spaces:
Thoughts Space (thoughts/)
completed/ directory for archivesContext Space (context/)
References Space (references/)
{org}/{repo} structureThe tool automatically detects your platform and uses the appropriate mount technology:
MountSpace enum for mount identification.thoughts-data/~/.thoughts/repos.jsonthoughts_tool automatically detects and handles git worktrees. When you run thoughts init in a worktree:
# Initialize main repository first
cd /path/to/main/repo
thoughts init
# Create a worktree
git worktree add ../my-feature-branch
# Initialize the worktree (shares main repo's mounts)
cd ../my-feature-branch
thoughts init
Worktrees use a simple symlink approach:
.thoughts-data -> Points to main repository's .thoughts-datathoughts, context, and references symlinks are already tracked in gitThis ensures:
# Run checks (fmt + clippy)
just check
# Run tests
just test
# Build the project
just build
# Format code
just fmt
# Output mode variants
OUTPUT_MODE=normal just test # Full cargo output
OUTPUT_MODE=verbose just test # Verbose output
# Run specific test types via cargo
cargo test --lib # Unit tests only
THOUGHTS_INTEGRATION_TESTS=1 just test # Integration tests included
thoughts_tool/
├── src/
│ ├── commands/ # CLI command implementations
│ ├── config/ # Configuration management
│ ├── git/ # Git integration
│ ├── mount/ # Mount implementations
│ ├── platform/ # Platform detection and abstraction
│ └── utils/ # Utility functions
├── tests/ # Integration tests
└── justfile # Build automation
All branch-specific workspace operations are blocked on 'main' and 'master' branches. Create a feature branch first, then re-run:
git checkout -b my/feature
thoughts work init
Legacy weekly directories (e.g., 2025-W01/) are automatically archived to completed/ on first run. If a completed item already exists with the same name, a -migrated suffix will be used to avoid collisions.
Branch-agnostic commands like thoughts work list and thoughts references list remain available on main.
The work commands help organize your documentation by branch:
# On feature branch - creates thoughts/my-feature/
thoughts work init
# Complete work - moves to thoughts/completed/2025-01-15_to_2025-01-22_my-feature/
thoughts work complete
Each work directory includes:
research/ - Investigation notes and findingsplans/ - Design documents and implementation plansartifacts/ - Generated files, diagrams, exportsmanifest.json - Metadata about the work sessionReferences are read-only external repositories organized by org/repo:
# Add multiple references
thoughts references add https://github.com/rust-lang/rust
thoughts references add https://github.com/tokio-rs/tokio
# They mount to:
# references/rust-lang/rust/
# references/tokio-rs/tokio/
# Sync all references (clones if missing)
thoughts references sync
Mount specific subdirectories from larger repositories:
{
"thoughts_mount": {
"remote": "git@github.com:user/monorepo.git",
"subpath": "projects/current",
"sync": "auto"
},
"context_mounts": [{
"remote": "git@github.com:company/docs.git",
"mount_path": "api-docs",
"subpath": "api/v2",
"sync": "auto"
}]
}
If you encounter permission errors:
fuse groupThe tool will inform you if required mount utilities are missing:
When sync conflicts occur:
thoughts sync againContributions are welcome! Please feel free to submit issues and pull requests.
just testjust fmtMIT - See LICENSE in the root of the repository.
Built with excellent Rust libraries: