adaria-ai 0.1.0 → 0.1.2
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.
- package/README.md +172 -10
- package/package.json +2 -2
package/README.md
CHANGED
|
@@ -1,21 +1,183 @@
|
|
|
1
|
-
|
|
1
|
+
<p align="center">
|
|
2
|
+
<img src="https://raw.githubusercontent.com/ahn283/adaria-ai/main/assets/logo.png" alt="adaria.ai" width="420" />
|
|
3
|
+
</p>
|
|
2
4
|
|
|
3
|
-
|
|
5
|
+
<p align="center">
|
|
6
|
+
<strong>AI-powered marketing operations agent for mobile app teams</strong>
|
|
7
|
+
</p>
|
|
4
8
|
|
|
5
|
-
|
|
9
|
+
<p align="center">
|
|
10
|
+
<a href="https://www.npmjs.com/package/adaria-ai"><img src="https://img.shields.io/npm/v/adaria-ai.svg" alt="npm version" /></a>
|
|
11
|
+
<a href="https://github.com/ahn283/adaria-ai/blob/main/LICENSE"><img src="https://img.shields.io/npm/l/adaria-ai.svg" alt="license" /></a>
|
|
12
|
+
<img src="https://img.shields.io/node/v/adaria-ai.svg" alt="node version" />
|
|
13
|
+
<img src="https://img.shields.io/badge/platform-macOS-blue.svg" alt="platform" />
|
|
14
|
+
</p>
|
|
6
15
|
|
|
7
|
-
|
|
16
|
+
---
|
|
8
17
|
|
|
9
|
-
|
|
18
|
+
adaria-ai is a single-user, local-first marketing operations agent that runs as a macOS background service. It connects to Slack, orchestrates data collection from 8 marketing sources, runs Claude-powered analysis skills, and delivers weekly growth briefings with approval-gated actions.
|
|
10
19
|
|
|
11
|
-
|
|
12
|
-
|
|
20
|
+
Built for the [Adaria.ai](https://adaria.ai) app portfolio (Fridgify, Arden TTS, Tempy), but configurable for any mobile app team via `apps.yaml`.
|
|
21
|
+
|
|
22
|
+
## Features
|
|
23
|
+
|
|
24
|
+
**8 Analysis Skills** — ASO keyword tracking, review sentiment & reply drafts, onboarding funnel analysis, SEO blog generation, short-form content ideas, SDK request aggregation, content strategy, and social media publishing.
|
|
25
|
+
|
|
26
|
+
**8 Data Collectors** — App Store Connect, Google Play Console, ASOMobile, Eodin SDK, Eodin Blog + Search Console + GA4, Fridgify Recipes API, YouTube Data API, Arden TTS metrics.
|
|
27
|
+
|
|
28
|
+
**6 Social Platforms** — Generate and publish platform-optimised marketing content to Twitter/X, Facebook, Threads, TikTok, YouTube Community, and LinkedIn. Every post is approval-gated.
|
|
29
|
+
|
|
30
|
+
**Two Interaction Modes**
|
|
31
|
+
|
|
32
|
+
| Mode | Trigger | Example |
|
|
33
|
+
|------|---------|---------|
|
|
34
|
+
| **Mode A** — Skill command | `@adaria-ai aso fridgify` | Runs full ASO analysis with keyword rankings, competitor diffs, and metadata proposals |
|
|
35
|
+
| **Mode B** — Conversational | `@adaria-ai how are reviews this week?` | Claude answers using 4 read-only MCP tools against your marketing data |
|
|
36
|
+
|
|
37
|
+
**Automated Briefings** — Weekly growth reports and daily threshold alerts delivered to Slack on a launchd cron schedule.
|
|
38
|
+
|
|
39
|
+
**Approval-Gated Write Actions** — Blog publishing, review replies, metadata changes, and social posts require explicit Slack button approval before execution.
|
|
40
|
+
|
|
41
|
+
## Architecture
|
|
42
|
+
|
|
43
|
+
```
|
|
44
|
+
Slack
|
|
45
|
+
|
|
|
46
|
+
+-----+-----+
|
|
47
|
+
| daemon | (always-on, launchd)
|
|
48
|
+
+-----+-----+
|
|
49
|
+
|
|
|
50
|
+
+---------+---------+
|
|
51
|
+
| |
|
|
52
|
+
Mode A Mode B
|
|
53
|
+
(skill dispatch) (Claude + MCP tools)
|
|
54
|
+
| |
|
|
55
|
+
skills/*.ts tools/*.ts
|
|
56
|
+
| (read-only)
|
|
57
|
+
collectors/*.ts |
|
|
58
|
+
| SQLite DB
|
|
59
|
+
safety.ts
|
|
60
|
+
(approval gates)
|
|
61
|
+
|
|
|
62
|
+
Slack Block Kit
|
|
63
|
+
[Approve] [Reject]
|
|
64
|
+
```
|
|
65
|
+
|
|
66
|
+
Three separate launchd processes:
|
|
67
|
+
|
|
68
|
+
| Process | Schedule | Purpose |
|
|
69
|
+
|---------|----------|---------|
|
|
70
|
+
| `com.adaria-ai.daemon` | Always on | Reactive Slack event handler |
|
|
71
|
+
| `com.adaria-ai.weekly` | Sun 23:00 UTC | Full weekly analysis + briefing |
|
|
72
|
+
| `com.adaria-ai.monitor` | Daily 23:00 UTC | Threshold-based alerts |
|
|
73
|
+
|
|
74
|
+
## Quick Start
|
|
13
75
|
|
|
14
76
|
```bash
|
|
15
|
-
# 1.
|
|
77
|
+
# 1. Install
|
|
78
|
+
npm install -g @anthropic-ai/claude-code
|
|
79
|
+
claude /login
|
|
80
|
+
npm install -g adaria-ai
|
|
81
|
+
|
|
82
|
+
# 2. Configure
|
|
83
|
+
adaria-ai init
|
|
84
|
+
|
|
85
|
+
# 3. Run
|
|
86
|
+
adaria-ai start
|
|
87
|
+
adaria-ai status # verify 3 launchd jobs loaded
|
|
88
|
+
adaria-ai doctor # health check
|
|
89
|
+
```
|
|
90
|
+
|
|
91
|
+
## CLI Commands
|
|
92
|
+
|
|
93
|
+
```bash
|
|
94
|
+
adaria-ai init # Interactive setup wizard
|
|
95
|
+
adaria-ai init slack # Configure Slack credentials only
|
|
96
|
+
adaria-ai init collectors # Configure data source credentials
|
|
97
|
+
adaria-ai init social # Configure social platform credentials
|
|
98
|
+
|
|
99
|
+
adaria-ai start # Install and load 3 launchd plists
|
|
100
|
+
adaria-ai stop # Unload all launchd plists
|
|
101
|
+
adaria-ai status # Check launchd job states
|
|
102
|
+
adaria-ai logs # Tail daemon logs
|
|
103
|
+
|
|
104
|
+
adaria-ai doctor # Full health check
|
|
105
|
+
adaria-ai analyze # Run weekly analysis manually
|
|
106
|
+
adaria-ai monitor # Run daily monitor manually
|
|
107
|
+
```
|
|
108
|
+
|
|
109
|
+
## Configuration
|
|
110
|
+
|
|
111
|
+
All runtime state lives in `~/.adaria/` (override with `ADARIA_HOME`):
|
|
112
|
+
|
|
113
|
+
```
|
|
114
|
+
~/.adaria/
|
|
115
|
+
config.yaml # Written by `adaria-ai init`
|
|
116
|
+
apps.yaml # Your apps, platforms, keywords, competitors
|
|
117
|
+
sessions.json # Slack thread <-> Claude session map
|
|
118
|
+
audit.jsonl # Every action logged
|
|
119
|
+
data/adaria.db # SQLite database
|
|
120
|
+
logs/ # Daemon, weekly, monitor logs
|
|
121
|
+
```
|
|
122
|
+
|
|
123
|
+
Secrets are stored in macOS Keychain, never in config files.
|
|
124
|
+
|
|
125
|
+
### Dev Profile
|
|
126
|
+
|
|
127
|
+
Run a separate dev instance alongside production:
|
|
128
|
+
|
|
129
|
+
```bash
|
|
130
|
+
# Dev profile uses ~/.adaria-dev with isolated keychain namespace
|
|
16
131
|
npm run init:dev
|
|
17
|
-
# 2. Exercise every configured collector against real APIs:
|
|
18
132
|
npm run smoke:collectors:dev
|
|
133
|
+
npm run smoke:social:dev
|
|
19
134
|
```
|
|
20
135
|
|
|
21
|
-
|
|
136
|
+
## Skills Reference
|
|
137
|
+
|
|
138
|
+
| Skill | Command | What it does |
|
|
139
|
+
|-------|---------|-------------|
|
|
140
|
+
| ASO | `aso <app>` | Keyword rankings, rank changes, competitor diffs, metadata proposals |
|
|
141
|
+
| Reviews | `review <app>` | Sentiment analysis, complaint clustering, reply drafts |
|
|
142
|
+
| Onboarding | `onboarding <app>` | Funnel analysis, cohort retention, drop-off hypotheses |
|
|
143
|
+
| SEO Blog | `blog <app>` | Blog post generation + Fridgify recipe content |
|
|
144
|
+
| Short-form | `shortform <app>` | YouTube Shorts performance + content ideas |
|
|
145
|
+
| SDK Requests | `sdkrequest <app>` | SDK event aggregation and analysis |
|
|
146
|
+
| Content | `content <app>` | Pinterest pins + trend content ideas |
|
|
147
|
+
| Social | `social <app>` | Generate + post to 6 platforms (approval-gated) |
|
|
148
|
+
|
|
149
|
+
## Security
|
|
150
|
+
|
|
151
|
+
- **Slack allowlist** — Only configured user IDs can interact with the bot
|
|
152
|
+
- **Prompt injection defense** — All external data (reviews, recipes, competitor metadata) is sanitized and XML-wrapped before reaching Claude
|
|
153
|
+
- **Read-only MCP tools** — Mode B has no write access; skills are never exposed as tools
|
|
154
|
+
- **Approval gates** — Every write action requires human confirmation
|
|
155
|
+
- **Audit log** — Every invocation, skill dispatch, and approval action is logged
|
|
156
|
+
- **No secrets in npm** — Pre-publish scanner blocks tarball if credentials detected
|
|
157
|
+
- **Keychain storage** — All tokens stored in macOS Keychain, not files
|
|
158
|
+
|
|
159
|
+
## Tech Stack
|
|
160
|
+
|
|
161
|
+
- **Runtime:** Node.js 20+, TypeScript (strict, ESM)
|
|
162
|
+
- **AI:** Claude CLI (via [@anthropic-ai/claude-code](https://www.npmjs.com/package/@anthropic-ai/claude-code))
|
|
163
|
+
- **Messaging:** Slack (Socket Mode + Bolt)
|
|
164
|
+
- **Database:** SQLite (better-sqlite3, WAL mode)
|
|
165
|
+
- **Process management:** macOS launchd
|
|
166
|
+
- **Testing:** Vitest (545 tests)
|
|
167
|
+
|
|
168
|
+
## Requirements
|
|
169
|
+
|
|
170
|
+
- macOS (launchd-based process management)
|
|
171
|
+
- Node.js 20+
|
|
172
|
+
- Claude Code CLI installed and authenticated
|
|
173
|
+
- Slack workspace with a bot app (Socket Mode enabled)
|
|
174
|
+
|
|
175
|
+
## License
|
|
176
|
+
|
|
177
|
+
[MIT](LICENSE)
|
|
178
|
+
|
|
179
|
+
---
|
|
180
|
+
|
|
181
|
+
<p align="center">
|
|
182
|
+
Built by <a href="https://github.com/ahnwoojin">Woojin Ahn</a> for the <a href="https://adaria.ai">Adaria.ai</a> app portfolio
|
|
183
|
+
</p>
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "adaria-ai",
|
|
3
|
-
"version": "0.1.
|
|
3
|
+
"version": "0.1.2",
|
|
4
4
|
"description": "Single-user marketing operations agent for the Adaria.ai app portfolio, running as a macOS launchd daemon with Slack interface",
|
|
5
5
|
"type": "module",
|
|
6
6
|
"bin": {
|
|
@@ -46,7 +46,7 @@
|
|
|
46
46
|
"license": "MIT",
|
|
47
47
|
"repository": {
|
|
48
48
|
"type": "git",
|
|
49
|
-
"url": "https://github.com/
|
|
49
|
+
"url": "https://github.com/ahn283/adaria-ai.git"
|
|
50
50
|
},
|
|
51
51
|
"devDependencies": {
|
|
52
52
|
"@eslint/js": "^9.39.4",
|