pressclaw 0.2.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
@@ -0,0 +1,120 @@
1
+ {
2
+ "id": "public-thinking",
3
+ "name": "PressClaw",
4
+ "description": "Turn conversations into published content. Private-first writing pipeline with style learning, audience testing, and platform adaptation — powered by your AI agent.",
5
+ "version": "0.2.0",
6
+ "main": "index.ts",
7
+ "configSchema": {
8
+ "type": "object",
9
+ "additionalProperties": false,
10
+ "properties": {
11
+ "baseUrl": {
12
+ "type": "string",
13
+ "description": "Public base URL for your site (used in RSS links)"
14
+ },
15
+ "publicPath": {
16
+ "type": "string",
17
+ "default": "/public",
18
+ "description": "URL path prefix for serving public content"
19
+ },
20
+ "notesDir": {
21
+ "type": "string",
22
+ "default": "",
23
+ "description": "Directory for markdown notes. Leave empty to use {workspace}/notes"
24
+ },
25
+ "outputDir": {
26
+ "type": "string",
27
+ "default": "",
28
+ "description": "Directory for generated HTML output. Leave empty to use {workspace}/public"
29
+ },
30
+ "siteTitle": {
31
+ "type": "string",
32
+ "default": "Your Thinking",
33
+ "description": "Title displayed on the site and in RSS feed"
34
+ },
35
+ "authorName": {
36
+ "type": "string",
37
+ "default": "",
38
+ "description": "Author name shown in post footers"
39
+ },
40
+ "dailyPrompt": {
41
+ "type": "object",
42
+ "additionalProperties": false,
43
+ "properties": {
44
+ "enabled": {
45
+ "type": "boolean",
46
+ "default": true,
47
+ "description": "Enable the daily content prompt cron job"
48
+ },
49
+ "schedule": {
50
+ "type": "string",
51
+ "default": "0 10 * * *",
52
+ "description": "Cron expression for when the daily prompt runs"
53
+ },
54
+ "timezone": {
55
+ "type": "string",
56
+ "default": "UTC",
57
+ "description": "Timezone for the cron schedule (e.g. America/New_York)"
58
+ },
59
+ "prompt": {
60
+ "type": "string",
61
+ "default": "Review yesterday's conversations and daily notes. Identify any interesting ideas, insights, or learnings worth sharing publicly. If you find something compelling, draft a short note (3-8 paragraphs) that distills the idea for a general audience. Use `openclaw notes new \"<title>\"` to create it, then write the content. Don't publish yet — just draft. If nothing stands out, that's fine — skip today.",
62
+ "description": "The prompt sent to the agent for the daily content generation task"
63
+ }
64
+ }
65
+ }
66
+ },
67
+ "uiHints": {
68
+ "baseUrl": {
69
+ "label": "Base URL",
70
+ "help": "The public URL where your site is accessible (e.g. https://thoughts.example.com). Used for generating absolute links in RSS.",
71
+ "sensitive": false
72
+ },
73
+ "publicPath": {
74
+ "label": "Public Path",
75
+ "help": "URL path prefix for serving content via the OpenClaw HTTP server (e.g. /public).",
76
+ "sensitive": false
77
+ },
78
+ "notesDir": {
79
+ "label": "Notes Directory",
80
+ "help": "Absolute path to your notes directory. Leave blank to default to {workspace}/notes.",
81
+ "sensitive": false
82
+ },
83
+ "outputDir": {
84
+ "label": "Output Directory",
85
+ "help": "Absolute path where generated HTML/RSS files are written. Leave blank to default to {workspace}/public.",
86
+ "sensitive": false
87
+ },
88
+ "siteTitle": {
89
+ "label": "Site Title",
90
+ "help": "Displayed in the page header and RSS feed title.",
91
+ "sensitive": false
92
+ },
93
+ "authorName": {
94
+ "label": "Author Name",
95
+ "help": "Shown in post footers. Can be left blank.",
96
+ "sensitive": false
97
+ },
98
+ "dailyPrompt.enabled": {
99
+ "label": "Enable Daily Prompt",
100
+ "help": "When enabled, a cron job will prompt your agent to review and draft notes on a schedule.",
101
+ "sensitive": false
102
+ },
103
+ "dailyPrompt.schedule": {
104
+ "label": "Daily Prompt Schedule",
105
+ "help": "Cron expression (e.g. '0 10 * * *' for 10:00 AM daily).",
106
+ "sensitive": false
107
+ },
108
+ "dailyPrompt.timezone": {
109
+ "label": "Daily Prompt Timezone",
110
+ "help": "IANA timezone name (e.g. UTC, America/New_York, Europe/Berlin).",
111
+ "sensitive": false
112
+ },
113
+ "dailyPrompt.prompt": {
114
+ "label": "Daily Prompt Text",
115
+ "help": "The prompt sent to the agent. Customize to match your writing style and interests.",
116
+ "sensitive": false
117
+ }
118
+ }
119
+ }
120
+ }
package/package.json ADDED
@@ -0,0 +1,45 @@
1
+ {
2
+ "name": "pressclaw",
3
+ "version": "0.2.0",
4
+ "description": "Turn conversations into published content. An OpenClaw plugin for private-first writing with style learning, audience testing, and platform adaptation.",
5
+ "main": "dist/index.js",
6
+ "types": "index.ts",
7
+ "files": [
8
+ "dist/",
9
+ "templates/",
10
+ "openclaw.plugin.json",
11
+ "README.md",
12
+ "LICENSE"
13
+ ],
14
+ "openclaw": {
15
+ "extensions": ["./dist/index.js"]
16
+ },
17
+ "scripts": {
18
+ "build": "npx esbuild index.ts --bundle --platform=node --outfile=dist/index.js --format=esm --external:node:*",
19
+ "prepublishOnly": "npm run build"
20
+ },
21
+ "keywords": [
22
+ "openclaw",
23
+ "openclaw-plugin",
24
+ "writing",
25
+ "blog",
26
+ "publishing",
27
+ "content",
28
+ "style",
29
+ "rss",
30
+ "markdown"
31
+ ],
32
+ "author": "Niklas Babel",
33
+ "license": "MIT",
34
+ "repository": {
35
+ "type": "git",
36
+ "url": "git+https://github.com/niklasbabel/pressclaw.git"
37
+ },
38
+ "homepage": "https://github.com/niklasbabel/pressclaw",
39
+ "bugs": {
40
+ "url": "https://github.com/niklasbabel/pressclaw/issues"
41
+ },
42
+ "engines": {
43
+ "node": ">=20"
44
+ }
45
+ }
@@ -0,0 +1,30 @@
1
+ ---
2
+ title: "Your First Note"
3
+ slug: "your-first-note"
4
+ status: private
5
+ published_at: null
6
+ tags: [example]
7
+ ---
8
+
9
+ # Your First Note
10
+
11
+ This is an example note created by the public-thinking plugin. Edit it, or create new notes with:
12
+
13
+ ```
14
+ openclaw notes new "My Great Idea"
15
+ ```
16
+
17
+ When you're ready to share a note publicly, publish it:
18
+
19
+ ```
20
+ openclaw notes publish your-first-note
21
+ ```
22
+
23
+ Notes start as **private** drafts. Only notes with `status: public` in their frontmatter will appear on your public stream.
24
+
25
+ ## Tips
26
+
27
+ - Write freely — everything stays private until you explicitly publish
28
+ - The frontmatter `tags` field helps you organize but isn't displayed yet
29
+ - Run `openclaw notes build` to regenerate the HTML site after manual edits
30
+ - Run `openclaw notes list` to see all your notes
@@ -0,0 +1,37 @@
1
+ [
2
+ {
3
+ "name": "structured",
4
+ "description": "Headers + sections — best for technical explanations",
5
+ "instructions": "Format with a clear hierarchy: a strong H1 title, 2-4 H2 sections that break down the idea logically. Each section should have 1-3 focused paragraphs. Use H3 sparingly for sub-points. Include a brief intro paragraph before the first section. End with a 'Takeaway' or 'Bottom Line' section. Total: 300-500 words."
6
+ },
7
+ {
8
+ "name": "list",
9
+ "description": "Numbered points with sub-details — best for actionable advice",
10
+ "instructions": "Open with 1-2 sentences framing the problem or context. Then present 3-7 numbered points, each with a bold lead-in phrase followed by 1-2 sentences of explanation. Points should be scannable — a reader skimming just the bold parts should get the gist. Close with a single-paragraph synthesis or call-to-action. Total: 250-450 words."
11
+ },
12
+ {
13
+ "name": "chunky",
14
+ "description": "Short paragraphs, rhythm-based — best for mobile/scrollable reading",
15
+ "instructions": "Write in short, punchy paragraphs of 1-3 sentences each. No headers. Create rhythm through paragraph length variation: short, medium, short, long, short. Use line breaks generously. Each paragraph should carry one thought. The pacing should feel like a conversation — quick, direct, breathing room between ideas. Total: 200-400 words."
16
+ },
17
+ {
18
+ "name": "minimal",
19
+ "description": "Dense prose, no decoration — best for expert audiences",
20
+ "instructions": "Write in dense, well-crafted prose. No headers, no bullet points, no bold text. 3-5 paragraphs of substantial length (4-6 sentences each). Assume the reader has deep context in the field — don't over-explain. Every sentence should carry weight. Prioritize precision and nuance over accessibility. Total: 300-500 words."
21
+ },
22
+ {
23
+ "name": "storytelling",
24
+ "description": "Narrative arc — best for experience-based posts",
25
+ "instructions": "Structure as a narrative: (1) Hook — a specific moment, scene, or problem that pulls the reader in. (2) Context — brief setup of what you were doing and why. (3) Tension — what went wrong, what was surprising, what you struggled with. (4) Resolution — what you figured out, built, or changed. (5) Insight — the universal lesson extracted from the specific experience. Use 'I' naturally. Show, don't just tell. Total: 300-600 words."
26
+ },
27
+ {
28
+ "name": "thread",
29
+ "description": "Hook-first, numbered segments — best for Twitter/X distribution",
30
+ "instructions": "Write as a thread of 5-10 numbered segments. Each segment should be ~280 characters max (1-2 sentences). Segment 1 is the hook — provocative, surprising, or contrarian. Segments 2-N develop the idea one beat at a time. Final segment is a crisp takeaway or call to discussion. Use emoji sparingly (0-2 per segment). Each segment should stand alone but build on the previous. End with a single-line summary of the whole thread."
31
+ },
32
+ {
33
+ "name": "tldr",
34
+ "description": "Conclusion-first, then expand — best for busy readers",
35
+ "instructions": "Start with the conclusion or key insight in bold — the 'TL;DR' in 1-2 sentences. Then expand with 3-5 paragraphs that provide evidence, context, and nuance. The reader who stops after the first paragraph should still get the core value. Those who continue get the depth. End with a forward-looking question or implication. Total: 250-450 words."
36
+ }
37
+ ]