Commit log

d280a45 feat(config): add per-tool enable/disable toggles

Click to expand commit body
Adds [tools] section to config with boolean toggles for each MCP tool.
All tools enabled by default; conditionally registered based on config.

Wizard uses multi-select checkbox UI for tool selection during fresh
setup and reconfiguration. Example config and summary updated
accordingly.

Also fixes stale module paths in exhaustruct exclusions and disables
ireturn linter (interface returns are intentional in shared package).

Assisted-by: Claude Opus 4.5 via Crush

Amolith created

ba57938 chore: migrate URLs, use fang

Click to expand commit body
Also integrates fang for version handling and fixes build targets
to use root package so ldflags work correctly.

Assisted-by: Claude Opus 4.5 via Crush <crush@charm.land>

Amolith created

cbb39bc refactor(cli): restructure with Cobra subcommands

Click to expand commit body
- Add 'serve' subcommand for starting MCP server (stdio/sse/http)
- Add 'config' subcommand for interactive setup wizard
- Move config loading to internal/config with XDG support
- Add internal/ui for styled terminal output
- Add internal/client for Lunatask API wrapper

Assisted-by: Claude Opus 4.5 via Crush <crush@charm.land>

Amolith created

c4cdbfd refactor(sdk): migrate to official MCP Go SDK

Click to expand commit body
- Replace mark3labs/mcp-go with modelcontextprotocol/go-sdk
- Add typed Input/Output structs for all tool handlers
- Move validation logic to go-lunatask client (ParsePriority, etc.)
- Update prose to reference "resources" instead of "tools"

Assisted-by: Claude Opus 4.5 via Crush <crush@charm.land>

Amolith created

3bb2d7c docs: reflect package-per-tool refactor

Click to expand commit body
Update architecture section with expanded tools/ directory tree showing
specific package purposes. Remove placeholder context7 link template and
revise tool creation instructions.

Assisted-by: Claude Opus 4.5 via Crush <crush@charm.land>

Amolith created

c025767 refactor(tools): split into package-per-tool

Click to expand commit body
Reorganize tools/ from flat files into package-per-tool structure:
- tools/shared/ for interfaces and helpers
- tools/{areas,habits,tasks,timestamp}/ with handler.go and prose.go

Separates schema structure from prose descriptions, fixes lll issues,
and prepares for expanding MCP tools/resources/prompts.

Also extracts cmd/ logic into focused functions and resolves all
remaining golangci-lint warnings with appropriate nolint directives.

Assisted-by: Claude Sonnet 4 via Crush

Amolith created

d6a4c4d refactor: resolve isolated lint issues

Click to expand commit body
- Add package doc comments
- Rename unused parameters to _
- Define static ErrTimezoneNotConfigured
- Rename short variables (b→builder, i→areaIdx/goalIdx)
- Fix exitAfterDefer by closing file before fatal
- Switch fmt.Print* to slog (fixes potential stdio conflict)

Assisted-by: Claude Sonnet 4 via Crush

Amolith created

494a637 chore: migrate from justfile to Taskfile

Click to expand commit body
Adds lint:fix, install, and release tasks.

Assisted-by: Claude Opus 4.5 via Crush

Amolith created

0aefa9d docs(readme): link to liberapay

Amolith created

345d7a4 refactor(cmd): use net.JoinHostPort for host:port

Click to expand commit body
Handles IPv6 addresses correctly and avoids redundant fmt.Sprintf calls.

Assisted-by: Claude Opus 4.5 via Crush

Amolith created

09dc476 refactor(style): auto-fix golangci-lint issues

Amolith created

9a5989b chore: add golangci-lint config

Click to expand commit body
Assisted-by: Claude Opus 4.5 via Crush

Amolith created

6bc319d refactor: use external go-lunatask package

Click to expand commit body
Remove internal lunatask/ package and depend on
git.secluded.site/go-lunatask instead. This allows the Lunatask API
client to be reused across projects.

Assisted-by: Claude Opus 4.5 via Crush

Amolith created

f81cb6a fix(lunatask): make Note.NotebookID optional

Click to expand commit body
Aligns response type with CreateNoteRequest now that notebooks are
optional.

Assisted-by: Claude Sonnet 4 via Crush

Amolith created

e00edfa feat(lunatask): add builder pattern for requests

Click to expand commit body
Fluent builders for: TaskBuilder, TaskUpdateBuilder, NoteBuilder,
JournalEntryBuilder, PersonBuilder, TimelineNoteBuilder.

Example: task := lunatask.NewTask("Call
mom").InArea(id).WithPriority(1).Build()

Assisted-by: Claude Sonnet 4 via Crush

Amolith created

ac612e6 feat(lunatask): add CreateJournalEntry endpoint

Click to expand commit body
Assisted-by: Claude Sonnet 4 via Crush

Amolith created

7aca3e8 feat(lunatask): improve notes API

Click to expand commit body
- GetNote: speculative implementation following existing patterns (API
may support it but undocumented)
- NotebookID: now optional in CreateNoteRequest per actual API behavior

Assisted-by: Claude Sonnet 4 via Crush

Amolith created

26d3a71 refactor(lunatask): use Date type for PerformedOn

Click to expand commit body
Aligns with ScheduledOn/DateOn pattern used elsewhere in the client.

Assisted-by: Claude Sonnet 4 via Crush

Amolith created

d5769f3 chore(licensing): add for crush config

Amolith created

2bc6166 feat(lunatask): add People and Timeline APIs

Click to expand commit body
People API: ListPeople, GetPerson, CreatePerson, DeletePerson
PersonTimelineNote API: CreatePersonTimelineNote

Assisted-by: Claude Sonnet 4 via Crush

Amolith created

c44428d feat(lunatask): add notes CRUD operations

Click to expand commit body
Implements Note types and Client methods:
- ListNotes with optional source/source_id filters
- CreateNote (returns nil on 204 for duplicates)
- UpdateNote
- DeleteNote

Assisted-by: Claude Sonnet 4 via Crush

Amolith created

31855af refactor(lunatask): idiomatic client API

Click to expand commit body
- doRequest returns status code; 204 is valid success
- Add generic doJSON[T] to reduce boilerplate
- Ping now returns *PingResponse with message
- Add Date type for date-only fields (YYYY-MM-DD)
- Task uses time.Time/Date instead of strings
- Add WithHTTPClient/WithBaseURL functional options
- Make Client fields private for encapsulation

Assisted-by: Claude Sonnet 4 via Crush

Amolith created

843183a docs: add API docs reference, remove Contributing

Click to expand commit body
Assisted-by: Claude Sonnet 4 via Crush

Amolith created

7e04c6f refactor(lunatask): add Ping, extract shared code

Click to expand commit body
- Move error types, APIError, and doRequest helper to client.go
- Add Ping() method for token verification
- Add ListTasksOptions with source_id filter support

Assisted-by: Claude Sonnet 4 via Crush

Amolith created

a156f97 refactor(lunatask): genericize task API client

Click to expand commit body
- Add typed errors (ErrNotFound, ErrUnauthorized, etc.) with APIError
  wrapper
- Use pointer types for nullable Task fields; add Name/Note for future
  E2EE support
- Add source_id to CreateTaskRequest for duplicate detection
- Create separate UpdateTaskRequest with all-optional fields
- Unify response types to return full Task object
- Add ListTasks and GetTask methods
- Move MCP-specific validation (name length, RFC3339, enums) to tools
  layer
- Remove validator dependency from client package

Assisted-by: Claude Sonnet 4 via Crush

Amolith created

635b5e8 chore(gopls): enable gofumpt, analyses, and hints

Click to expand commit body
Assisted-by: Claude Sonnet 4 via Crush

Amolith created

22cf801 docs(agents): condense and restructure guidelines

Click to expand commit body
Simplify AGENTS.md from 158 to 60 lines while preserving essential
information. Focus on actionable guidance rather than implementation
details. Add SPDX headers for REUSE compliance.

Assisted-by: Claude Opus 4.5 via Crush

Amolith created

15aede7 docs(collab): fix pr.pico.sh ls cmd

Amolith created

eb73805 feat(docs): add llm-oriented intro

Amolith created

dfb2c4b docs(readme): update collaboration guidelines

Click to expand commit body
Update repository project name from 'lunatask-mcp-server' to
'llm-projects' in the `pr.pico.sh` examples and links.

Removed alternative contribution methods (SourceHut, Radicle) to
simplify the collaboration guidelines, focusing solely on using
`pr.pico.sh` for patch requests.

Amolith created

4c27188 feat: add crush.json

Amolith created

76dc08a Document available MCP tools in README

Click to expand commit body
Added a comprehensive list of all available tools with their parameters
and descriptions to the README.md file.

- Documented get_timestamp tool
- Documented list_areas_and_goals tool
- Documented create_task tool with all parameters
- Documented update_task tool with all parameters
- Documented delete_task tool
- Documented list_habits_and_activities tool
- Documented track_habit_activity tool

This makes it easier for users to understand what tools are available
and how to use them.

Co-Authored-By: Crush <crush@charm.land>

Amolith and Crush created

5889508 feat: allow task updates without area_id change

Click to expand commit body
Co-Authored-By: Crush <crush@charm.land>

Amolith and Crush created

1388207 docs: refine prompt

Amolith created

cdfec83 feat: add Eisenhower Matrix field to task creation and updates

Click to expand commit body
Add support for Eisenhower Matrix quadrant classification in both
create_task and update_task operations. The field accepts human-readable
values that are translated to API integers:
- uncategorised (0) - clears the field
- both urgent and important (1)
- urgent, but not important (2)
- important, but not urgent (3)
- neither urgent nor important (4)

Includes proper validation and helpful error messages following the
existing priority field pattern.

Amolith created

efdf9eb fix: resolve validation discrepancies between create_task and update_task

Click to expand commit body
- Standardize estimate max value to 720 minutes (12 hours) across both tools
- Fix incorrect tool name references from get_task_timestamp to get_timestamp

Amolith created

969cacf feat: enhance MCP tool descriptions with comprehensive usage guidelines

Click to expand commit body
- Add detailed workflow instructions for all tools with proper sequencing
- Document enum constraints and parameter limits in natural language
- Include system prompt requirements for task creation workflow
- Clarify when to include optional parameters vs when to omit them
- Add speech-to-text interpretation guidance for better user experience

Amolith created

8d76de9 docs: link to lunatask

Amolith created

b1387ff docs: swap shields.io badge for reuse.software badge

Amolith created

1ec395d docs: add badges

Amolith created

e504fc1 docs(collab): remove unused section

Amolith created

cdec68d docs(collab): move section up, mention list

Amolith created

3c40fb7 docs: add contributions section

Amolith created

555271c docs: remove priority rules from readme

Amolith created

1bf9a24 chore(justfile): fix gofumpt command input

Click to expand commit body
Change gofumpt command in justfile to use '.' instead of './...' to format the
root directory and not only children directories.

Amolith created

736d411 fix(config): Correct multiple to singular terms in TOML config

Click to expand commit body
The TOML configuration keys `goals` and `areas` were incorrectly pluralized.
This commit renames them to the singular `goal` and `area` respectively to align
with the TOML parser's expectation for arrays of a single type.

Amolith created

8d481aa chore: Update justfile to use go modules and build cmd

Amolith created

c25ef0c fix: Remove duplicate handler methods

Amolith created

230872f refactor: Remove unused import and add newline

Amolith created

dfadd27 refactor: Remove unused handlers file

Amolith created