agent-messenger 1.10.3 β 1.10.4
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/.claude-plugin/plugin.json +1 -1
- package/README.md +33 -27
- package/dist/package.json +1 -1
- package/dist/src/platforms/slack/token-extractor.d.ts +3 -0
- package/dist/src/platforms/slack/token-extractor.d.ts.map +1 -1
- package/dist/src/platforms/slack/token-extractor.js +100 -1
- package/dist/src/platforms/slack/token-extractor.js.map +1 -1
- package/package.json +1 -1
- package/skills/agent-discord/SKILL.md +77 -1
- package/skills/agent-discord/references/authentication.md +2 -7
- package/skills/agent-discordbot/SKILL.md +78 -1
- package/skills/agent-slack/SKILL.md +77 -1
- package/skills/agent-slack/references/authentication.md +2 -10
- package/skills/agent-slackbot/SKILL.md +78 -1
- package/skills/agent-teams/SKILL.md +77 -1
- package/skills/agent-teams/references/authentication.md +2 -7
- package/src/platforms/slack/token-extractor.test.ts +102 -0
- package/src/platforms/slack/token-extractor.ts +103 -2
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "agent-messenger",
|
|
3
|
-
"version": "1.10.
|
|
3
|
+
"version": "1.10.4",
|
|
4
4
|
"description": "Messaging platform interaction skills for AI agents. Interact with Slack, Discord, and Microsoft Teams - send messages, read channels, manage reactions, upload files, and more through simple CLI interfaces.",
|
|
5
5
|
"author": {
|
|
6
6
|
"name": "devxoul",
|
package/README.md
CHANGED
|
@@ -10,38 +10,40 @@ A unified, agent-friendly CLI for messaging platforms. Zero-config credential ex
|
|
|
10
10
|
|
|
11
11
|
## Table of Contents
|
|
12
12
|
|
|
13
|
-
- [Why Agent Messenger?](
|
|
14
|
-
- [Installation](
|
|
15
|
-
- [Agent Skills](
|
|
13
|
+
- [Why Agent Messenger?](#why-agent-messenger)
|
|
14
|
+
- [Installation](#installation)
|
|
15
|
+
- [Agent Skills](#agent-skills)
|
|
16
16
|
- [SkillPad](#skillpad)
|
|
17
17
|
- [Skills CLI](#skills-cli)
|
|
18
18
|
- [Claude Code Plugin](#claude-code-plugin)
|
|
19
19
|
- [OpenCode Plugin](#opencode-plugin)
|
|
20
|
-
- [Quick Start](
|
|
21
|
-
- [Supported Platforms](
|
|
22
|
-
- [Platform Guides](
|
|
23
|
-
- [Use Cases](
|
|
20
|
+
- [Quick Start](#quick-start)
|
|
21
|
+
- [Supported Platforms](#supported-platforms)
|
|
22
|
+
- [Platform Guides](#platform-guides)
|
|
23
|
+
- [Use Cases](#use-cases)
|
|
24
24
|
- [Gathering Context](#gathering-context)
|
|
25
25
|
- [Communicating & Reporting](#communicating--reporting)
|
|
26
26
|
- [Automation & Pipelines](#automation--pipelines)
|
|
27
27
|
- [...and More](#and-more)
|
|
28
|
-
- [Philosophy](
|
|
29
|
-
- [Contributing](
|
|
30
|
-
- [
|
|
28
|
+
- [Philosophy](#philosophy)
|
|
29
|
+
- [Contributing](#contributing)
|
|
30
|
+
- [Thanks](#thanks)
|
|
31
|
+
- [License](#license)
|
|
31
32
|
|
|
32
|
-
##
|
|
33
|
+
## Why Agent Messenger?
|
|
33
34
|
|
|
34
35
|
Messaging platforms only offer Bot tokens for API accessβyour AI agent can never act **as you**. Agent Messenger extracts user credentials directly from your installed desktop apps, letting your agent operate on your behalf. Bot tokens are fully supported too for server-side and CI/CD use cases.
|
|
35
36
|
|
|
36
|
-
-
|
|
37
|
-
-
|
|
38
|
-
-
|
|
39
|
-
-
|
|
40
|
-
-
|
|
41
|
-
-
|
|
42
|
-
-
|
|
37
|
+
- **Act as yourself, not a bot** β Extracted user tokens let your agent operate on your behalf
|
|
38
|
+
- **No API keys needed** β Automatically extracts credentials from your installed desktop apps
|
|
39
|
+
- **Zero setup** β Credentials are auto-extracted on first command. No manual auth step required
|
|
40
|
+
- **One interface, multiple platforms** β Learn once, use everywhere (Slack, Discord, Teams)
|
|
41
|
+
- **AI-agent friendly** β JSON output by default, perfect for LLM tool use
|
|
42
|
+
- **Agent memory** β Remembers workspace IDs, channel names, and preferences across sessions
|
|
43
|
+
- **Human friendly too** β Add `--pretty` for readable output
|
|
44
|
+
- **Token efficient** β CLI, not MCP. Load only what you need. ([Why not MCP?](#philosophy))
|
|
43
45
|
|
|
44
|
-
##
|
|
46
|
+
## Installation
|
|
45
47
|
|
|
46
48
|
```bash
|
|
47
49
|
npm install -g agent-messenger
|
|
@@ -56,7 +58,7 @@ This installs:
|
|
|
56
58
|
- `agent-discordbot` β Discord Bot CLI (bot token, for server-side/CI/CD)
|
|
57
59
|
- `agent-teams` β Microsoft Teams CLI
|
|
58
60
|
|
|
59
|
-
##
|
|
61
|
+
## Agent Skills
|
|
60
62
|
|
|
61
63
|
Agent Messenger includes [Agent Skills](https://agentskills.io/) that teach your AI agent how to use these CLIs effectively. Five skills are available:
|
|
62
64
|
|
|
@@ -106,7 +108,7 @@ Add to your `opencode.jsonc`:
|
|
|
106
108
|
}
|
|
107
109
|
```
|
|
108
110
|
|
|
109
|
-
##
|
|
111
|
+
## Quick Start
|
|
110
112
|
|
|
111
113
|
Get up and running in 30 seconds:
|
|
112
114
|
|
|
@@ -120,7 +122,7 @@ agent-slack message send general "Hello from the CLI!"
|
|
|
120
122
|
|
|
121
123
|
That's it. Credentials are extracted automatically from your Slack desktop app on first run. No OAuth flows. No API tokens. No configuration files.
|
|
122
124
|
|
|
123
|
-
##
|
|
125
|
+
## Supported Platforms
|
|
124
126
|
|
|
125
127
|
| Feature | Slack | Discord | Teams |
|
|
126
128
|
|---------|:-----:|:-------:|:-----:|
|
|
@@ -142,7 +144,7 @@ That's it. Credentials are extracted automatically from your Slack desktop app o
|
|
|
142
144
|
|
|
143
145
|
> β οΈ **Teams tokens expire in 60-90 minutes.** Re-run `agent-teams auth extract` to refresh. See [Teams Guide](skills/agent-teams/SKILL.md) for details.
|
|
144
146
|
|
|
145
|
-
##
|
|
147
|
+
## Platform Guides
|
|
146
148
|
|
|
147
149
|
- **[Slack Guide](https://agent-messenger.dev/docs/integrations/slack)** β Full command reference for Slack
|
|
148
150
|
- **[Slack Bot Guide](https://agent-messenger.dev/docs/integrations/slackbot)** β Bot token integration for server-side and CI/CD
|
|
@@ -150,7 +152,7 @@ That's it. Credentials are extracted automatically from your Slack desktop app o
|
|
|
150
152
|
- **[Discord Bot Guide](https://agent-messenger.dev/docs/integrations/discordbot)** β Bot token integration for server-side and CI/CD
|
|
151
153
|
- **[Teams Guide](https://agent-messenger.dev/docs/integrations/teams)** β Full command reference for Microsoft Teams
|
|
152
154
|
|
|
153
|
-
##
|
|
155
|
+
## Use Cases
|
|
154
156
|
|
|
155
157
|
### Gathering Context
|
|
156
158
|
|
|
@@ -197,7 +199,7 @@ Wire messaging into your CI, scripts, or agent workflows.
|
|
|
197
199
|
### ...and More
|
|
198
200
|
|
|
199
201
|
These are just starting points. Your agent has full read/write access to Slack, Discord, and Teams β anything you'd do manually in a chat app, it can handle for you. If you build something cool with Agent Messenger, [let me know](https://x.com/devxoul)!
|
|
200
|
-
##
|
|
202
|
+
## Philosophy
|
|
201
203
|
|
|
202
204
|
**Why not MCP?** MCP servers expose all tools at once, bloating context and confusing agents. **[Agent Skills](https://agentskills.io/) + agent-friendly CLI** offer a better approachβload what you need, when you need it. Fewer tokens, cleaner context, better output.
|
|
203
205
|
|
|
@@ -205,7 +207,7 @@ These are just starting points. Your agent has full read/write access to Slack,
|
|
|
205
207
|
|
|
206
208
|
Inspired by [agent-browser](https://github.com/vercel-labs/agent-browser) from Vercel Labs.
|
|
207
209
|
|
|
208
|
-
##
|
|
210
|
+
## Contributing
|
|
209
211
|
|
|
210
212
|
```bash
|
|
211
213
|
bun install # Install dependencies
|
|
@@ -216,6 +218,10 @@ bun lint # Lint
|
|
|
216
218
|
bun run build # Build
|
|
217
219
|
```
|
|
218
220
|
|
|
219
|
-
##
|
|
221
|
+
## Thanks
|
|
222
|
+
|
|
223
|
+
- [@goden-park](https://github.com/goden-park)
|
|
224
|
+
|
|
225
|
+
## License
|
|
220
226
|
|
|
221
227
|
MIT
|
package/dist/package.json
CHANGED
|
@@ -13,6 +13,7 @@ export declare class TokenExtractor {
|
|
|
13
13
|
constructor(platform?: NodeJS.Platform, slackDir?: string, keyCache?: DerivedKeyCache, debugLog?: (message: string) => void);
|
|
14
14
|
private debug;
|
|
15
15
|
getSlackDir(): string;
|
|
16
|
+
private findMsixSlackDir;
|
|
16
17
|
extractCookie(): Promise<string>;
|
|
17
18
|
extract(): Promise<ExtractedWorkspace[]>;
|
|
18
19
|
private extractTokensFromLevelDB;
|
|
@@ -22,6 +23,8 @@ export declare class TokenExtractor {
|
|
|
22
23
|
private extractFromLevelDB;
|
|
23
24
|
private extractViaClassicLevelCopy;
|
|
24
25
|
private extractViaClassicLevel;
|
|
26
|
+
private extractTokensFromBlobFiles;
|
|
27
|
+
private findFilesRecursive;
|
|
25
28
|
private extractTokensFromLDBFiles;
|
|
26
29
|
private extractTokenFromLogFile;
|
|
27
30
|
private extractTokenFromBuffer;
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"token-extractor.d.ts","sourceRoot":"","sources":["../../../../src/platforms/slack/token-extractor.ts"],"names":[],"mappings":"AAOA,OAAO,EAAE,eAAe,EAAE,MAAM,kCAAkC,CAAA;AAIlE,MAAM,WAAW,kBAAkB;IACjC,YAAY,EAAE,MAAM,CAAA;IACpB,cAAc,EAAE,MAAM,CAAA;IACtB,KAAK,EAAE,MAAM,CAAA;IACb,MAAM,EAAE,MAAM,CAAA;CACf;
|
|
1
|
+
{"version":3,"file":"token-extractor.d.ts","sourceRoot":"","sources":["../../../../src/platforms/slack/token-extractor.ts"],"names":[],"mappings":"AAOA,OAAO,EAAE,eAAe,EAAE,MAAM,kCAAkC,CAAA;AAIlE,MAAM,WAAW,kBAAkB;IACjC,YAAY,EAAE,MAAM,CAAA;IACpB,cAAc,EAAE,MAAM,CAAA;IACtB,KAAK,EAAE,MAAM,CAAA;IACb,MAAM,EAAE,MAAM,CAAA;CACf;AAgCD,qBAAa,cAAc;IACzB,OAAO,CAAC,QAAQ,CAAiB;IACjC,OAAO,CAAC,QAAQ,CAAQ;IACxB,OAAO,CAAC,QAAQ,CAAiB;IACjC,OAAO,CAAC,QAAQ,CAAoC;gBAGlD,QAAQ,CAAC,EAAE,MAAM,CAAC,QAAQ,EAC1B,QAAQ,CAAC,EAAE,MAAM,EACjB,QAAQ,CAAC,EAAE,eAAe,EAC1B,QAAQ,CAAC,EAAE,CAAC,OAAO,EAAE,MAAM,KAAK,IAAI;IAatC,OAAO,CAAC,KAAK;IAIb,WAAW,IAAI,MAAM;IAyCrB,OAAO,CAAC,gBAAgB;IAuClB,aAAa,IAAI,OAAO,CAAC,MAAM,CAAC;IAoBhC,OAAO,IAAI,OAAO,CAAC,kBAAkB,EAAE,CAAC;YAqChC,wBAAwB;IAkCtC,OAAO,CAAC,iBAAiB;IAsBzB,OAAO,CAAC,eAAe;IAqBvB,OAAO,CAAC,YAAY;YASN,kBAAkB;YAclB,0BAA0B;YA2B1B,sBAAsB;IAyBpC,OAAO,CAAC,0BAA0B;IAkClC,OAAO,CAAC,kBAAkB;IAgB1B,OAAO,CAAC,yBAAyB;IAoCjC,OAAO,CAAC,uBAAuB;IAmC/B,OAAO,CAAC,sBAAsB;IA8F9B,OAAO,CAAC,eAAe;IAmBvB,OAAO,CAAC,gBAAgB;IAcxB,OAAO,CAAC,gBAAgB;YAqBV,uBAAuB;IAerC,OAAO,CAAC,gBAAgB;IAwExB,gBAAgB,CAAC,SAAS,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI;IA6BlD,OAAO,CAAC,gBAAgB;IAuBxB,OAAO,CAAC,qBAAqB;IAiB7B,uBAAuB,CAAC,SAAS,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI;IA2BzD,mBAAmB,IAAI,MAAM,GAAG,IAAI;IA0BpC,YAAY,CAAC,SAAS,EAAE,MAAM,GAAG,MAAM,GAAG,IAAI;IAyB9C,OAAO,CAAC,SAAS,CAAsB;IACvC,OAAO,CAAC,aAAa,CAAQ;YAEf,kBAAkB;IA0BhC,OAAO,CAAC,aAAa;IAOrB,OAAO,CAAC,yBAAyB;IAwB3B,aAAa,IAAI,OAAO,CAAC,IAAI,CAAC;IAKpC,mBAAmB,IAAI,MAAM,CAAC,MAAM,EAAE,MAAM,CAAC;CAyB9C"}
|
|
@@ -13,6 +13,7 @@ const SOURCE_PRIORITY = {
|
|
|
13
13
|
'json-single': 4,
|
|
14
14
|
'log-file': 3,
|
|
15
15
|
'classic-level': 2,
|
|
16
|
+
'blob-file': 1,
|
|
16
17
|
'ldb-file': 1,
|
|
17
18
|
};
|
|
18
19
|
const DIR_TIER_PRIORITY = {
|
|
@@ -55,12 +56,56 @@ export class TokenExtractor {
|
|
|
55
56
|
}
|
|
56
57
|
case 'linux':
|
|
57
58
|
return join(homedir(), '.config', 'Slack');
|
|
58
|
-
case 'win32':
|
|
59
|
+
case 'win32': {
|
|
60
|
+
// Check MSIX (Microsoft Store / GPO) package path first
|
|
61
|
+
const msixPath = this.findMsixSlackDir();
|
|
62
|
+
if (msixPath) {
|
|
63
|
+
return msixPath;
|
|
64
|
+
}
|
|
65
|
+
// Direct download version
|
|
59
66
|
return join(process.env.APPDATA || join(homedir(), 'AppData', 'Roaming'), 'Slack');
|
|
67
|
+
}
|
|
60
68
|
default:
|
|
61
69
|
throw new Error(`Unsupported platform: ${this.platform}`);
|
|
62
70
|
}
|
|
63
71
|
}
|
|
72
|
+
findMsixSlackDir() {
|
|
73
|
+
const packagesDir = join(process.env.LOCALAPPDATA || join(homedir(), 'AppData', 'Local'), 'Packages');
|
|
74
|
+
if (!existsSync(packagesDir)) {
|
|
75
|
+
this.debug('MSIX Packages directory not found');
|
|
76
|
+
return null;
|
|
77
|
+
}
|
|
78
|
+
try {
|
|
79
|
+
const entries = readdirSync(packagesDir, { withFileTypes: true });
|
|
80
|
+
let best = null;
|
|
81
|
+
for (const entry of entries) {
|
|
82
|
+
if (!entry.isDirectory() || !entry.name.toLowerCase().includes('slack')) {
|
|
83
|
+
continue;
|
|
84
|
+
}
|
|
85
|
+
const slackData = join(packagesDir, entry.name, 'LocalCache', 'Roaming', 'Slack');
|
|
86
|
+
this.debug(`Found MSIX candidate: ${entry.name}`);
|
|
87
|
+
if (!existsSync(join(slackData, 'storage')) && !existsSync(join(slackData, 'Local Storage'))) {
|
|
88
|
+
this.debug(` No Slack data at ${slackData}`);
|
|
89
|
+
continue;
|
|
90
|
+
}
|
|
91
|
+
const mtime = statSync(slackData).mtimeMs;
|
|
92
|
+
this.debug(` Valid Slack data found (mtime: ${new Date(mtime).toISOString()})`);
|
|
93
|
+
if (!best || mtime > best.mtimeMs) {
|
|
94
|
+
best = { path: slackData, mtimeMs: mtime };
|
|
95
|
+
}
|
|
96
|
+
}
|
|
97
|
+
if (best) {
|
|
98
|
+
this.debug(`Using MSIX Slack dir: ${best.path}`);
|
|
99
|
+
}
|
|
100
|
+
else {
|
|
101
|
+
this.debug('No valid MSIX Slack data found, falling back to APPDATA');
|
|
102
|
+
}
|
|
103
|
+
return best?.path ?? null;
|
|
104
|
+
}
|
|
105
|
+
catch {
|
|
106
|
+
return null;
|
|
107
|
+
}
|
|
108
|
+
}
|
|
64
109
|
async extractCookie() {
|
|
65
110
|
if (!existsSync(this.slackDir)) {
|
|
66
111
|
return '';
|
|
@@ -130,6 +175,9 @@ export class TokenExtractor {
|
|
|
130
175
|
}
|
|
131
176
|
catch { }
|
|
132
177
|
}
|
|
178
|
+
// Chromium offloads large IndexedDB values to external *.indexeddb.blob/ files
|
|
179
|
+
const blobTokens = this.extractTokensFromBlobFiles(baseDir, tier);
|
|
180
|
+
tokens.push(...blobTokens);
|
|
133
181
|
}
|
|
134
182
|
return this.deduplicateTokens(tokens);
|
|
135
183
|
}
|
|
@@ -246,6 +294,57 @@ export class TokenExtractor {
|
|
|
246
294
|
}
|
|
247
295
|
return tokens;
|
|
248
296
|
}
|
|
297
|
+
extractTokensFromBlobFiles(baseDir, dirTier) {
|
|
298
|
+
const tokens = [];
|
|
299
|
+
try {
|
|
300
|
+
const entries = readdirSync(baseDir, { withFileTypes: true });
|
|
301
|
+
for (const entry of entries) {
|
|
302
|
+
if (!entry.isDirectory() || !entry.name.endsWith('.indexeddb.blob'))
|
|
303
|
+
continue;
|
|
304
|
+
const blobDir = join(baseDir, entry.name);
|
|
305
|
+
this.debug(`Scanning blob directory: ${blobDir}`);
|
|
306
|
+
const files = this.findFilesRecursive(blobDir);
|
|
307
|
+
for (const filePath of files) {
|
|
308
|
+
try {
|
|
309
|
+
const stat = statSync(filePath);
|
|
310
|
+
if (stat.size > 10 * 1024 * 1024)
|
|
311
|
+
continue;
|
|
312
|
+
const content = readFileSync(filePath);
|
|
313
|
+
const xoxcMarker = Buffer.from('xoxc-');
|
|
314
|
+
let idx = content.indexOf(xoxcMarker, 0);
|
|
315
|
+
while (idx !== -1) {
|
|
316
|
+
const tokenData = this.extractTokenFromBuffer(content, idx);
|
|
317
|
+
if (tokenData) {
|
|
318
|
+
this.debug(`Found token in blob file: ${filePath}`);
|
|
319
|
+
tokens.push({ ...tokenData, source: 'blob-file', dirTier });
|
|
320
|
+
}
|
|
321
|
+
idx = content.indexOf(xoxcMarker, idx + 5);
|
|
322
|
+
}
|
|
323
|
+
}
|
|
324
|
+
catch { }
|
|
325
|
+
}
|
|
326
|
+
}
|
|
327
|
+
}
|
|
328
|
+
catch { }
|
|
329
|
+
return tokens;
|
|
330
|
+
}
|
|
331
|
+
findFilesRecursive(dir) {
|
|
332
|
+
const files = [];
|
|
333
|
+
try {
|
|
334
|
+
const entries = readdirSync(dir, { withFileTypes: true });
|
|
335
|
+
for (const entry of entries) {
|
|
336
|
+
const fullPath = join(dir, entry.name);
|
|
337
|
+
if (entry.isDirectory()) {
|
|
338
|
+
files.push(...this.findFilesRecursive(fullPath));
|
|
339
|
+
}
|
|
340
|
+
else if (entry.isFile()) {
|
|
341
|
+
files.push(fullPath);
|
|
342
|
+
}
|
|
343
|
+
}
|
|
344
|
+
}
|
|
345
|
+
catch { }
|
|
346
|
+
return files;
|
|
347
|
+
}
|
|
249
348
|
extractTokensFromLDBFiles(dbPath, dirTier) {
|
|
250
349
|
const tokens = [];
|
|
251
350
|
try {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"token-extractor.js","sourceRoot":"","sources":["../../../../src/platforms/slack/token-extractor.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"token-extractor.js","sourceRoot":"","sources":["../../../../src/platforms/slack/token-extractor.ts"],"names":[],"mappings":"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"}
|
package/package.json
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: agent-discord
|
|
3
3
|
description: Interact with Discord servers - send messages, read channels, manage reactions
|
|
4
|
-
version: 1.10.
|
|
4
|
+
version: 1.10.4
|
|
5
5
|
allowed-tools: Bash(agent-discord:*)
|
|
6
6
|
metadata:
|
|
7
7
|
openclaw:
|
|
@@ -37,6 +37,8 @@ Credentials are extracted automatically from the Discord desktop app on first us
|
|
|
37
37
|
|
|
38
38
|
On macOS, the system may prompt for your Keychain password the first time (required to decrypt Discord's stored token). This is a one-time prompt.
|
|
39
39
|
|
|
40
|
+
**IMPORTANT**: NEVER guide the user to open a web browser, use DevTools, or manually copy tokens from a browser. Always use `agent-discord auth extract` to obtain tokens from the desktop app.
|
|
41
|
+
|
|
40
42
|
### Multi-Server Support
|
|
41
43
|
|
|
42
44
|
```bash
|
|
@@ -53,6 +55,80 @@ agent-discord server current
|
|
|
53
55
|
agent-discord auth status
|
|
54
56
|
```
|
|
55
57
|
|
|
58
|
+
## Memory
|
|
59
|
+
|
|
60
|
+
The agent maintains a `~/.config/agent-messenger/MEMORY.md` file as persistent memory across sessions. This is agent-managed β the CLI does not read or write this file. Use the `Read` and `Write` tools to manage your memory file.
|
|
61
|
+
|
|
62
|
+
### Reading Memory
|
|
63
|
+
|
|
64
|
+
At the **start of every task**, read `~/.config/agent-messenger/MEMORY.md` using the `Read` tool to load any previously discovered server IDs, channel IDs, user IDs, and preferences.
|
|
65
|
+
|
|
66
|
+
- If the file doesn't exist yet, that's fine β proceed without it and create it when you first have useful information to store.
|
|
67
|
+
- If the file can't be read (permissions, missing directory), proceed without memory β don't error out.
|
|
68
|
+
|
|
69
|
+
### Writing Memory
|
|
70
|
+
|
|
71
|
+
After discovering useful information, update `~/.config/agent-messenger/MEMORY.md` using the `Write` tool. Write triggers include:
|
|
72
|
+
|
|
73
|
+
- After discovering server IDs and names (from `server list`, `snapshot`, etc.)
|
|
74
|
+
- After discovering useful channel IDs and names (from `channel list`, `snapshot`, etc.)
|
|
75
|
+
- After discovering user IDs and names (from `user list`, `user me`, etc.)
|
|
76
|
+
- After the user gives you an alias or preference ("call this the dev server", "my main channel is X")
|
|
77
|
+
- After discovering channel structure (categories, voice channels)
|
|
78
|
+
|
|
79
|
+
When writing, include the **complete file content** β the `Write` tool overwrites the entire file.
|
|
80
|
+
|
|
81
|
+
### What to Store
|
|
82
|
+
|
|
83
|
+
- Server IDs with names
|
|
84
|
+
- Channel IDs with names and categories
|
|
85
|
+
- User IDs with display names
|
|
86
|
+
- User-given aliases ("dev server", "announcements channel")
|
|
87
|
+
- Commonly used thread IDs
|
|
88
|
+
- Any user preference expressed during interaction
|
|
89
|
+
|
|
90
|
+
### What NOT to Store
|
|
91
|
+
|
|
92
|
+
Never store tokens, credentials, or any sensitive data. Never store full message content (just IDs and channel context). Never store file upload contents.
|
|
93
|
+
|
|
94
|
+
### Handling Stale Data
|
|
95
|
+
|
|
96
|
+
If a memorized ID returns an error (channel not found, server not found), remove it from `MEMORY.md`. Don't blindly trust memorized data β verify when something seems off. Prefer re-listing over using a memorized ID that might be stale.
|
|
97
|
+
|
|
98
|
+
### Format / Example
|
|
99
|
+
|
|
100
|
+
```markdown
|
|
101
|
+
# Agent Messenger Memory
|
|
102
|
+
|
|
103
|
+
## Discord Servers
|
|
104
|
+
|
|
105
|
+
- `1234567890123456` β Acme Dev (default)
|
|
106
|
+
- `9876543210987654` β Open Source Community
|
|
107
|
+
|
|
108
|
+
## Channels (Acme Dev)
|
|
109
|
+
|
|
110
|
+
- `1111111111111111` β #general (General category)
|
|
111
|
+
- `2222222222222222` β #engineering (Engineering category)
|
|
112
|
+
- `3333333333333333` β #deploys (Engineering category)
|
|
113
|
+
|
|
114
|
+
## Users (Acme Dev)
|
|
115
|
+
|
|
116
|
+
- `4444444444444444` β Alice (server owner)
|
|
117
|
+
- `5555555555555555` β Bob
|
|
118
|
+
|
|
119
|
+
## Aliases
|
|
120
|
+
|
|
121
|
+
- "dev server" β `1234567890123456` (Acme Dev)
|
|
122
|
+
- "deploys" β `3333333333333333` (#deploys in Acme Dev)
|
|
123
|
+
|
|
124
|
+
## Notes
|
|
125
|
+
|
|
126
|
+
- User prefers --pretty output for snapshots
|
|
127
|
+
- Main server is "Acme Dev"
|
|
128
|
+
```
|
|
129
|
+
|
|
130
|
+
> Memory lets you skip repeated `channel list` and `server list` calls. When you already know an ID from a previous session, use it directly.
|
|
131
|
+
|
|
56
132
|
## Commands
|
|
57
133
|
|
|
58
134
|
### Auth Commands
|
|
@@ -260,7 +260,7 @@ With extracted credentials, agent-discord has the same permissions as you in Dis
|
|
|
260
260
|
|
|
261
261
|
## Manual Token Management (Advanced)
|
|
262
262
|
|
|
263
|
-
If automatic extraction fails, you can manually create credentials:
|
|
263
|
+
If automatic extraction fails, you can manually create the credentials file:
|
|
264
264
|
|
|
265
265
|
```bash
|
|
266
266
|
# Create config directory
|
|
@@ -284,11 +284,6 @@ EOF
|
|
|
284
284
|
chmod 600 ~/.config/agent-messenger/discord-credentials.json
|
|
285
285
|
```
|
|
286
286
|
|
|
287
|
-
|
|
288
|
-
1. Open Discord in browser (not desktop app)
|
|
289
|
-
2. Open DevTools -> Network tab
|
|
290
|
-
3. Make any API call (send message, etc.)
|
|
291
|
-
4. Find request to `discord.com/api`
|
|
292
|
-
5. Copy `Authorization` header value
|
|
287
|
+
If the user already has a token value, they can populate the file above. Otherwise, always prefer `agent-discord auth extract` to obtain the token automatically from the desktop app.
|
|
293
288
|
|
|
294
289
|
**Warning**: Self-botting (using user tokens for automation) may violate Discord's Terms of Service. Use responsibly and at your own risk.
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: agent-discordbot
|
|
3
3
|
description: Interact with Discord servers using bot tokens - send messages, read channels, manage reactions
|
|
4
|
-
version: 1.10.
|
|
4
|
+
version: 1.10.4
|
|
5
5
|
allowed-tools: Bash(agent-discordbot:*)
|
|
6
6
|
metadata:
|
|
7
7
|
openclaw:
|
|
@@ -108,6 +108,83 @@ agent-discordbot auth remove deploy
|
|
|
108
108
|
|
|
109
109
|
The `--bot <id>` flag is available on all commands to override the active bot for a single invocation.
|
|
110
110
|
|
|
111
|
+
## Memory
|
|
112
|
+
|
|
113
|
+
The agent maintains a `~/.config/agent-messenger/MEMORY.md` file as persistent memory across sessions. This is agent-managed β the CLI does not read or write this file. Use the `Read` and `Write` tools to manage your memory file.
|
|
114
|
+
|
|
115
|
+
### Reading Memory
|
|
116
|
+
|
|
117
|
+
At the **start of every task**, read `~/.config/agent-messenger/MEMORY.md` using the `Read` tool to load any previously discovered server IDs, channel IDs, user IDs, and preferences.
|
|
118
|
+
|
|
119
|
+
- If the file doesn't exist yet, that's fine β proceed without it and create it when you first have useful information to store.
|
|
120
|
+
- If the file can't be read (permissions, missing directory), proceed without memory β don't error out.
|
|
121
|
+
|
|
122
|
+
### Writing Memory
|
|
123
|
+
|
|
124
|
+
After discovering useful information, update `~/.config/agent-messenger/MEMORY.md` using the `Write` tool. Write triggers include:
|
|
125
|
+
|
|
126
|
+
- After discovering server IDs and names (from `server list`, etc.)
|
|
127
|
+
- After discovering useful channel IDs and names (from `channel list`, etc.)
|
|
128
|
+
- After discovering user IDs and names (from `user list`, etc.)
|
|
129
|
+
- After the user gives you an alias or preference ("call this the alerts bot", "my main server is X")
|
|
130
|
+
- After setting up bot identifiers (from `auth list`)
|
|
131
|
+
|
|
132
|
+
When writing, include the **complete file content** β the `Write` tool overwrites the entire file.
|
|
133
|
+
|
|
134
|
+
### What to Store
|
|
135
|
+
|
|
136
|
+
- Server IDs with names
|
|
137
|
+
- Channel IDs with names and categories
|
|
138
|
+
- User IDs with display names
|
|
139
|
+
- Bot identifiers and their purposes
|
|
140
|
+
- User-given aliases ("alerts bot", "announcements channel")
|
|
141
|
+
- Any user preference expressed during interaction
|
|
142
|
+
|
|
143
|
+
### What NOT to Store
|
|
144
|
+
|
|
145
|
+
Never store bot tokens, credentials, or any sensitive data. Never store full message content (just IDs and channel context). Never store file upload contents.
|
|
146
|
+
|
|
147
|
+
### Handling Stale Data
|
|
148
|
+
|
|
149
|
+
If a memorized ID returns an error (channel not found, server not found), remove it from `MEMORY.md`. Don't blindly trust memorized data β verify when something seems off. Prefer re-listing over using a memorized ID that might be stale.
|
|
150
|
+
|
|
151
|
+
### Format / Example
|
|
152
|
+
|
|
153
|
+
```markdown
|
|
154
|
+
# Agent Messenger Memory
|
|
155
|
+
|
|
156
|
+
## Discord Servers (Bot)
|
|
157
|
+
|
|
158
|
+
- `1234567890123456` β Acme Dev
|
|
159
|
+
|
|
160
|
+
## Bots (Acme Dev)
|
|
161
|
+
|
|
162
|
+
- `deploy` β Deploy Bot (active)
|
|
163
|
+
- `alert` β Alert Bot
|
|
164
|
+
|
|
165
|
+
## Channels (Acme Dev)
|
|
166
|
+
|
|
167
|
+
- `1111111111111111` β #general (General category)
|
|
168
|
+
- `2222222222222222` β #engineering (Engineering category)
|
|
169
|
+
- `3333333333333333` β #deploys (Engineering category)
|
|
170
|
+
|
|
171
|
+
## Users (Acme Dev)
|
|
172
|
+
|
|
173
|
+
- `4444444444444444` β Alice (server owner)
|
|
174
|
+
- `5555555555555555` β Bob
|
|
175
|
+
|
|
176
|
+
## Aliases
|
|
177
|
+
|
|
178
|
+
- "deploys" β `3333333333333333` (#deploys in Acme Dev)
|
|
179
|
+
|
|
180
|
+
## Notes
|
|
181
|
+
|
|
182
|
+
- Deploy Bot is used for CI/CD notifications
|
|
183
|
+
- Alert Bot is used for error monitoring
|
|
184
|
+
```
|
|
185
|
+
|
|
186
|
+
> Memory lets you skip repeated `channel list` and `server list` calls. When you already know an ID from a previous session, use it directly.
|
|
187
|
+
|
|
111
188
|
## Commands
|
|
112
189
|
|
|
113
190
|
### Auth Commands
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: agent-slack
|
|
3
3
|
description: Interact with Slack workspaces - send messages, read channels, manage reactions
|
|
4
|
-
version: 1.10.
|
|
4
|
+
version: 1.10.4
|
|
5
5
|
allowed-tools: Bash(agent-slack:*)
|
|
6
6
|
metadata:
|
|
7
7
|
openclaw:
|
|
@@ -37,6 +37,8 @@ Credentials are extracted automatically from the Slack desktop app on first use.
|
|
|
37
37
|
|
|
38
38
|
On macOS, the system may prompt for your Keychain password the first time (required to decrypt Slack's stored token). This is a one-time prompt.
|
|
39
39
|
|
|
40
|
+
**IMPORTANT**: NEVER guide the user to open a web browser, use DevTools, or manually copy tokens from a browser. Always use `agent-slack auth extract` to obtain tokens from the desktop app.
|
|
41
|
+
|
|
40
42
|
### Multi-Workspace Support
|
|
41
43
|
|
|
42
44
|
```bash
|
|
@@ -56,6 +58,80 @@ agent-slack workspace remove <workspace-id>
|
|
|
56
58
|
agent-slack auth status
|
|
57
59
|
```
|
|
58
60
|
|
|
61
|
+
## Memory
|
|
62
|
+
|
|
63
|
+
The agent maintains a `~/.config/agent-messenger/MEMORY.md` file as persistent memory across sessions. This is agent-managed β the CLI does not read or write this file. Use the `Read` and `Write` tools to manage your memory file.
|
|
64
|
+
|
|
65
|
+
### Reading Memory
|
|
66
|
+
|
|
67
|
+
At the **start of every task**, read `~/.config/agent-messenger/MEMORY.md` using the `Read` tool to load any previously discovered workspace IDs, channel IDs, user IDs, and preferences.
|
|
68
|
+
|
|
69
|
+
- If the file doesn't exist yet, that's fine β proceed without it and create it when you first have useful information to store.
|
|
70
|
+
- If the file can't be read (permissions, missing directory), proceed without memory β don't error out.
|
|
71
|
+
|
|
72
|
+
### Writing Memory
|
|
73
|
+
|
|
74
|
+
After discovering useful information, update `~/.config/agent-messenger/MEMORY.md` using the `Write` tool. Write triggers include:
|
|
75
|
+
|
|
76
|
+
- After discovering workspace IDs (from `workspace list`)
|
|
77
|
+
- After discovering useful channel IDs and names (from `channel list`, `snapshot`, etc.)
|
|
78
|
+
- After discovering user IDs and names (from `user list`, `user me`, etc.)
|
|
79
|
+
- After the user gives you an alias or preference ("call this the deploys channel", "my main workspace is X")
|
|
80
|
+
- After discovering channel structure (sidebar sections, channel categories)
|
|
81
|
+
|
|
82
|
+
When writing, include the **complete file content** β the `Write` tool overwrites the entire file.
|
|
83
|
+
|
|
84
|
+
### What to Store
|
|
85
|
+
|
|
86
|
+
- Workspace IDs with names
|
|
87
|
+
- Channel IDs with names and purpose
|
|
88
|
+
- User IDs with display names
|
|
89
|
+
- User-given aliases ("deploys channel", "main workspace")
|
|
90
|
+
- Commonly used thread timestamps
|
|
91
|
+
- Any user preference expressed during interaction
|
|
92
|
+
|
|
93
|
+
### What NOT to Store
|
|
94
|
+
|
|
95
|
+
Never store tokens, cookies, credentials, or any sensitive data. Never store full message content (just IDs and channel context). Never store file upload contents.
|
|
96
|
+
|
|
97
|
+
### Handling Stale Data
|
|
98
|
+
|
|
99
|
+
If a memorized ID returns an error (channel not found, user not found), remove it from `MEMORY.md`. Don't blindly trust memorized data β verify when something seems off. Prefer re-listing over using a memorized ID that might be stale.
|
|
100
|
+
|
|
101
|
+
### Format / Example
|
|
102
|
+
|
|
103
|
+
```markdown
|
|
104
|
+
# Agent Messenger Memory
|
|
105
|
+
|
|
106
|
+
## Slack Workspaces
|
|
107
|
+
|
|
108
|
+
- `T0ABC1234` β Acme Corp (default)
|
|
109
|
+
- `T0DEF5678` β Side Project
|
|
110
|
+
|
|
111
|
+
## Channels (Acme Corp)
|
|
112
|
+
|
|
113
|
+
- `C012ABC` β #general (company-wide announcements)
|
|
114
|
+
- `C034DEF` β #engineering (team discussion)
|
|
115
|
+
- `C056GHI` β #deploys (CI/CD notifications)
|
|
116
|
+
|
|
117
|
+
## Users (Acme Corp)
|
|
118
|
+
|
|
119
|
+
- `U0ABC123` β Alice (engineering lead)
|
|
120
|
+
- `U0DEF456` β Bob (backend)
|
|
121
|
+
|
|
122
|
+
## Aliases
|
|
123
|
+
|
|
124
|
+
- "deploys" β `C056GHI` (#deploys in Acme Corp)
|
|
125
|
+
- "main workspace" β `T0ABC1234` (Acme Corp)
|
|
126
|
+
|
|
127
|
+
## Notes
|
|
128
|
+
|
|
129
|
+
- User prefers --pretty output for snapshots
|
|
130
|
+
- Main workspace is "Acme Corp"
|
|
131
|
+
```
|
|
132
|
+
|
|
133
|
+
> Memory lets you skip repeated `channel list` and `workspace list` calls. When you already know an ID from a previous session, use it directly.
|
|
134
|
+
|
|
59
135
|
## Commands
|
|
60
136
|
|
|
61
137
|
### Auth Commands
|
|
@@ -296,7 +296,7 @@ With extracted credentials, agent-slack has the same permissions as you in the S
|
|
|
296
296
|
|
|
297
297
|
## Manual Token Management (Advanced)
|
|
298
298
|
|
|
299
|
-
If automatic extraction fails, you can manually create credentials:
|
|
299
|
+
If automatic extraction fails, you can manually create the credentials file:
|
|
300
300
|
|
|
301
301
|
```bash
|
|
302
302
|
# Create config directory
|
|
@@ -321,12 +321,4 @@ EOF
|
|
|
321
321
|
chmod 600 ~/.config/agent-messenger/slack-credentials.json
|
|
322
322
|
```
|
|
323
323
|
|
|
324
|
-
|
|
325
|
-
1. Open Slack in browser (not desktop app)
|
|
326
|
-
2. Open DevTools β Network tab
|
|
327
|
-
3. Make any API call (send message, etc.)
|
|
328
|
-
4. Find request to `api.slack.com`
|
|
329
|
-
5. Copy `token` from request payload (xoxc)
|
|
330
|
-
6. Copy `d` cookie from request headers (xoxd)
|
|
331
|
-
|
|
332
|
-
**Note**: Browser tokens may have different permissions than desktop app tokens.
|
|
324
|
+
If the user already has token values, they can populate the file above. Otherwise, always prefer `agent-slack auth extract` to obtain tokens automatically from the desktop app.
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: agent-slackbot
|
|
3
3
|
description: Interact with Slack workspaces using bot tokens - send messages, read channels, manage reactions
|
|
4
|
-
version: 1.10.
|
|
4
|
+
version: 1.10.4
|
|
5
5
|
allowed-tools: Bash(agent-slackbot:*)
|
|
6
6
|
metadata:
|
|
7
7
|
openclaw:
|
|
@@ -118,6 +118,83 @@ export E2E_SLACKBOT_WORKSPACE_ID=T123456
|
|
|
118
118
|
export E2E_SLACKBOT_WORKSPACE_NAME="My Workspace"
|
|
119
119
|
```
|
|
120
120
|
|
|
121
|
+
## Memory
|
|
122
|
+
|
|
123
|
+
The agent maintains a `~/.config/agent-messenger/MEMORY.md` file as persistent memory across sessions. This is agent-managed β the CLI does not read or write this file. Use the `Read` and `Write` tools to manage your memory file.
|
|
124
|
+
|
|
125
|
+
### Reading Memory
|
|
126
|
+
|
|
127
|
+
At the **start of every task**, read `~/.config/agent-messenger/MEMORY.md` using the `Read` tool to load any previously discovered workspace IDs, channel IDs, user IDs, and preferences.
|
|
128
|
+
|
|
129
|
+
- If the file doesn't exist yet, that's fine β proceed without it and create it when you first have useful information to store.
|
|
130
|
+
- If the file can't be read (permissions, missing directory), proceed without memory β don't error out.
|
|
131
|
+
|
|
132
|
+
### Writing Memory
|
|
133
|
+
|
|
134
|
+
After discovering useful information, update `~/.config/agent-messenger/MEMORY.md` using the `Write` tool. Write triggers include:
|
|
135
|
+
|
|
136
|
+
- After discovering workspace IDs (from `auth status`)
|
|
137
|
+
- After discovering useful channel IDs and names (from `channel list`, etc.)
|
|
138
|
+
- After discovering user IDs and names (from `user list`, etc.)
|
|
139
|
+
- After the user gives you an alias or preference ("call this the alerts bot", "my main workspace is X")
|
|
140
|
+
- After setting up bot identifiers (from `auth list`)
|
|
141
|
+
|
|
142
|
+
When writing, include the **complete file content** β the `Write` tool overwrites the entire file.
|
|
143
|
+
|
|
144
|
+
### What to Store
|
|
145
|
+
|
|
146
|
+
- Workspace IDs with names
|
|
147
|
+
- Channel IDs with names and purpose
|
|
148
|
+
- User IDs with display names
|
|
149
|
+
- Bot identifiers and their purposes
|
|
150
|
+
- User-given aliases ("alerts bot", "deploys channel")
|
|
151
|
+
- Any user preference expressed during interaction
|
|
152
|
+
|
|
153
|
+
### What NOT to Store
|
|
154
|
+
|
|
155
|
+
Never store bot tokens, credentials, or any sensitive data. Never store full message content (just IDs and channel context). Never store file upload contents.
|
|
156
|
+
|
|
157
|
+
### Handling Stale Data
|
|
158
|
+
|
|
159
|
+
If a memorized ID returns an error (channel not found, user not found), remove it from `MEMORY.md`. Don't blindly trust memorized data β verify when something seems off. Prefer re-listing over using a memorized ID that might be stale.
|
|
160
|
+
|
|
161
|
+
### Format / Example
|
|
162
|
+
|
|
163
|
+
```markdown
|
|
164
|
+
# Agent Messenger Memory
|
|
165
|
+
|
|
166
|
+
## Slack Workspaces (Bot)
|
|
167
|
+
|
|
168
|
+
- `T0ABC1234` β Acme Corp
|
|
169
|
+
|
|
170
|
+
## Bots (Acme Corp)
|
|
171
|
+
|
|
172
|
+
- `deploy` β Deploy Bot (active)
|
|
173
|
+
- `alert` β Alert Bot
|
|
174
|
+
|
|
175
|
+
## Channels (Acme Corp)
|
|
176
|
+
|
|
177
|
+
- `C012ABC` β #general (company-wide announcements)
|
|
178
|
+
- `C034DEF` β #engineering (team discussion)
|
|
179
|
+
- `C056GHI` β #deploys (CI/CD notifications)
|
|
180
|
+
|
|
181
|
+
## Users (Acme Corp)
|
|
182
|
+
|
|
183
|
+
- `U0ABC123` β Alice (engineering lead)
|
|
184
|
+
- `U0DEF456` β Bob (backend)
|
|
185
|
+
|
|
186
|
+
## Aliases
|
|
187
|
+
|
|
188
|
+
- "deploys" β `C056GHI` (#deploys in Acme Corp)
|
|
189
|
+
|
|
190
|
+
## Notes
|
|
191
|
+
|
|
192
|
+
- Deploy Bot is used for CI/CD notifications
|
|
193
|
+
- Alert Bot is used for error monitoring
|
|
194
|
+
```
|
|
195
|
+
|
|
196
|
+
> Memory lets you skip repeated `channel list` and `auth list` calls. When you already know an ID from a previous session, use it directly.
|
|
197
|
+
|
|
121
198
|
## Commands
|
|
122
199
|
|
|
123
200
|
### Message Commands
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
name: agent-teams
|
|
3
3
|
description: Interact with Microsoft Teams - send messages, read channels, manage reactions
|
|
4
|
-
version: 1.10.
|
|
4
|
+
version: 1.10.4
|
|
5
5
|
allowed-tools: Bash(agent-teams:*)
|
|
6
6
|
metadata:
|
|
7
7
|
openclaw:
|
|
@@ -37,6 +37,8 @@ Credentials are extracted automatically from the Teams desktop app on first use.
|
|
|
37
37
|
|
|
38
38
|
Teams tokens expire in 60-90 minutes. The CLI automatically re-extracts a fresh token when the current one expires, so you don't need to manage token lifecycle manually.
|
|
39
39
|
|
|
40
|
+
**IMPORTANT**: NEVER guide the user to open a web browser, use DevTools, or manually copy tokens from a browser. Always use `agent-teams auth extract` to obtain tokens from the desktop app.
|
|
41
|
+
|
|
40
42
|
### Multi-Team Support
|
|
41
43
|
|
|
42
44
|
```bash
|
|
@@ -64,6 +66,80 @@ agent-teams auth switch-account personal
|
|
|
64
66
|
agent-teams snapshot --account work
|
|
65
67
|
```
|
|
66
68
|
|
|
69
|
+
## Memory
|
|
70
|
+
|
|
71
|
+
The agent maintains a `~/.config/agent-messenger/MEMORY.md` file as persistent memory across sessions. This is agent-managed β the CLI does not read or write this file. Use the `Read` and `Write` tools to manage your memory file.
|
|
72
|
+
|
|
73
|
+
### Reading Memory
|
|
74
|
+
|
|
75
|
+
At the **start of every task**, read `~/.config/agent-messenger/MEMORY.md` using the `Read` tool to load any previously discovered team IDs, channel IDs, user IDs, and preferences.
|
|
76
|
+
|
|
77
|
+
- If the file doesn't exist yet, that's fine β proceed without it and create it when you first have useful information to store.
|
|
78
|
+
- If the file can't be read (permissions, missing directory), proceed without memory β don't error out.
|
|
79
|
+
|
|
80
|
+
### Writing Memory
|
|
81
|
+
|
|
82
|
+
After discovering useful information, update `~/.config/agent-messenger/MEMORY.md` using the `Write` tool. Write triggers include:
|
|
83
|
+
|
|
84
|
+
- After discovering team IDs and names (from `team list`, `snapshot`, etc.)
|
|
85
|
+
- After discovering useful channel IDs and names (from `channel list`, `snapshot`, etc.)
|
|
86
|
+
- After discovering user IDs and names (from `user list`, `user me`, etc.)
|
|
87
|
+
- After the user gives you an alias or preference ("call this the standup channel", "my main team is X")
|
|
88
|
+
- After discovering channel structure (standard vs private channels)
|
|
89
|
+
|
|
90
|
+
When writing, include the **complete file content** β the `Write` tool overwrites the entire file.
|
|
91
|
+
|
|
92
|
+
### What to Store
|
|
93
|
+
|
|
94
|
+
- Team IDs with names
|
|
95
|
+
- Channel IDs with names and team context
|
|
96
|
+
- User IDs with display names
|
|
97
|
+
- User-given aliases ("standup channel", "main team")
|
|
98
|
+
- Account preferences (work vs personal)
|
|
99
|
+
- Any user preference expressed during interaction
|
|
100
|
+
|
|
101
|
+
### What NOT to Store
|
|
102
|
+
|
|
103
|
+
Never store tokens, credentials, or any sensitive data. Never store full message content (just IDs and channel context). Never store file upload contents.
|
|
104
|
+
|
|
105
|
+
### Handling Stale Data
|
|
106
|
+
|
|
107
|
+
If a memorized ID returns an error (channel not found, team not found), remove it from `MEMORY.md`. Don't blindly trust memorized data β verify when something seems off. Prefer re-listing over using a memorized ID that might be stale.
|
|
108
|
+
|
|
109
|
+
### Format / Example
|
|
110
|
+
|
|
111
|
+
```markdown
|
|
112
|
+
# Agent Messenger Memory
|
|
113
|
+
|
|
114
|
+
## Teams
|
|
115
|
+
|
|
116
|
+
- `team-id-1` β Acme Corp (default, work account)
|
|
117
|
+
- `team-id-2` β Side Project (personal account)
|
|
118
|
+
|
|
119
|
+
## Channels (Acme Corp)
|
|
120
|
+
|
|
121
|
+
- `channel-id-1` β General
|
|
122
|
+
- `channel-id-2` β Engineering
|
|
123
|
+
- `channel-id-3` β Standups
|
|
124
|
+
|
|
125
|
+
## Users (Acme Corp)
|
|
126
|
+
|
|
127
|
+
- `user-id-1` β Alice (engineering lead)
|
|
128
|
+
- `user-id-2` β Bob (backend)
|
|
129
|
+
|
|
130
|
+
## Aliases
|
|
131
|
+
|
|
132
|
+
- "standup" β `channel-id-3` (Standups in Acme Corp)
|
|
133
|
+
- "main team" β `team-id-1` (Acme Corp)
|
|
134
|
+
|
|
135
|
+
## Notes
|
|
136
|
+
|
|
137
|
+
- User prefers work account by default
|
|
138
|
+
- Main team is "Acme Corp"
|
|
139
|
+
```
|
|
140
|
+
|
|
141
|
+
> Memory lets you skip repeated `channel list` and `team list` calls. When you already know an ID from a previous session, use it directly.
|
|
142
|
+
|
|
67
143
|
## Commands
|
|
68
144
|
|
|
69
145
|
### Auth Commands
|
|
@@ -340,7 +340,7 @@ With extracted credentials, agent-teams has the same permissions as you in Teams
|
|
|
340
340
|
|
|
341
341
|
## Manual Token Management (Advanced)
|
|
342
342
|
|
|
343
|
-
If automatic extraction fails, you can manually create credentials:
|
|
343
|
+
If automatic extraction fails, you can manually create the credentials file:
|
|
344
344
|
|
|
345
345
|
```bash
|
|
346
346
|
# Create config directory
|
|
@@ -365,11 +365,6 @@ EOF
|
|
|
365
365
|
chmod 600 ~/.config/agent-messenger/teams-credentials.json
|
|
366
366
|
```
|
|
367
367
|
|
|
368
|
-
|
|
369
|
-
1. Open Teams in browser (teams.microsoft.com)
|
|
370
|
-
2. Open DevTools -> Application tab
|
|
371
|
-
3. Go to Cookies -> teams.microsoft.com
|
|
372
|
-
4. Find `skypetoken_asm` cookie
|
|
373
|
-
5. Copy the value
|
|
368
|
+
If the user already has a token value, they can populate the file above. Otherwise, always prefer `agent-teams auth extract` to obtain the token automatically from the desktop app.
|
|
374
369
|
|
|
375
370
|
**Warning**: Using user tokens for automation may violate Microsoft's Terms of Service. Use responsibly and at your own risk.
|
|
@@ -503,6 +503,108 @@ describe('TokenExtractor Windows DPAPI', () => {
|
|
|
503
503
|
})
|
|
504
504
|
})
|
|
505
505
|
|
|
506
|
+
describe('TokenExtractor IndexedDB blob files', () => {
|
|
507
|
+
test('extracts token from blob file when not in LevelDB', async () => {
|
|
508
|
+
// given β token only exists in an IndexedDB blob file, not in LevelDB
|
|
509
|
+
const slackDir = mkdtempSync(join(tmpdir(), 'slack-blob-'))
|
|
510
|
+
tempDirs.push(slackDir)
|
|
511
|
+
|
|
512
|
+
const hex64 = 'a'.repeat(64)
|
|
513
|
+
const token = `xoxc-1111111111-2222222222-3333333333-${hex64}`
|
|
514
|
+
|
|
515
|
+
const blobDir = join(slackDir, 'IndexedDB', 'https_app.slack.com_0.indexeddb.blob', '2', '05')
|
|
516
|
+
mkdirSync(blobDir, { recursive: true })
|
|
517
|
+
writeFileSync(join(blobDir, '584'), `"team_name":"blob-workspace"T12345678"token":"${token}"`)
|
|
518
|
+
|
|
519
|
+
// when
|
|
520
|
+
const extractor = new TokenExtractor('darwin', slackDir)
|
|
521
|
+
const result = await extractor.extract()
|
|
522
|
+
|
|
523
|
+
// then
|
|
524
|
+
expect(result.length).toBe(1)
|
|
525
|
+
expect(result[0].token).toBe(token)
|
|
526
|
+
expect(result[0].workspace_id).toBe('T12345678')
|
|
527
|
+
})
|
|
528
|
+
|
|
529
|
+
test('extracts tokens from both LevelDB and blob files for different teams', async () => {
|
|
530
|
+
// given β one workspace token in LevelDB, another in blob file
|
|
531
|
+
const slackDir = mkdtempSync(join(tmpdir(), 'slack-blob-multi-'))
|
|
532
|
+
tempDirs.push(slackDir)
|
|
533
|
+
|
|
534
|
+
const hex64a = 'a'.repeat(64)
|
|
535
|
+
const hex64b = 'b'.repeat(64)
|
|
536
|
+
const tokenA = `xoxc-1111111111-2222222222-3333333333-${hex64a}`
|
|
537
|
+
const tokenB = `xoxc-4444444444-5555555555-6666666666-${hex64b}`
|
|
538
|
+
|
|
539
|
+
const leveldbDir = join(slackDir, 'IndexedDB', 'https_app.slack.com_0.indexeddb.leveldb')
|
|
540
|
+
mkdirSync(leveldbDir, { recursive: true })
|
|
541
|
+
writeFileSync(join(leveldbDir, '000001.log'), `"${tokenA}"TAAAAAAAA"name":"leveldb-ws"`)
|
|
542
|
+
|
|
543
|
+
const blobDir = join(slackDir, 'IndexedDB', 'https_app.slack.com_0.indexeddb.blob', '2', '05')
|
|
544
|
+
mkdirSync(blobDir, { recursive: true })
|
|
545
|
+
writeFileSync(join(blobDir, '584'), `"team_name":"blob-ws"TBBBBBBBBB"token":"${tokenB}"`)
|
|
546
|
+
|
|
547
|
+
// when
|
|
548
|
+
const extractor = new TokenExtractor('darwin', slackDir)
|
|
549
|
+
const result = await extractor.extract()
|
|
550
|
+
|
|
551
|
+
// then β both workspaces are extracted
|
|
552
|
+
expect(result.length).toBe(2)
|
|
553
|
+
const teamIds = result.map((r) => r.workspace_id).sort()
|
|
554
|
+
expect(teamIds).toEqual(['TAAAAAAAA', 'TBBBBBBBBB'])
|
|
555
|
+
})
|
|
556
|
+
|
|
557
|
+
test('LevelDB token wins over blob file token for same team', async () => {
|
|
558
|
+
// given β same team in both LevelDB (.log = highest raw priority) and blob file
|
|
559
|
+
const slackDir = mkdtempSync(join(tmpdir(), 'slack-blob-dedup-'))
|
|
560
|
+
tempDirs.push(slackDir)
|
|
561
|
+
|
|
562
|
+
const hex64ldb = 'a'.repeat(64)
|
|
563
|
+
const hex64blob = 'b'.repeat(64)
|
|
564
|
+
const ldbToken = `xoxc-1111111111-2222222222-3333333333-${hex64ldb}`
|
|
565
|
+
const blobToken = `xoxc-4444444444-5555555555-6666666666-${hex64blob}`
|
|
566
|
+
|
|
567
|
+
const leveldbDir = join(slackDir, 'IndexedDB', 'https_app.slack.com_0.indexeddb.leveldb')
|
|
568
|
+
mkdirSync(leveldbDir, { recursive: true })
|
|
569
|
+
writeFileSync(join(leveldbDir, '000001.log'), `"${ldbToken}"T12345678"name":"ldb-workspace"`)
|
|
570
|
+
|
|
571
|
+
const blobDir = join(slackDir, 'IndexedDB', 'https_app.slack.com_0.indexeddb.blob', '2', '05')
|
|
572
|
+
mkdirSync(blobDir, { recursive: true })
|
|
573
|
+
writeFileSync(join(blobDir, '584'), `"team_name":"blob-workspace"T12345678"token":"${blobToken}"`)
|
|
574
|
+
|
|
575
|
+
// when
|
|
576
|
+
const extractor = new TokenExtractor('darwin', slackDir)
|
|
577
|
+
const result = await extractor.extract()
|
|
578
|
+
|
|
579
|
+
// then β .log source (priority 3) beats blob-file (priority 1)
|
|
580
|
+
expect(result.length).toBe(1)
|
|
581
|
+
expect(result[0].token).toBe(ldbToken)
|
|
582
|
+
})
|
|
583
|
+
|
|
584
|
+
test('skips blob files larger than 10MB', async () => {
|
|
585
|
+
// given β blob file exceeds size limit
|
|
586
|
+
const slackDir = mkdtempSync(join(tmpdir(), 'slack-blob-large-'))
|
|
587
|
+
tempDirs.push(slackDir)
|
|
588
|
+
|
|
589
|
+
const hex64 = 'a'.repeat(64)
|
|
590
|
+
const token = `xoxc-1111111111-2222222222-3333333333-${hex64}`
|
|
591
|
+
|
|
592
|
+
const blobDir = join(slackDir, 'IndexedDB', 'https_app.slack.com_0.indexeddb.blob', '1', '00')
|
|
593
|
+
mkdirSync(blobDir, { recursive: true })
|
|
594
|
+
|
|
595
|
+
const largeContent = Buffer.alloc(11 * 1024 * 1024)
|
|
596
|
+
Buffer.from(`"team_name":"large"T12345678"${token}"`).copy(largeContent)
|
|
597
|
+
writeFileSync(join(blobDir, '1'), largeContent)
|
|
598
|
+
|
|
599
|
+
// when
|
|
600
|
+
const extractor = new TokenExtractor('darwin', slackDir)
|
|
601
|
+
const result = await extractor.extract()
|
|
602
|
+
|
|
603
|
+
// then
|
|
604
|
+
expect(result.length).toBe(0)
|
|
605
|
+
})
|
|
606
|
+
})
|
|
607
|
+
|
|
506
608
|
describe('TokenExtractor getWorkspaceDomains', () => {
|
|
507
609
|
test('reads workspace domains from root-state.json', () => {
|
|
508
610
|
// given
|
|
@@ -16,7 +16,7 @@ export interface ExtractedWorkspace {
|
|
|
16
16
|
cookie: string
|
|
17
17
|
}
|
|
18
18
|
|
|
19
|
-
type TokenSource = 'json-teams' | 'json-single' | 'log-file' | 'ldb-file' | 'classic-level'
|
|
19
|
+
type TokenSource = 'json-teams' | 'json-single' | 'log-file' | 'ldb-file' | 'classic-level' | 'blob-file'
|
|
20
20
|
type TokenDirTier = 'storage' | 'local-storage' | 'indexeddb'
|
|
21
21
|
|
|
22
22
|
interface RawTokenInfo {
|
|
@@ -36,6 +36,7 @@ const SOURCE_PRIORITY: Record<TokenSource, number> = {
|
|
|
36
36
|
'json-single': 4,
|
|
37
37
|
'log-file': 3,
|
|
38
38
|
'classic-level': 2,
|
|
39
|
+
'blob-file': 1,
|
|
39
40
|
'ldb-file': 1,
|
|
40
41
|
}
|
|
41
42
|
|
|
@@ -99,13 +100,59 @@ export class TokenExtractor {
|
|
|
99
100
|
}
|
|
100
101
|
case 'linux':
|
|
101
102
|
return join(homedir(), '.config', 'Slack')
|
|
102
|
-
case 'win32':
|
|
103
|
+
case 'win32': {
|
|
104
|
+
// Check MSIX (Microsoft Store / GPO) package path first
|
|
105
|
+
const msixPath = this.findMsixSlackDir()
|
|
106
|
+
if (msixPath) {
|
|
107
|
+
return msixPath
|
|
108
|
+
}
|
|
109
|
+
// Direct download version
|
|
103
110
|
return join(process.env.APPDATA || join(homedir(), 'AppData', 'Roaming'), 'Slack')
|
|
111
|
+
}
|
|
104
112
|
default:
|
|
105
113
|
throw new Error(`Unsupported platform: ${this.platform}`)
|
|
106
114
|
}
|
|
107
115
|
}
|
|
108
116
|
|
|
117
|
+
private findMsixSlackDir(): string | null {
|
|
118
|
+
const packagesDir = join(process.env.LOCALAPPDATA || join(homedir(), 'AppData', 'Local'), 'Packages')
|
|
119
|
+
if (!existsSync(packagesDir)) {
|
|
120
|
+
this.debug('MSIX Packages directory not found')
|
|
121
|
+
return null
|
|
122
|
+
}
|
|
123
|
+
|
|
124
|
+
try {
|
|
125
|
+
const entries = readdirSync(packagesDir, { withFileTypes: true })
|
|
126
|
+
let best: { path: string; mtimeMs: number } | null = null
|
|
127
|
+
|
|
128
|
+
for (const entry of entries) {
|
|
129
|
+
if (!entry.isDirectory() || !entry.name.toLowerCase().includes('slack')) {
|
|
130
|
+
continue
|
|
131
|
+
}
|
|
132
|
+
const slackData = join(packagesDir, entry.name, 'LocalCache', 'Roaming', 'Slack')
|
|
133
|
+
this.debug(`Found MSIX candidate: ${entry.name}`)
|
|
134
|
+
if (!existsSync(join(slackData, 'storage')) && !existsSync(join(slackData, 'Local Storage'))) {
|
|
135
|
+
this.debug(` No Slack data at ${slackData}`)
|
|
136
|
+
continue
|
|
137
|
+
}
|
|
138
|
+
const mtime = statSync(slackData).mtimeMs
|
|
139
|
+
this.debug(` Valid Slack data found (mtime: ${new Date(mtime).toISOString()})`)
|
|
140
|
+
if (!best || mtime > best.mtimeMs) {
|
|
141
|
+
best = { path: slackData, mtimeMs: mtime }
|
|
142
|
+
}
|
|
143
|
+
}
|
|
144
|
+
|
|
145
|
+
if (best) {
|
|
146
|
+
this.debug(`Using MSIX Slack dir: ${best.path}`)
|
|
147
|
+
} else {
|
|
148
|
+
this.debug('No valid MSIX Slack data found, falling back to APPDATA')
|
|
149
|
+
}
|
|
150
|
+
return best?.path ?? null
|
|
151
|
+
} catch {
|
|
152
|
+
return null
|
|
153
|
+
}
|
|
154
|
+
}
|
|
155
|
+
|
|
109
156
|
async extractCookie(): Promise<string> {
|
|
110
157
|
if (!existsSync(this.slackDir)) {
|
|
111
158
|
return ''
|
|
@@ -188,6 +235,10 @@ export class TokenExtractor {
|
|
|
188
235
|
tokens.push(...extracted)
|
|
189
236
|
} catch {}
|
|
190
237
|
}
|
|
238
|
+
|
|
239
|
+
// Chromium offloads large IndexedDB values to external *.indexeddb.blob/ files
|
|
240
|
+
const blobTokens = this.extractTokensFromBlobFiles(baseDir, tier)
|
|
241
|
+
tokens.push(...blobTokens)
|
|
191
242
|
}
|
|
192
243
|
|
|
193
244
|
return this.deduplicateTokens(tokens)
|
|
@@ -311,6 +362,56 @@ export class TokenExtractor {
|
|
|
311
362
|
return tokens
|
|
312
363
|
}
|
|
313
364
|
|
|
365
|
+
private extractTokensFromBlobFiles(baseDir: string, dirTier: TokenDirTier): TokenInfo[] {
|
|
366
|
+
const tokens: TokenInfo[] = []
|
|
367
|
+
try {
|
|
368
|
+
const entries = readdirSync(baseDir, { withFileTypes: true })
|
|
369
|
+
for (const entry of entries) {
|
|
370
|
+
if (!entry.isDirectory() || !entry.name.endsWith('.indexeddb.blob')) continue
|
|
371
|
+
|
|
372
|
+
const blobDir = join(baseDir, entry.name)
|
|
373
|
+
this.debug(`Scanning blob directory: ${blobDir}`)
|
|
374
|
+
const files = this.findFilesRecursive(blobDir)
|
|
375
|
+
|
|
376
|
+
for (const filePath of files) {
|
|
377
|
+
try {
|
|
378
|
+
const stat = statSync(filePath)
|
|
379
|
+
if (stat.size > 10 * 1024 * 1024) continue
|
|
380
|
+
|
|
381
|
+
const content = readFileSync(filePath)
|
|
382
|
+
const xoxcMarker = Buffer.from('xoxc-')
|
|
383
|
+
let idx = content.indexOf(xoxcMarker, 0)
|
|
384
|
+
while (idx !== -1) {
|
|
385
|
+
const tokenData = this.extractTokenFromBuffer(content, idx)
|
|
386
|
+
if (tokenData) {
|
|
387
|
+
this.debug(`Found token in blob file: ${filePath}`)
|
|
388
|
+
tokens.push({ ...tokenData, source: 'blob-file', dirTier })
|
|
389
|
+
}
|
|
390
|
+
idx = content.indexOf(xoxcMarker, idx + 5)
|
|
391
|
+
}
|
|
392
|
+
} catch {}
|
|
393
|
+
}
|
|
394
|
+
}
|
|
395
|
+
} catch {}
|
|
396
|
+
return tokens
|
|
397
|
+
}
|
|
398
|
+
|
|
399
|
+
private findFilesRecursive(dir: string): string[] {
|
|
400
|
+
const files: string[] = []
|
|
401
|
+
try {
|
|
402
|
+
const entries = readdirSync(dir, { withFileTypes: true })
|
|
403
|
+
for (const entry of entries) {
|
|
404
|
+
const fullPath = join(dir, entry.name)
|
|
405
|
+
if (entry.isDirectory()) {
|
|
406
|
+
files.push(...this.findFilesRecursive(fullPath))
|
|
407
|
+
} else if (entry.isFile()) {
|
|
408
|
+
files.push(fullPath)
|
|
409
|
+
}
|
|
410
|
+
}
|
|
411
|
+
} catch {}
|
|
412
|
+
return files
|
|
413
|
+
}
|
|
414
|
+
|
|
314
415
|
private extractTokensFromLDBFiles(dbPath: string, dirTier: TokenDirTier): TokenInfo[] {
|
|
315
416
|
const tokens: TokenInfo[] = []
|
|
316
417
|
try {
|