โ† All skills
Tencent SkillHub ยท Content Creation

focusnoteapp

Add text to today's daily note in FocusNote as a new bullet point

skill openclawclawhub Free
0 Downloads
0 Stars
0 Installs
0 Score
High Signal

Add text to today's daily note in FocusNote as a new bullet point

โฌ‡ 0 downloads โ˜… 0 stars Unverified but indexed

Install for OpenClaw

Quick setup
  1. Download the package from Yavira.
  2. Extract the archive and review SKILL.md first.
  3. Import or place the package into your OpenClaw setup.

Requirements

Target platform
OpenClaw
Install method
Manual import
Extraction
Extract archive
Prerequisites
OpenClaw
Primary doc
SKILL.md

Package facts

Download mode
Yavira redirect
Package format
ZIP package
Source platform
Tencent SkillHub
What's included
SKILL.md

Validation

  • Use the Yavira download entry.
  • Review SKILL.md after the package is downloaded.
  • Confirm the extracted package contains the expected setup assets.

Install with your agent

Agent handoff

Hand the extracted package to your coding agent with a concrete install brief instead of figuring it out manually.

  1. Download the package from Yavira.
  2. Extract it into a folder your agent can access.
  3. Paste one of the prompts below and point your agent at the extracted folder.
New install

I downloaded a skill package from Yavira. Read SKILL.md from the extracted folder and install it by following the included instructions. Tell me what you changed and call out any manual steps you could not complete.

Upgrade existing

I downloaded an updated skill package from Yavira. Read SKILL.md from the extracted folder, compare it with my current installation, and upgrade it while preserving any custom configuration unless the package docs explicitly say otherwise. Summarize what changed and any follow-up checks I should run.

Trust & source

Release facts

Source
Tencent SkillHub
Verification
Indexed source record
Version
1.0.0

Documentation

ClawHub primary doc Primary doc: SKILL.md 16 sections Open source page

FocusNote: Add to Daily Note

This skill adds user-provided text to today's daily note in FocusNote as a new bullet point.

How It Works

Reads the FocusNote documents path from ~/.lucia/documents-path.txt Generates today's date in YYYY-MM-DD format Locates or creates today's daily note Adds the user's text as a new bullet point Updates the document's JSON structure files

Prerequisites

FocusNote app must be running (it creates ~/.lucia/documents-path.txt on startup) Node.js installed for running the helper script

Implementation

When the user asks to add text to their daily note, follow these steps:

Step 1: Read Documents Path

const fs = require("fs"); const path = require("path"); const os = require("os"); // Read the documents path from FocusNote's config file const focusnoteConfigPath = path.join( os.homedir(), ".lucia", "documents-path.txt", ); const documentsPath = fs.readFileSync(focusnoteConfigPath, "utf-8").trim();

Step 2: Generate Today's Date

const today = new Date(); const year = today.getFullYear(); const month = String(today.getMonth() + 1).padStart(2, "0"); const day = String(today.getDate()).padStart(2, "0"); const todayDocName = `${year}-${month}-${day}`;

Step 3: Locate Daily Note Folder

const dailyNotePath = path.join(documentsPath, "notes", todayDocName); const structurePath = path.join(dailyNotePath, "_structure.json"); const metadataPath = path.join(dailyNotePath, "_metadata.json"); const nodesDir = path.join(dailyNotePath, ".nodes");

Step 4: Create Daily Note If It Doesn't Exist

if (!fs.existsSync(dailyNotePath)) { // Create directory structure fs.mkdirSync(dailyNotePath, { recursive: true }); fs.mkdirSync(nodesDir, { recursive: true }); // Create metadata const metadata = { name: todayDocName, createdAt: Date.now(), updatedAt: Date.now(), }; fs.writeFileSync(metadataPath, JSON.stringify(metadata, null, 2)); // Create empty structure const structure = { rootNodeIds: [], deletedNodeIds: [], nodes: {}, }; fs.writeFileSync(structurePath, JSON.stringify(structure, null, 2)); }

Step 5: Create New Bullet Node

const { v4: uuidv4 } = require("uuid"); // npm install uuid // Generate unique node ID const nodeId = uuidv4(); const timestamp = Date.now(); // Create Lexical bullet structure const lexicalContent = { root: { children: [ { children: [ { children: [ { detail: 0, format: 0, mode: "normal", style: "", text: userText, // The text from the user type: "text", version: 1, }, ], direction: "ltr", format: "", indent: 0, type: "listitem", version: 1, value: 1, }, ], direction: "ltr", format: "", indent: 0, type: "list", version: 1, listType: "bullet", start: 1, tag: "ul", }, ], direction: "ltr", format: "", indent: 0, type: "root", version: 1, }, }; // Create node object const newNode = { id: nodeId, content: JSON.stringify(lexicalContent), isFolded: false, isTodo: false, isDone: false, isInProgress: false, isBlurred: false, backgroundColor: null, createdAt: timestamp, updatedAt: timestamp, };

Step 6: Save Node to Sharded Directory

// Shard by first 2 characters of node ID const shard = nodeId.substring(0, 2); const shardDir = path.join(nodesDir, shard); if (!fs.existsSync(shardDir)) { fs.mkdirSync(shardDir, { recursive: true }); } const nodeFilePath = path.join(shardDir, `node-${nodeId}.json`); fs.writeFileSync(nodeFilePath, JSON.stringify(newNode, null, 2));

Step 7: Update Structure File

// Read current structure const structure = JSON.parse(fs.readFileSync(structurePath, "utf-8")); // Add node to structure structure.rootNodeIds.push(nodeId); structure.nodes[nodeId] = { parentId: null, orderIndex: structure.rootNodeIds.length - 1, childIds: [], }; // Update timestamp structure.updatedAt = timestamp; // Save updated structure fs.writeFileSync(structurePath, JSON.stringify(structure, null, 2));

Complete Script Example

Here's a complete Node.js script you can use: #!/usr/bin/env node const fs = require("fs"); const path = require("path"); const os = require("os"); const { v4: uuidv4 } = require("uuid"); function addToDailyNote(userText) { try { // Step 1: Read documents path const focusnoteConfigPath = path.join( os.homedir(), ".lucia", "documents-path.txt", ); if (!fs.existsSync(focusnoteConfigPath)) { throw new Error( "FocusNote config file not found. Make sure FocusNote is running.", ); } const documentsPath = fs.readFileSync(focusnoteConfigPath, "utf-8").trim(); // Step 2: Generate today's date const today = new Date(); const year = today.getFullYear(); const month = String(today.getMonth() + 1).padStart(2, "0"); const day = String(today.getDate()).padStart(2, "0"); const todayDocName = `${year}-${month}-${day}`; // Step 3: Set up paths const dailyNotePath = path.join(documentsPath, "notes", todayDocName); const structurePath = path.join(dailyNotePath, "_structure.json"); const metadataPath = path.join(dailyNotePath, "_metadata.json"); const nodesDir = path.join(dailyNotePath, ".nodes"); // Step 4: Create daily note if needed if (!fs.existsSync(dailyNotePath)) { fs.mkdirSync(dailyNotePath, { recursive: true }); fs.mkdirSync(nodesDir, { recursive: true }); const metadata = { name: todayDocName, createdAt: Date.now(), updatedAt: Date.now(), }; fs.writeFileSync(metadataPath, JSON.stringify(metadata, null, 2)); const structure = { rootNodeIds: [], deletedNodeIds: [], nodes: {}, }; fs.writeFileSync(structurePath, JSON.stringify(structure, null, 2)); } // Step 5: Create new bullet node const nodeId = uuidv4(); const timestamp = Date.now(); const lexicalContent = { root: { children: [ { children: [ { children: [ { detail: 0, format: 0, mode: "normal", style: "", text: userText, type: "text", version: 1, }, ], direction: "ltr", format: "", indent: 0, type: "listitem", version: 1, value: 1, }, ], direction: "ltr", format: "", indent: 0, type: "list", version: 1, listType: "bullet", start: 1, tag: "ul", }, ], direction: "ltr", format: "", indent: 0, type: "root", version: 1, }, }; const newNode = { id: nodeId, content: JSON.stringify(lexicalContent), isFolded: false, isTodo: false, isDone: false, isInProgress: false, isBlurred: false, backgroundColor: null, createdAt: timestamp, updatedAt: timestamp, }; // Step 6: Save node file const shard = nodeId.substring(0, 2); const shardDir = path.join(nodesDir, shard); if (!fs.existsSync(shardDir)) { fs.mkdirSync(shardDir, { recursive: true }); } const nodeFilePath = path.join(shardDir, `node-${nodeId}.json`); fs.writeFileSync(nodeFilePath, JSON.stringify(newNode, null, 2)); // Step 7: Update structure const structure = JSON.parse(fs.readFileSync(structurePath, "utf-8")); structure.rootNodeIds.push(nodeId); structure.nodes[nodeId] = { parentId: null, orderIndex: structure.rootNodeIds.length - 1, childIds: [], }; structure.updatedAt = timestamp; fs.writeFileSync(structurePath, JSON.stringify(structure, null, 2)); console.log(`โœ… Added bullet to ${todayDocName}: "${userText}"`); return { success: true, documentName: todayDocName, nodeId }; } catch (error) { console.error("โŒ Error adding to daily note:", error.message); return { success: false, error: error.message }; } } // Example usage if (require.main === module) { const userText = process.argv.slice(2).join(" ") || "New bullet point"; addToDailyNote(userText); } module.exports = { addToDailyNote };

Usage Examples

User: "Add to my daily note: Finished the OpenClaw skill implementation" Assistant: I'll add that to your daily note. # Run the script node add-to-daily-note.js "Finished the OpenClaw skill implementation" Output: โœ… Added bullet to 2026-02-11: "Finished the OpenClaw skill implementation" User: "Add a reminder to call mom tomorrow" Assistant: I'll add that to today's note. node add-to-daily-note.js "Reminder to call mom tomorrow"

Installation

Save the script as add-to-daily-note.js in your OpenClaw skills directory Install dependencies: npm install uuid Make it executable: chmod +x add-to-daily-note.js

Notes

The skill creates a new bullet point each time it's called Bullets are added to the end of the daily note If the daily note doesn't exist, it will be created automatically The FocusNote app must be running for the documents path file to exist Changes are immediately visible when you open/refresh the daily note in FocusNote

Troubleshooting

Error: "FocusNote config file not found" Make sure FocusNote is running Check that ~/.lucia/documents-path.txt exists Bullets not appearing in FocusNote Try closing and reopening the daily note Check that the node files were created in .nodes/ directory Verify _structure.json was updated correctly

Category context

Writing, remixing, publishing, visual generation, and marketing content production.

Source: Tencent SkillHub

Largest current source with strong distribution and engagement signals.

Package contents

Included in package
1 Docs
  • SKILL.md Primary doc