# Timesheets — Agent Guide > **Read `README.md` first** for a full description of the project, its > subcommands, config file format, and Joplin notebook structure. ## Package layout ``` timesheets/ ├── pyproject.toml ├── README.md ├── AGENTS.md ├── timesheets.example.toml └── src/timesheets/ ├── cli.py # argument parsing, main() entry point ├── parser.py # markdown table parsing, aggregation, date filtering ├── projects.py # project_map.json loading and key resolution ├── output.py # CSV writing, summary, stories, and status printing ├── config.py # TOML config file loading and key extraction ├── joplin.py # Joplin API integration (notebook traversal, note fetching) ├── status.py # day/week status calculations └── utils.py # shared low-level helpers (duration parsing, formatting, etc.) ``` Tests live in `tests/`, one file per source module: ``` tests/ ├── test_utils.py ├── test_parser.py ├── test_projects.py ├── test_config.py ├── test_output.py ├── test_joplin.py └── test_status.py ``` --- ## Package manager — uv All dependency management and script execution is done via [`uv`](https://docs.astral.sh/uv/). Do **not** use `pip` or `python` directly. | Task | Command | |---|---| | Install / sync dependencies | `uv sync` | | Add a runtime dependency | `uv add ` | | Add a dev-only dependency | `uv add --dev ` | | Run the CLI | `uv run timesheets ` | | Run any Python script | `uv run python