c056929
build: replace llm-tag with plain git tag
Amolith created
c056929
build: replace llm-tag with plain git tag
Amolith created
b5e0aff
build: add cross-compile and release upload tasks
Add Taskfile tasks for cross-compiled release builds:
- release:build: compiles for linux/{amd64,arm64}, darwin/{amd64,arm64},
windows/amd64, and freebsd/amd64 into dist/
- release:pack: UPX-compresses Linux binaries (~65% size reduction);
other targets lack 64-bit UPX support
- release:upload: hands off dist/* to the release fish function
- release:all: chains tag → build → pack → upload
Also adds dist/ to .gitignore and clean task.
Amolith created
e1585a3
docs: update git-format reference
Rename from formatted-commit to git-format and update URL from https://git.secluded.site/formatted-commit to https://git.secluded.site/git-format
Amolith created
378b153
docs: update installation instructions to use mise
Replace bin with mise as the recommended tool for automated CLI management. The old bin install command has been replaced with mise's use -g go: syntax which provides equivalent functionality.
Amolith created
4b8da2e
feat(auth): add LUNE_ACCESS_TOKEN env var support
Enable authentication via LUNE_ACCESS_TOKEN environment variable as an alternative to the system keyring. The env var takes precedence over keyring for explicit override capability. - GetToken() now checks env var first, then falls back to keyring - New() delegates to GetToken() for single source of truth - MCP command simplified to use centralized GetToken()
Amolith created
010a1ed
feat(mcp): add OpenWorldHint and Title to tools
Add OpenWorldHint (true) and human-readable Title to all 7 MCP tools: - get_timestamp: Parse date - add_timeline_note: Add timeline note - track_habit: Track habit - create: Create entity - update: Update entity - delete: Delete entity - query: Query entities The OpenWorldHint indicates these tools interact with external APIs (Lunatask), and titles provide nicer UI labels for MCP clients.
Amolith created
9e530e7
chore(deps): bump go-lunatask to v0.1.0
Amolith created
6eac7df
chore(deps): bump dependencies
- golang.org/x/crypto v0.46.0 → v0.47.0 - al.essio.dev/pkg/shellescape v1.5.1 → v1.6.0 - github.com/charmbracelet/x/* updates - github.com/clipperhouse/* updates - github.com/godbus/dbus/v5 v5.1.0 → v5.2.2 - golang.org/x/oauth2 v0.30.0 → v0.34.0 - golang.org/x/sys v0.39.0 → v0.40.0 - golang.org/x/text v0.32.0 → v0.33.0 Assisted-by: Kimi K2.5 via Crush
Amolith created
676c697
docs: update cross-promo links
Assisted-by: Claude Opus 4.5 via Amp
Amolith created
1eb3e4d
feat: add workflow-aware status validation
When creating or updating tasks, status is now validated against the area's workflow. Error messages include valid options for that workflow: invalid status for workflow: 'foo' for Kanban; valid: later, next, ... MCP tools (create/update) validate when area context is available. The query tool's hardcoded status list is replaced with a dynamic one. CLI (task add/update) passes resolved area to status validation. When no area is specified, falls back to listing all valid statuses. Assisted-by: Claude Opus 4.5 via Crush
Amolith created
3ae5dc9
feat(area): add hint when goal list is truncated
When any area has more than 3 goals, the table shows (+N). Users may not realize they can dig deeper. Now a conditional hint appears below the table: (+N) = more goals; run 'lune goal list -a AREA' to see all Only shown when truncation occurs, keeping the common case clean. Also documents in AGENTS.md that dim text (ANSI 8) should be avoided for accessibility—it's unreadable in many terminal color schemes. Assisted-by: Claude Opus 4.5 via Crush
Amolith created
b44974a
fix(cli): pass context to done shortcut
The done command copies UpdateCmd to set --status=completed but wasn't forwarding the context, causing 'net/http: nil Context' errors. Assisted-by: Claude Opus 4.5 via Crush
Amolith created
ca99c6d
docs(cli): add completed to status flag help
Assisted-by: GLM 4.7 via Claude Code
Amolith created
e2bfc3f
feat(mcp): add LUNE_ACCESS_TOKEN env var fallback
Enables MCP server to run in containerized environments (e.g., Home Assistant addons) where system keyrings aren't available. Keyring errors are now silently ignored, falling back to the LUNE_ACCESS_TOKEN environment variable. Assisted-by: Claude Opus 4.5 via Crush <crush@charm.land>
Amolith created
68ab2b0
refactor(completion): use go-lunatask All*() funcs
Add TaskStatuses, Priorities, and Motivations completion functions using go-lunatask's All*() functions. Update Relationships to use AllRelationshipStrengths(). Replace completion.Static() calls and hardcoded 'started' strings with 'in-progress' to match go-lunatask's normalized enum values. Assisted-by: Claude Opus 4.5 via Crush <crush@charm.land>
Amolith created
0e4d155
refactor(mcp): add schemas and annotations
- Add InputSchema() with enum constraints for CRUD tools - Add ToolAnnotations() with behavioral hints (ReadOnlyHint, DestructiveHint, IdempotentHint) - Replace verbose descriptions with concise ones (schema conveys details) - Use jsonschema:"description" tags instead of jsonschema:"required" - Use go-lunatask All*() functions for type-safe enum values - Bump go-lunatask to v0.1.0-rc9.3 Assisted-by: Claude Opus 4.5 via Crush
Amolith created
4293ed6
refactor(dateutil): use strtotime for date parsing
Replace markusmobius/go-dateparser with KarpelesLab/strtotime for date parsing. The new library uses PHP strtotime syntax which is more widely documented and removes heavy dependencies (wazero, go-re2). - Add ParseInTZ for timezone-aware parsing - Update MCP timestamp tool to use timezone from handler - Update docs and help text with new syntax examples Assisted-by: Claude Opus 4.5 via Crush <crush@charm.land>
Amolith created
efa8645
fix: prefer ldflags version over build info
Build info pseudo-versions (v0.1.0-rc.4.0.20251226...) were overriding the nicer git-describe format injected via ldflags. Assisted-by: Claude Sonnet 4 via Crush <crush@charm.land>
Amolith created
560cff9
feat(mcp): add optional Bearer token auth
Adds argon2id-hashed token authentication for SSE and HTTP transports. Tokens accepted via Authorization header or access_token query parameter (RFC 6750). Auth enabled by presence of token_hash in config. New command: lune mcp set-token Assisted-by: Claude Sonnet 4 via Crush <crush@charm.land>
Amolith created
5d8ac7f
fix: detect version from build info at runtime
Assisted-by: Claude Opus 4.5 via Crush
Amolith created
35848a1
refactor(mcp)!: consolidate 23 tools into 7
BREAKING CHANGE: Tool names have changed completely.
Before (23 tools): create_task, update_task, delete_task, list_tasks,
show_task, create_note, update_note, delete_note, list_notes, show_note,
create_person, update_person, delete_person, list_people, show_person,
add_timeline_note, track_habit, list_habits, list_areas, list_goals,
list_notebooks, add_journal_entry, get_timestamp
After (7 tools):
- create: entity={task, note, person, journal}
- update: entity={task, note, person}
- delete: entity={task, note, person}
- query: entity={task, note, person, area, goal, notebook, habit}
- track_habit: standalone action
- add_timeline_note: standalone action (extracted to timeline/)
- get_timestamp: standalone utility
Benefits:
- Clearer action-based semantics for LLM tool selection
- Reduced cognitive load (7 vs 23 tools)
- Consistent entity parameter across CRUD operations
- Config-based entities (area, goal, notebook, habit) now queryable
Also fixes track_habit to accept config keys, UUIDs, or deep links
(previously only accepted UUIDs).
Assisted-by: Claude Opus 4.5 via Crush
Amolith created
8268482
feat(mcp): scaffold consolidated CRUD tools
Add stub handlers for create, update, delete, and query tools that will replace the 23 per-entity tools with 7 consolidated tools: - create: task, note, person, journal - update: task, note, person - delete: task, note, person - query: all entities (default-disabled fallback for resources) Includes Entity* constants, ToolsConfig flags, and wiring in server.go. All handlers return "not yet implemented" pending migration. Assisted-by: Claude Sonnet 4 via Crush
Amolith created
28b2b0e
fix(mcp/task): require area_id in create_task
The Lunatask API requires an area_id when creating tasks, but the MCP tool incorrectly documented and typed it as optional. Assisted-by: Claude Opus 4.5 via Crush <crush@charm.land>
Amolith created
be95484
feat(mcp): add list resources and fallback tools
Resources:
- lunatask://notes, notes/pinned, notes/recent
- lunatask://notes/{notebook}, notes/{notebook}/pinned,
notes/{notebook}/recent
- lunatask://people, people/{relationship}
Fallback tools (default-disabled):
- list_notebooks, list_habits, list_areas, list_goals
- show_person
Default-disable list_notes and list_people tools since resources are now
the primary read interface.
Assisted-by: Claude Sonnet 4 via Crush
Amolith created
be07926
docs: update architecture in AGENTS.md
Add existing MCP tools and resources to the architecture diagram that were missing from the list. Assisted-by: Claude Opus 4.5 via Crush
Amolith created
22a0076
feat(mcp): add semantic task list resources
Add MCP resources for filtered task lists, providing semantic views like
today, overdue, now, and high-priority without requiring the generic
list_tasks tool.
Static resources:
- lunatask://tasks/all (discouraged - expensive)
- lunatask://tasks/today
- lunatask://tasks/overdue
- lunatask://tasks/next-7-days
- lunatask://tasks/high-priority
- lunatask://tasks/now
- lunatask://tasks/recent-completions
Area-scoped templates (discovered via resources/templates/list):
- lunatask://area/{area}/tasks
- lunatask://area/{area}/today
- lunatask://area/{area}/overdue
- etc.
The {area} parameter accepts config keys or UUIDs.
Also default-disables list_tasks tool since resources are now the
primary interface for task discovery.
Assisted-by: Claude Opus 4.5 via Crush
Amolith created
892a225
feat(mcp): show_note tool, default-disable reads
Implements show_note as a default-disabled fallback for the
lunatask://note/{id} resource.
Also default-disables all "read" tools (show_task, show_note,
show_person, list_habits) since MCP resources are the primary read
interface. Tools serve as fallbacks for agents that don't support
resources.
Assisted-by: Claude Sonnet 4 via Crush
Amolith created
3959af1
feat(mcp): add tool enable/disable CLI flags
Mutually exclusive CLI flags for runtime control over MCP tool exposure: - --enabled-tools a,b,c: ignore config, enable only listed tools - --disabled-tools x,y,z: ignore config, enable everything except listed Tool names match the MCP tool names exactly (what the model sees). Validates tool names against known set before starting server. Assisted-by: Claude Sonnet 4 via Crush
Amolith created
bb0713b
feat(mcp): accept keys and deeplinks for area/goal
MCP task tools now accept config keys and lunatask:// deep links in addition to UUIDs for area_id and goal_id parameters. Resolution order: UUID → deep link → config key lookup. Adds validate.AreaRef() and validate.GoalRef() functions. Assisted-by: Claude Sonnet 4 via Crush
Amolith created
372fae1
feat(area): add workflow support for LLM guidance
Areas now store their Lunatask workflow type (kanban, now_later, etc.). The init wizard prompts for workflow selection with descriptions. MCP area resource exposes workflow metadata including valid statuses, and which fields (motivation, eisenhower, scheduling, priority) are relevant for each workflow. Assisted-by: Claude Sonnet 4 via Crush
Amolith created
a1e9167
feat(mcp): add person CRUD and timeline tools
Assisted-by: Claude Sonnet 4 via Crush
Amolith created
0444063
feat(person): make last name optional
Assisted-by: Claude Sonnet 4 via Crush
Amolith created
fc40b3f
feat(mcp): add note CRUD tools
Assisted-by: Claude Sonnet 4 via Crush
Amolith created
26a88ec
feat(mcp): add add_journal_entry tool
Assisted-by: Claude Sonnet 4 via Crush
Amolith created
d4c1e16
feat(mcp): add lunatask:// resource templates
Add MCP resource templates for reading individual resources:
- lunatask://task/{id} - task metadata
- lunatask://note/{id} - note metadata
- lunatask://person/{id} - person metadata
LLMs can now ReadResource using the same URI format as deep links.
Assisted-by: Claude Sonnet 4 via Crush
Amolith created
8dd80fe
refactor(mcp): add natural language tool outputs
- Add human-readable text content to all tool results - Remove duplicate ID fields; use deep_link only - Reduces context window bloat for LLM clients - structuredContent still available for programmatic use Assisted-by: Claude Sonnet 4 via Crush
Amolith created
edbac80
docs: document MCP server architecture
Assisted-by: Claude Opus 4.5 via Crush
Amolith created
e6174c4
refactor(mcp): use go-lunatask v0.1.0-rc9.1 API
Replace deprecated ParseDeepLink with ParseReference across all reference-handling code. Replace local task filtering logic with lunatask.FilterTasks in both CLI and MCP list handlers. Extract parsing and builder application into separate helpers (parseCreateInput, parseUpdateInput, applyToTaskBuilder, applyToTaskUpdateBuilder) to reduce handler complexity. Add nilerr exclusion for internal/mcp/ since MCP handlers return errors in the result tuple rather than as Go errors. Assisted-by: Claude Sonnet 4 via Crush
Amolith created
977ae8b
feat(mcp): add MCP server mode
Adds `lune mcp -t [stdio|sse|http]` to run lune as an MCP server, replacing the separate lunatask-mcp-server project. Tools: - get_timestamp: parse natural language dates - create_task, update_task, delete_task, list_tasks, show_task - track_habit Resources: - lunatask://areas (areas and goals from config) - lunatask://habits (habits from config) - lunatask://notebooks (notebooks from config) Config: - [mcp] section with host, port, timezone - [mcp.tools] section to enable/disable individual tools Assisted-by: Claude Opus 4.5 via Crush <crush@charm.land>
Amolith created
f5ef0f6
feat(habit): add list subcommand
Assisted-by: Claude Opus 4.5 via Crush
Amolith created
3b81414
refactor: inject version from main at build time
Moves version declaration to main.go with a default of "dev", allowing build-time injection via ldflags while keeping cmd.Execute() pure. Assisted-by: Claude Opus 4.5 via Crush <crush@charm.land>
Amolith created
5c2f27c
feat(ui): support non-interactive mode, NO_COLOR
Detect non-interactive environments (piped output, scripts, CI) and
disable colors, styles, spinners, and table borders automatically.
Detection priority:
1. NO_COLOR env var (non-empty = plain)
2. FORCE_COLOR env var (explicit override)
3. TERM=dumb (plain)
4. TTY detection via isatty (non-TTY = plain)
Config ui.color setting ("auto", "always", "never") is respected.
Also adds `lune init --generate-config` for non-interactive setup, which
writes a commented example config for manual editing.
References: lunatask://tasks/7c9f3a83-db39-4bb4-afcb-bb73646e91bb
Assisted-by: Claude Sonnet 4 via Crush
Amolith created
01e35d7
feat(ui): add spinner feedback for network calls
Wrap all API calls with huh/spinner for immediate visual feedback. - Add generic Spin[T] and SpinVoid helpers in internal/ui/spinner.go - Update all commands making network calls to use the helpers - Use proper ellipsis (…) in spinner titles Assisted-by: Claude Sonnet 4 via Crush
Amolith created
aa39ea8
docs(license): add 'em
Amolith created
12c5822
docs: add README
Assisted-by: Claude Opus 4.5 via Crush
Amolith created
e75a60c
chore: add SPDX headers and ignore .task
Assisted-by: Claude Opus 4.5 via Crush
Amolith created
40ea681
refactor(deps): upgrade go-lunatask, drop deeplink
Delete internal/deeplink/ package and simplify internal/validate/ by delegating to new go-lunatask v0.1.0-rc10 functions: ParseDeepLink, BuildDeepLink, ParseTaskStatus, ParseMotivation, ParseRelationshipStrength. Removes ~250 lines of code now provided upstream. Assisted-by: Claude Sonnet 4 via Crush
Amolith created
a5c38a3
feat(init): auto-prompt for token in reconfigure
When running `lune init` with an existing config but no keyring token (e.g., after copying config to a new device), immediately prompt for the access token before showing the configuration menu. Also validates existing tokens and offers to replace them if ping fails. Assisted-by: Claude Sonnet 4 via Crush
Amolith created
6afafbf
docs: expand AGENTS.md with non-obvious patterns
- Complete architecture section with all internal packages - Document API client builder pattern - Add gotchas: enum validation, date parsing, stdin convention, deep links, config key lookups - Update testing section with actual patterns - Document init wizard navigation Assisted-by: Claude Sonnet 4 via Crush
Amolith created
191aa60
feat(person): implement person module
Fully implement person commands with Lunatask API integration: - add: create people with relationship strength and source - list: filter by relationship/source, table and JSON output - show: display person details (renamed from get) - update: modify names and relationship strength - delete: with confirmation prompt - timeline: add notes to person's memory timeline Register shell completions for relationship flag. Assisted-by: Claude Sonnet 4 via Crush
Amolith created