Skip to content

feat: add hashtag tag support#52

Open
klukacin wants to merge 3 commits into
openclaw:mainfrom
klukacin:feat/hashtag-tags-support
Open

feat: add hashtag tag support#52
klukacin wants to merge 3 commits into
openclaw:mainfrom
klukacin:feat/hashtag-tags-support

Conversation

@klukacin
Copy link
Copy Markdown

@klukacin klukacin commented May 5, 2026

Summary

  • Adds hashtag-based tag parsing from trailing #tags in reminder titles
  • Adds remindctl tags, add --tag, edit --tag/--remove-tag/--clear-tags, and show --tag
  • Includes tags and titleWithoutTags in JSON output while preserving v0.2.0 metadata fields
  • Keeps v0.2.0 alarm, location, recurrence, all-day date, and open filter support

Test Plan

  • swift test
  • Manual CLI help check for root/add/edit/show tag options

Notes

This ports the previous tag-support work from #35 onto current main / v0.2.0-era commands and adds regression tests.

PeterRosdahl and others added 3 commits May 5, 2026 14:29
Add support for reading, writing, and filtering Apple Reminders tags.

Tags in Apple Reminders are stored as #hashtags in the reminder title
text. This PR adds first-class CLI support for working with them.

New features:
- `remindctl tags` - list all unique tags with counts
- `remindctl tags <name>` - list reminders matching a tag
- `remindctl add --tag <name>` - create reminders with tags
- `remindctl edit --tag <name>` - add tags to existing reminders
- `remindctl edit --remove-tag <name>` - remove specific tags
- `remindctl edit --clear-tags` - remove all tags
- `remindctl show --tag <name>` - filter reminders by tag
- Tags are included in JSON output (tags array + titleWithoutTags)

Tags can be specified as repeatable flags (--tag a --tag b) or
comma-separated (--tag a,b). Tag matching is case-insensitive.

Closes openclaw#18
@Carecovisk
Copy link
Copy Markdown

This feature would be great!

@clawsweeper clawsweeper Bot added rating: 🧂 unranked krab Not merge-ready due to missing proof or serious correctness/safety concerns. status: 📣 needs proof The PR needs real behavior proof before ClawSweeper can clear the contributor ask. P2 Normal priority bug or improvement with limited blast radius. merge-risk: 🚨 compatibility 🚨 Merging this PR could break existing users, config, migrations, defaults, or upgrades. labels May 21, 2026
@clawsweeper
Copy link
Copy Markdown

clawsweeper Bot commented May 21, 2026

Codex review: needs real behavior proof before merge.

Latest ClawSweeper review: 2026-05-22 09:57 UTC / May 22, 2026, 5:57 AM ET.

Workflow note: Future ClawSweeper reviews update this same comment in place.

How this review workflow works
  • ClawSweeper keeps one durable marker-backed review comment per issue or PR.
  • Re-runs edit this comment so the latest verdict, findings, and automation markers stay together instead of adding duplicate bot comments.
  • A fresh review can be triggered by eligible @clawsweeper re-review comments, exact-item GitHub events, scheduled/background review runs, or manual workflow dispatch.
  • PR/issue authors and users with repository write access can comment @clawsweeper re-review or @clawsweeper re-run on an open PR or issue to request a fresh review only.
  • Maintainers can also comment @clawsweeper review to request a fresh review only.
  • Fresh-review commands do not start repair, autofix, rebase, CI repair, or automerge.
  • Maintainer-only repair and merge flows require explicit commands such as @clawsweeper autofix, @clawsweeper automerge, @clawsweeper fix ci, or @clawsweeper address review.
  • Maintainers can comment @clawsweeper explain to ask for more context, or @clawsweeper stop to stop active automation.

Summary
The branch adds trailing-hashtag tag parsing, tag add/edit/show CLI surfaces, JSON tag fields, and tag helper/help tests.

Reproducibility: not applicable. this is a feature PR rather than a reported current-main bug. Current main source/docs show no tag command or tag fields, and the remaining question is product direction.

PR rating
Overall: 🧂 unranked krab
Proof: 🧂 unranked krab
Patch quality: 🧂 unranked krab
Summary: Missing real behavior proof and a P1 product-fit blocker make this PR not quality-ready for merge.

Rank-up moves:

  • Ask maintainers whether to close this as a repeat of the rejected title-hashtag design or rescope it to plain-text notes-prefix metadata.
  • If maintainers approve a rescope, add redacted terminal output or a recording showing the real add/edit/show/tags flow against Reminders.
What the crustacean ranks mean
  • 🦀 challenger crab: rare, exceptional readiness with strong proof, clean implementation, and convincing validation.
  • 🦞 diamond lobster: very strong readiness with only minor maintainer review expected.
  • 🐚 platinum hermit: good normal PR, likely mergeable with ordinary maintainer review.
  • 🦐 gold shrimp: useful signal, but proof or patch confidence is still limited.
  • 🦪 silver shellfish: thin signal; proof, validation, or implementation needs work.
  • 🧂 unranked krab: not merge-ready because proof is missing/unusable or there are serious correctness or safety concerns.
  • 🌊 off-meta tidepool: rating does not apply to this item.

Shiny media proof means a screenshot, video, or linked artifact directly shows the changed behavior. Runtime, network, CSP, and security claims still need visible diagnostics.

Real behavior proof
Needs real behavior proof before merge: The PR body lists swift test and a manual help check, but provides no after-fix real CLI output, screenshot, recording, logs, or linked artifact; proof should redact private reminder data, IPs, API keys, phone numbers, and non-public endpoints, and updating the PR body should trigger a fresh ClawSweeper review or a maintainer can comment @clawsweeper re-review. After adding proof, update the PR body; ClawSweeper should re-review automatically. If it does not, the PR author or someone with repository write access can comment @clawsweeper re-review.

Risk before merge

  • Merging this would create first-class CLI tag semantics by appending and parsing title hashtags even though current docs and the linked collaborator decision say native Reminders tags are not available through EventKit.
  • Users could reasonably mistake the new --tag surface for native Reminders tag or Smart List support, while it actually mutates reminder titles as remindctl-specific metadata.
  • The JSON reminder output shape would add a wrapper with tag fields; that may be acceptable only if maintainers deliberately reverse or rescope the current product boundary.
  • Contributor proof is absent beyond claimed tests and a help check; no redacted terminal output, recording, or artifact shows add/edit/show/tags working against real Reminders data.

Maintainer options:

  1. Keep title-hashtag support out (recommended)
    Close or hold this PR unless maintainers explicitly reverse the prior decision and accept non-native title metadata as a supported contract.
  2. Rescope to notes-prefix metadata
    Replace the title-hashtag feature with a clearly named notes-prefix parser/filter and update docs/tests around plain-text metadata semantics.
  3. Accept the semantic change deliberately
    If maintainers want title hashtags anyway, require docs, compatibility notes, and real behavior proof before merge.

Next step before merge
Needs maintainer judgment because this repeats a prior title-hashtag implementation that a collaborator closed as not planned; automation should not choose a new tag metadata contract.

Security
Cleared: The diff does not touch CI, dependencies, secrets, packaging, downloaded artifacts, or other code execution supply-chain paths.

Review findings

  • [P1] Do not reintroduce title hashtags as tag support — Sources/remindctl/Commands/AddCommand.swift:40-45
Review details

Best possible solution:

Keep the current EventKit boundary; if maintainers want tag-like metadata, pursue a separately named notes-prefix parser/filter that clearly documents plain-text metadata rather than native Reminders tags.

Do we have a high-confidence way to reproduce the issue?

Not applicable; this is a feature PR rather than a reported current-main bug. Current main source/docs show no tag command or tag fields, and the remaining question is product direction.

Is this the best way to solve the issue?

No; this branch ports the title-hashtag design already rejected in #35 and conflicts with the documented EventKit boundary. A safer direction is a clearly scoped notes-prefix metadata parser if maintainers want non-native tag-like filtering.

Label justifications:

  • P2: This is a normal user-facing feature PR with limited blast radius, but it conflicts with a recent product-boundary decision.
  • merge-risk: 🚨 compatibility: Merging would introduce a new tag contract that mutates titles and may be confused with native Reminders tags despite current docs saying those are unsupported.
  • rating: 🧂 unranked krab: Current PR rating is 🧂 unranked krab because proof is 🧂 unranked krab, patch quality is 🧂 unranked krab, and Missing real behavior proof and a P1 product-fit blocker make this PR not quality-ready for merge.
  • status: 📣 needs proof: The PR needs real behavior proof before ClawSweeper can clear the contributor ask. Needs real behavior proof before merge: The PR body lists swift test and a manual help check, but provides no after-fix real CLI output, screenshot, recording, logs, or linked artifact; proof should redact private reminder data, IPs, API keys, phone numbers, and non-public endpoints, and updating the PR body should trigger a fresh ClawSweeper review or a maintainer can comment @clawsweeper re-review. After adding proof, update the PR body; ClawSweeper should re-review automatically. If it does not, the PR author or someone with repository write access can comment @clawsweeper re-review.

Full review comments:

  • [P1] Do not reintroduce title hashtags as tag support — Sources/remindctl/Commands/AddCommand.swift:40-45
    The linked collaborator decision for feat: add tags (hashtag) support #35 and Feature Request - Support Tags and Smart Lists #18 rejected this title-hashtag approach because it is remindctl-specific title text, not native Reminders tags or Smart List metadata. Adding --tag here would make the CLI create misleading title mutations; remove this surface or rescope it as a clearly named plain-text metadata feature before merge.
    Confidence: 0.91

Overall correctness: patch is incorrect
Overall confidence: 0.93

What I checked:

  • Current docs boundary: Current main documents that native Reminders tags and smart lists are not exposed through EventKit and would require Apple API support or a separate non-EventKit backend. (README.md:220, 883ae257911e)
  • Current skill boundary: The repository skill says not to use remindctl when the user needs native Reminders tags or smart lists. (SKILL.md:25, 883ae257911e)
  • Current CLI has no tag command: Current main registers show/list/add/edit/complete/delete/status/authorize only, with no TagsCommand in the router. (Sources/remindctl/CommandRouter.swift:13, 883ae257911e)
  • Current source has no tag implementation: Repository search on current main found no TagsCommand, titleWithoutTags, --tag, --remove-tag, or --clear-tags implementation in Sources or Tests. (883ae257911e)
  • Related feature request closed as not planned: A collaborator closed Feature Request - Support Tags and Smart Lists #18 after stating EventKit exposes no public tag or smart-list API and title hashtags would misrepresent what the CLI can modify.
  • Earlier matching PR closed unmerged: The earlier title-hashtag implementation at feat: add tags (hashtag) support #35 was closed unmerged with a collaborator comment rejecting first-class tag support implemented as reminder title text.

Likely related people:

  • steipete: He authored the current EventKit-backed model/docs history, recently touched adjacent command behavior, and closed the related issue and earlier PR with the non-native tag-support decision. (role: collaborator decision author and recent area contributor; confidence: high; commits: 1aff71567c38, 883ae257911e; files: README.md, Sources/RemindCore/Models.swift, Sources/remindctl/CommandRouter.swift)
  • Wenyou Yi: He added the remindctl skill text that routes users away from native Reminders tags and smart lists, which is directly relevant to this product boundary. (role: adjacent docs contributor; confidence: medium; commits: f3cd4eb68377; files: SKILL.md)
  • PeterRosdahl: He authored the earlier title-hashtag implementation that this PR ports forward, so his work explains the branch provenance even though it is not current-main behavior. (role: prior unmerged implementation author; confidence: medium; commits: 14884afd76c3; files: Sources/RemindCore/Models.swift, Sources/remindctl/Commands/AddCommand.swift, Sources/remindctl/Commands/TagsCommand.swift)

Codex review notes: model gpt-5.5, reasoning high; reviewed against 883ae257911e.

@clawsweeper
Copy link
Copy Markdown

clawsweeper Bot commented May 21, 2026

ClawSweeper PR egg

🎁 Pass real behavior proof to wake the egg and unlock a hatchable treat.

Where did the egg go?
  • The egg game starts only after the PR passes the real-behavior proof check.
  • Before that, no creature or rarity is rolled. The treat waits for real proof.
  • This is still just collectible flavor: proof affects review readiness, not creature quality.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

merge-risk: 🚨 compatibility 🚨 Merging this PR could break existing users, config, migrations, defaults, or upgrades. P2 Normal priority bug or improvement with limited blast radius. rating: 🧂 unranked krab Not merge-ready due to missing proof or serious correctness/safety concerns. status: 📣 needs proof The PR needs real behavior proof before ClawSweeper can clear the contributor ask.

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants