@ekkos/cli 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.
- package/dist/cache/LocalSessionStore.d.ts +129 -0
- package/dist/cache/LocalSessionStore.js +688 -0
- package/dist/cache/capture.d.ts +26 -0
- package/dist/cache/capture.js +461 -0
- package/dist/cache/index.d.ts +7 -0
- package/dist/cache/index.js +23 -0
- package/dist/cache/types.d.ts +147 -0
- package/dist/cache/types.js +40 -0
- package/dist/commands/init.d.ts +9 -0
- package/dist/commands/init.js +478 -0
- package/dist/commands/run.d.ts +12 -0
- package/dist/commands/run.js +829 -0
- package/dist/commands/setup.d.ts +6 -0
- package/dist/commands/setup.js +658 -0
- package/dist/commands/status.d.ts +1 -0
- package/dist/commands/status.js +109 -0
- package/dist/commands/test.d.ts +1 -0
- package/dist/commands/test.js +157 -0
- package/dist/deploy/agents.d.ts +15 -0
- package/dist/deploy/agents.js +72 -0
- package/dist/deploy/hooks.d.ts +16 -0
- package/dist/deploy/hooks.js +121 -0
- package/dist/deploy/index.d.ts +7 -0
- package/dist/deploy/index.js +24 -0
- package/dist/deploy/instructions.d.ts +12 -0
- package/dist/deploy/instructions.js +36 -0
- package/dist/deploy/mcp.d.ts +19 -0
- package/dist/deploy/mcp.js +109 -0
- package/dist/deploy/plugins.d.ts +19 -0
- package/dist/deploy/plugins.js +62 -0
- package/dist/deploy/settings.d.ts +8 -0
- package/dist/deploy/settings.js +84 -0
- package/dist/deploy/skills.d.ts +19 -0
- package/dist/deploy/skills.js +60 -0
- package/dist/index.d.ts +2 -0
- package/dist/index.js +71 -0
- package/dist/restore/RestoreOrchestrator.d.ts +48 -0
- package/dist/restore/RestoreOrchestrator.js +481 -0
- package/dist/restore/index.d.ts +4 -0
- package/dist/restore/index.js +20 -0
- package/dist/utils/platform.d.ts +29 -0
- package/dist/utils/platform.js +65 -0
- package/dist/utils/session-words.json +119 -0
- package/dist/utils/state.d.ts +57 -0
- package/dist/utils/state.js +186 -0
- package/dist/utils/templates.d.ts +24 -0
- package/dist/utils/templates.js +118 -0
- package/package.json +48 -0
- package/templates/CLAUDE.md +287 -0
- package/templates/README.md +378 -0
- package/templates/agents/README.md +182 -0
- package/templates/agents/code-reviewer.md +166 -0
- package/templates/agents/debug-detective.md +169 -0
- package/templates/agents/ekkOS_Vercel.md +99 -0
- package/templates/agents/extension-manager.md +229 -0
- package/templates/agents/git-companion.md +185 -0
- package/templates/agents/github-test-agent.md +321 -0
- package/templates/agents/railway-manager.md +179 -0
- package/templates/claude-plugins/PHASE2_COMPLETION.md +346 -0
- package/templates/claude-plugins/PLUGIN_PROPOSALS.md +1776 -0
- package/templates/claude-plugins/README.md +587 -0
- package/templates/claude-plugins/agents/code-reviewer.json +14 -0
- package/templates/claude-plugins/agents/debug-detective.json +15 -0
- package/templates/claude-plugins/agents/git-companion.json +14 -0
- package/templates/claude-plugins/blog-manager/.claude-plugin/plugin.json +8 -0
- package/templates/claude-plugins/blog-manager/commands/blog.md +691 -0
- package/templates/claude-plugins/golden-loop-monitor/.claude-plugin/plugin.json +8 -0
- package/templates/claude-plugins/golden-loop-monitor/commands/loop-status.md +434 -0
- package/templates/claude-plugins/learning-tracker/.claude-plugin/plugin.json +8 -0
- package/templates/claude-plugins/learning-tracker/commands/my-patterns.md +282 -0
- package/templates/claude-plugins/memory-lens/.claude-plugin/plugin.json +8 -0
- package/templates/claude-plugins/memory-lens/commands/memory-search.md +181 -0
- package/templates/claude-plugins/pattern-coach/.claude-plugin/plugin.json +8 -0
- package/templates/claude-plugins/pattern-coach/commands/forge.md +365 -0
- package/templates/claude-plugins/project-schema-validator/.claude-plugin/plugin.json +8 -0
- package/templates/claude-plugins/project-schema-validator/commands/validate-schema.md +582 -0
- package/templates/claude-plugins-admin/AGENT_TEAM_PROPOSALS.md +819 -0
- package/templates/claude-plugins-admin/README.md +446 -0
- package/templates/claude-plugins-admin/autonomous-admin-agent/.claude-plugin/plugin.json +8 -0
- package/templates/claude-plugins-admin/autonomous-admin-agent/commands/agent.md +595 -0
- package/templates/claude-plugins-admin/backend-agent/.claude-plugin/plugin.json +8 -0
- package/templates/claude-plugins-admin/backend-agent/commands/backend.md +798 -0
- package/templates/claude-plugins-admin/deploy-guardian/.claude-plugin/plugin.json +8 -0
- package/templates/claude-plugins-admin/deploy-guardian/commands/deploy.md +554 -0
- package/templates/claude-plugins-admin/frontend-agent/.claude-plugin/plugin.json +8 -0
- package/templates/claude-plugins-admin/frontend-agent/commands/frontend.md +881 -0
- package/templates/claude-plugins-admin/mcp-server-manager/.claude-plugin/plugin.json +8 -0
- package/templates/claude-plugins-admin/mcp-server-manager/commands/mcp.md +85 -0
- package/templates/claude-plugins-admin/memory-system-monitor/.claude-plugin/plugin.json +8 -0
- package/templates/claude-plugins-admin/memory-system-monitor/commands/memory-health.md +569 -0
- package/templates/claude-plugins-admin/qa-agent/.claude-plugin/plugin.json +8 -0
- package/templates/claude-plugins-admin/qa-agent/commands/qa.md +863 -0
- package/templates/claude-plugins-admin/tech-lead-agent/.claude-plugin/plugin.json +8 -0
- package/templates/claude-plugins-admin/tech-lead-agent/commands/lead.md +732 -0
- package/templates/commands/continue.md +47 -0
- package/templates/cursor-hooks/after-agent-response.sh +117 -0
- package/templates/cursor-hooks/before-submit-prompt.sh +419 -0
- package/templates/cursor-hooks/hooks.json +20 -0
- package/templates/cursor-hooks/lib/contract.sh +320 -0
- package/templates/cursor-hooks/stop.sh +75 -0
- package/templates/cursor-rules/ekkos-memory.md +187 -0
- package/templates/hooks/assistant-response.sh +96 -0
- package/templates/hooks/hooks.json +28 -0
- package/templates/hooks/lib/contract.sh +320 -0
- package/templates/hooks/lib/state.sh +158 -0
- package/templates/hooks/session-start.ps1 +41 -0
- package/templates/hooks/session-start.sh +318 -0
- package/templates/hooks/stop.ps1 +16 -0
- package/templates/hooks/stop.sh +989 -0
- package/templates/hooks/user-prompt-submit.ps1 +174 -0
- package/templates/hooks/user-prompt-submit.sh +587 -0
- package/templates/hooks-node/lib/state.js +187 -0
- package/templates/hooks-node/stop.js +416 -0
- package/templates/hooks-node/user-prompt-submit.js +337 -0
- package/templates/plan-template.md +306 -0
- package/templates/rules/00-hooks-contract.mdc +89 -0
- package/templates/rules/30-ekkos-core.mdc +188 -0
- package/templates/rules/31-ekkos-messages.mdc +78 -0
- package/templates/skills/continue/SKILL.md +169 -0
- package/templates/skills/ekkOS_Deep_Recall/Skill.md +282 -0
- package/templates/skills/ekkOS_Learn/Skill.md +265 -0
- package/templates/skills/ekkOS_Memory_First/Skill.md +206 -0
- package/templates/skills/ekkOS_Plan_Assist/Skill.md +302 -0
- package/templates/skills/ekkOS_Preferences/Skill.md +247 -0
- package/templates/skills/ekkOS_Reflect/Skill.md +257 -0
- package/templates/skills/ekkOS_Safety/Skill.md +265 -0
- package/templates/skills/ekkOS_Schema/Skill.md +251 -0
- package/templates/skills/ekkOS_Summary/Skill.md +257 -0
- package/templates/skills/ekkOS_Vault/Skill.md +287 -0
- package/templates/skills/permissions/Skill.md +322 -0
- package/templates/spec-template.md +159 -0
- package/templates/windsurf-hooks/before-submit-prompt.sh +238 -0
- package/templates/windsurf-hooks/hooks.json +10 -0
- package/templates/windsurf-hooks/lib/contract.sh +320 -0
- package/templates/windsurf-rules/ekkos-memory.md +129 -0
|
@@ -0,0 +1,257 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: ekkOS_Summary
|
|
3
|
+
description: Show what ekkOS learned and did. Activate when the user asks "what did you learn", "show me my patterns", "ekkOS status", "memory summary", or wants to understand what the memory system captured. This skill provides transparency about memory operations.
|
|
4
|
+
allowed-tools:
|
|
5
|
+
- mcp__ekkos-memory__ekkOS_Summary
|
|
6
|
+
- mcp__ekkos-memory__ekkOS_Stats
|
|
7
|
+
- mcp__ekkos-memory__ekkOS_Search
|
|
8
|
+
- mcp__ekkos-memory__ekkOS_Plans
|
|
9
|
+
---
|
|
10
|
+
|
|
11
|
+
# ekkOS_Summary
|
|
12
|
+
|
|
13
|
+
You are augmented with **ekkOS_ memory** - and you can show users exactly what the memory system has learned and done.
|
|
14
|
+
|
|
15
|
+
## Why This Skill Exists
|
|
16
|
+
|
|
17
|
+
Transparency builds trust:
|
|
18
|
+
- Users should know what's being remembered
|
|
19
|
+
- Pattern counts and success rates matter
|
|
20
|
+
- Session activity should be visible
|
|
21
|
+
|
|
22
|
+
This skill provides insight into ekkOS operations.
|
|
23
|
+
|
|
24
|
+
## When To Activate
|
|
25
|
+
|
|
26
|
+
This skill should trigger when:
|
|
27
|
+
|
|
28
|
+
| Trigger | Example |
|
|
29
|
+
|---------|---------|
|
|
30
|
+
| "What did you learn?" | Wants to see forged patterns |
|
|
31
|
+
| "Show my patterns" | Wants pattern list |
|
|
32
|
+
| "ekkOS status" | System health check |
|
|
33
|
+
| "Memory summary" | Overview request |
|
|
34
|
+
| "What did ekkOS do?" | Activity review |
|
|
35
|
+
| End of session | Natural summary point |
|
|
36
|
+
|
|
37
|
+
## Instructions
|
|
38
|
+
|
|
39
|
+
### Session Summary
|
|
40
|
+
|
|
41
|
+
```
|
|
42
|
+
ekkOS_Summary({
|
|
43
|
+
time_window_seconds: 300 // Last 5 minutes
|
|
44
|
+
})
|
|
45
|
+
```
|
|
46
|
+
|
|
47
|
+
Response:
|
|
48
|
+
```json
|
|
49
|
+
{
|
|
50
|
+
"session_activity": {
|
|
51
|
+
"searches": 5,
|
|
52
|
+
"patterns_retrieved": 12,
|
|
53
|
+
"patterns_applied": 4,
|
|
54
|
+
"patterns_forged": 2,
|
|
55
|
+
"directives_created": 1
|
|
56
|
+
},
|
|
57
|
+
"recent_events": [
|
|
58
|
+
{"type": "search", "query": "auth error", "results": 3},
|
|
59
|
+
{"type": "forge", "title": "JWT clock tolerance fix"},
|
|
60
|
+
{"type": "apply", "pattern": "Error handling middleware"}
|
|
61
|
+
]
|
|
62
|
+
}
|
|
63
|
+
```
|
|
64
|
+
|
|
65
|
+
### Memory Statistics
|
|
66
|
+
|
|
67
|
+
```
|
|
68
|
+
ekkOS_Stats({
|
|
69
|
+
scope: "personal" // or "collective" or "both"
|
|
70
|
+
})
|
|
71
|
+
```
|
|
72
|
+
|
|
73
|
+
Response:
|
|
74
|
+
```json
|
|
75
|
+
{
|
|
76
|
+
"personal": {
|
|
77
|
+
"patterns": 127,
|
|
78
|
+
"directives": 23,
|
|
79
|
+
"episodes": 489,
|
|
80
|
+
"avg_success_rate": 0.82
|
|
81
|
+
},
|
|
82
|
+
"collective": {
|
|
83
|
+
"patterns": 5420,
|
|
84
|
+
"avg_success_rate": 0.78
|
|
85
|
+
}
|
|
86
|
+
}
|
|
87
|
+
```
|
|
88
|
+
|
|
89
|
+
## Example Scenarios
|
|
90
|
+
|
|
91
|
+
### Scenario 1: Session Summary
|
|
92
|
+
```
|
|
93
|
+
User: "What did ekkOS do this session?"
|
|
94
|
+
|
|
95
|
+
You: ekkOS_Summary({ time_window_seconds: 3600 })
|
|
96
|
+
|
|
97
|
+
"🧠 ekkOS Session Summary (last hour):
|
|
98
|
+
|
|
99
|
+
📊 Activity:
|
|
100
|
+
├── Searches: 8 queries
|
|
101
|
+
├── Patterns retrieved: 15
|
|
102
|
+
├── Patterns applied: 6
|
|
103
|
+
└── Patterns forged: 3
|
|
104
|
+
|
|
105
|
+
✨ New patterns created:
|
|
106
|
+
1. 'Fix CORS with credentials mode'
|
|
107
|
+
2. 'Supabase RLS policy syntax'
|
|
108
|
+
3. 'React useEffect cleanup pattern'
|
|
109
|
+
|
|
110
|
+
📋 Directives added:
|
|
111
|
+
1. [PREFER] Use arrow functions
|
|
112
|
+
|
|
113
|
+
🎯 Golden Loop compliance: 94%
|
|
114
|
+
|
|
115
|
+
Your memory is growing!"
|
|
116
|
+
```
|
|
117
|
+
|
|
118
|
+
### Scenario 2: Overall Statistics
|
|
119
|
+
```
|
|
120
|
+
User: "How's my ekkOS memory doing?"
|
|
121
|
+
|
|
122
|
+
You: ekkOS_Stats({ scope: "both" })
|
|
123
|
+
|
|
124
|
+
"🧠 ekkOS Memory Statistics:
|
|
125
|
+
|
|
126
|
+
📚 Your Personal Memory:
|
|
127
|
+
├── Patterns: 127 total
|
|
128
|
+
├── Success rate: 82%
|
|
129
|
+
├── Directives: 23 active
|
|
130
|
+
├── Episodes: 489 conversations
|
|
131
|
+
└── Most used: 'Error handling' (45 applications)
|
|
132
|
+
|
|
133
|
+
🌐 Collective Memory:
|
|
134
|
+
├── Total patterns: 5,420
|
|
135
|
+
├── Your contributions: 127
|
|
136
|
+
└── Top category: API Integration
|
|
137
|
+
|
|
138
|
+
📈 Growth:
|
|
139
|
+
├── This week: +12 patterns
|
|
140
|
+
├── This month: +47 patterns
|
|
141
|
+
└── Trend: ↑ 15% more than last month
|
|
142
|
+
|
|
143
|
+
You're in the top 10% of ekkOS contributors!"
|
|
144
|
+
```
|
|
145
|
+
|
|
146
|
+
### Scenario 3: What Did You Learn?
|
|
147
|
+
```
|
|
148
|
+
User: "What patterns did you learn from our conversation?"
|
|
149
|
+
|
|
150
|
+
You: ekkOS_Search({
|
|
151
|
+
query: "session:" + session_id,
|
|
152
|
+
sources: ["patterns"]
|
|
153
|
+
})
|
|
154
|
+
|
|
155
|
+
"🧠 Patterns learned this session:
|
|
156
|
+
|
|
157
|
+
1. **Fix timezone issues in date comparison**
|
|
158
|
+
Problem: Dates compared without timezone normalization
|
|
159
|
+
Solution: Always convert to UTC before comparison
|
|
160
|
+
Confidence: 85%
|
|
161
|
+
|
|
162
|
+
2. **Supabase real-time subscription cleanup**
|
|
163
|
+
Problem: Memory leak from unsubscribed channels
|
|
164
|
+
Solution: Store subscription and call unsubscribe in useEffect cleanup
|
|
165
|
+
Confidence: 90%
|
|
166
|
+
|
|
167
|
+
3. **Anti-pattern: Don't use .env in client code**
|
|
168
|
+
Problem: Tried to read .env directly in React
|
|
169
|
+
Solution: Use NEXT_PUBLIC_ prefix or server-side only
|
|
170
|
+
Type: Anti-pattern (learned from mistake)
|
|
171
|
+
|
|
172
|
+
These will help in future sessions!"
|
|
173
|
+
```
|
|
174
|
+
|
|
175
|
+
### Scenario 4: Plan Status
|
|
176
|
+
```
|
|
177
|
+
User: "What am I working on?"
|
|
178
|
+
|
|
179
|
+
You: ekkOS_Plans({ status: "in_progress" })
|
|
180
|
+
|
|
181
|
+
ekkOS_Summary({ time_window_seconds: 86400 })
|
|
182
|
+
|
|
183
|
+
"🧠 Current State:
|
|
184
|
+
|
|
185
|
+
📋 Active Plans:
|
|
186
|
+
1. **API Refactoring** [5/8 steps]
|
|
187
|
+
Current: Creating service interfaces
|
|
188
|
+
Next: Add dependency injection
|
|
189
|
+
|
|
190
|
+
2. **Auth System** [2/6 steps]
|
|
191
|
+
Current: Implementing registration
|
|
192
|
+
Blocked: Waiting for email service
|
|
193
|
+
|
|
194
|
+
📊 Today's Progress:
|
|
195
|
+
├── Completed 3 plan steps
|
|
196
|
+
├── Forged 2 new patterns
|
|
197
|
+
└── Applied 8 existing patterns
|
|
198
|
+
|
|
199
|
+
Resume API Refactoring?"
|
|
200
|
+
```
|
|
201
|
+
|
|
202
|
+
### Scenario 5: Memory Health Check
|
|
203
|
+
```
|
|
204
|
+
User: "Is ekkOS working properly?"
|
|
205
|
+
|
|
206
|
+
You: ekkOS_Stats({})
|
|
207
|
+
|
|
208
|
+
"🧠 ekkOS Health Check:
|
|
209
|
+
|
|
210
|
+
✅ API Connection: Healthy
|
|
211
|
+
✅ Pattern Layer: 127 patterns indexed
|
|
212
|
+
✅ Directive Layer: 23 active rules
|
|
213
|
+
✅ Episode Layer: 489 conversations stored
|
|
214
|
+
✅ Context Guardian: Active
|
|
215
|
+
|
|
216
|
+
📊 Performance:
|
|
217
|
+
├── Average search time: 120ms
|
|
218
|
+
├── Pattern retrieval rate: 94%
|
|
219
|
+
└── Golden Loop compliance: 91%
|
|
220
|
+
|
|
221
|
+
⚠️ Suggestions:
|
|
222
|
+
├── 5 patterns have <50% success rate
|
|
223
|
+
└── Consider reviewing/updating these
|
|
224
|
+
|
|
225
|
+
Overall: System healthy! 🟢"
|
|
226
|
+
```
|
|
227
|
+
|
|
228
|
+
## Display Formats
|
|
229
|
+
|
|
230
|
+
### Compact Summary
|
|
231
|
+
```
|
|
232
|
+
🧠 ekkOS: 127 patterns | 23 directives | 82% success rate
|
|
233
|
+
```
|
|
234
|
+
|
|
235
|
+
### Detailed Summary
|
|
236
|
+
```
|
|
237
|
+
🧠 ekkOS Memory Summary
|
|
238
|
+
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
|
|
239
|
+
Patterns: 127 total, 82% success rate
|
|
240
|
+
Directives: 23 active (12 MUST, 8 NEVER, 3 PREFER)
|
|
241
|
+
Episodes: 489 conversations indexed
|
|
242
|
+
Plans: 2 in progress, 15 completed
|
|
243
|
+
━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━
|
|
244
|
+
```
|
|
245
|
+
|
|
246
|
+
## Success Metrics
|
|
247
|
+
|
|
248
|
+
You're using this skill correctly when:
|
|
249
|
+
- Users understand what ekkOS is doing
|
|
250
|
+
- Statistics are presented clearly
|
|
251
|
+
- Session activity is transparent
|
|
252
|
+
- Users trust the memory system
|
|
253
|
+
- Summaries are useful, not overwhelming
|
|
254
|
+
|
|
255
|
+
---
|
|
256
|
+
|
|
257
|
+
**Mantra**: Show the work. Users should see what ekkOS learns.
|
|
@@ -0,0 +1,287 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: ekkOS_Vault
|
|
3
|
+
description: Securely store and retrieve credentials. Activate when the user shares an API key, password, token, secret, or any sensitive credential. Also activate when you need to use a stored credential or when the user asks about their stored secrets. All secrets are encrypted with AES-256-GCM.
|
|
4
|
+
allowed-tools:
|
|
5
|
+
- mcp__ekkos-memory__ekkOS_StoreSecret
|
|
6
|
+
- mcp__ekkos-memory__ekkOS_GetSecret
|
|
7
|
+
- mcp__ekkos-memory__ekkOS_ListSecrets
|
|
8
|
+
- mcp__ekkos-memory__ekkOS_DeleteSecret
|
|
9
|
+
- mcp__ekkos-memory__ekkOS_RotateSecret
|
|
10
|
+
---
|
|
11
|
+
|
|
12
|
+
# ekkOS_Vault
|
|
13
|
+
|
|
14
|
+
You are augmented with **ekkOS_ memory** - and you can securely store and retrieve encrypted credentials.
|
|
15
|
+
|
|
16
|
+
## Why This Skill Exists
|
|
17
|
+
|
|
18
|
+
Users share credentials during development:
|
|
19
|
+
- API keys for services
|
|
20
|
+
- Database passwords
|
|
21
|
+
- OAuth tokens
|
|
22
|
+
- Environment secrets
|
|
23
|
+
|
|
24
|
+
This skill stores them securely (AES-256-GCM encrypted) and retrieves them when needed.
|
|
25
|
+
|
|
26
|
+
## CRITICAL Security Rules
|
|
27
|
+
|
|
28
|
+
1. **NEVER output secrets in plain text** unless user explicitly requests
|
|
29
|
+
2. **NEVER include secrets in patterns** or regular memory
|
|
30
|
+
3. **ALWAYS use masked display** when showing secrets exist
|
|
31
|
+
4. **ALWAYS confirm before storing** sensitive data
|
|
32
|
+
|
|
33
|
+
## When To Activate
|
|
34
|
+
|
|
35
|
+
This skill should trigger when:
|
|
36
|
+
|
|
37
|
+
| Trigger | Example |
|
|
38
|
+
|---------|---------|
|
|
39
|
+
| User shares API key | "Here's my OpenAI key: sk-..." |
|
|
40
|
+
| User shares password | "The database password is ..." |
|
|
41
|
+
| User shares token | "My GitHub token is ghp_..." |
|
|
42
|
+
| Need to use stored cred | Making API call that needs key |
|
|
43
|
+
| User asks about secrets | "What credentials do I have stored?" |
|
|
44
|
+
| Key rotation | "I need to update my API key" |
|
|
45
|
+
|
|
46
|
+
## Instructions
|
|
47
|
+
|
|
48
|
+
### Storing Secrets
|
|
49
|
+
|
|
50
|
+
When user shares a credential:
|
|
51
|
+
|
|
52
|
+
```
|
|
53
|
+
ekkOS_StoreSecret({
|
|
54
|
+
service: "openai", // Service name
|
|
55
|
+
value: "sk-abc123...", // The actual secret
|
|
56
|
+
type: "api_key", // auto-detected if omitted
|
|
57
|
+
description: "Production API key",
|
|
58
|
+
expiresInDays: 90 // Optional expiration
|
|
59
|
+
})
|
|
60
|
+
```
|
|
61
|
+
|
|
62
|
+
Then confirm (with masked value):
|
|
63
|
+
```
|
|
64
|
+
🔐 Secret stored securely:
|
|
65
|
+
Service: openai
|
|
66
|
+
Type: API Key
|
|
67
|
+
Preview: sk-a...123
|
|
68
|
+
Encrypted: AES-256-GCM
|
|
69
|
+
|
|
70
|
+
Use `ekkOS_GetSecret({service: "openai"})` to retrieve.
|
|
71
|
+
```
|
|
72
|
+
|
|
73
|
+
### Retrieving Secrets
|
|
74
|
+
|
|
75
|
+
When you need a stored credential:
|
|
76
|
+
|
|
77
|
+
```
|
|
78
|
+
ekkOS_GetSecret({
|
|
79
|
+
service: "openai",
|
|
80
|
+
masked: false // true for safe display
|
|
81
|
+
})
|
|
82
|
+
```
|
|
83
|
+
|
|
84
|
+
Response:
|
|
85
|
+
```json
|
|
86
|
+
{
|
|
87
|
+
"service": "openai",
|
|
88
|
+
"value": "sk-abc123...", // Only if masked: false
|
|
89
|
+
"type": "api_key",
|
|
90
|
+
"created_at": "2024-01-15T10:30:00Z",
|
|
91
|
+
"last_accessed": "2024-01-20T14:22:00Z"
|
|
92
|
+
}
|
|
93
|
+
```
|
|
94
|
+
|
|
95
|
+
**For display to user (masked):**
|
|
96
|
+
```
|
|
97
|
+
ekkOS_GetSecret({
|
|
98
|
+
service: "openai",
|
|
99
|
+
masked: true
|
|
100
|
+
})
|
|
101
|
+
|
|
102
|
+
Response: { value: "sk-a...123" }
|
|
103
|
+
```
|
|
104
|
+
|
|
105
|
+
### Listing Secrets
|
|
106
|
+
|
|
107
|
+
Show what's stored (no values):
|
|
108
|
+
|
|
109
|
+
```
|
|
110
|
+
ekkOS_ListSecrets({})
|
|
111
|
+
```
|
|
112
|
+
|
|
113
|
+
Response:
|
|
114
|
+
```
|
|
115
|
+
🔐 Stored Credentials:
|
|
116
|
+
|
|
117
|
+
1. openai (API Key)
|
|
118
|
+
Created: Jan 15, 2024
|
|
119
|
+
Last used: Jan 20, 2024
|
|
120
|
+
|
|
121
|
+
2. supabase (API Key)
|
|
122
|
+
Created: Jan 10, 2024
|
|
123
|
+
Last used: Jan 19, 2024
|
|
124
|
+
|
|
125
|
+
3. github (Token)
|
|
126
|
+
Created: Dec 1, 2023
|
|
127
|
+
Last used: Jan 18, 2024
|
|
128
|
+
|
|
129
|
+
Total: 3 secrets stored
|
|
130
|
+
```
|
|
131
|
+
|
|
132
|
+
### Rotating Secrets
|
|
133
|
+
|
|
134
|
+
When user has a new key:
|
|
135
|
+
|
|
136
|
+
```
|
|
137
|
+
ekkOS_RotateSecret({
|
|
138
|
+
service: "openai",
|
|
139
|
+
newValue: "sk-new-key-xyz..."
|
|
140
|
+
})
|
|
141
|
+
```
|
|
142
|
+
|
|
143
|
+
Response:
|
|
144
|
+
```
|
|
145
|
+
🔐 Secret rotated:
|
|
146
|
+
Service: openai
|
|
147
|
+
Old key revoked
|
|
148
|
+
New key stored: sk-n...xyz
|
|
149
|
+
|
|
150
|
+
Remember to revoke the old key in OpenAI dashboard.
|
|
151
|
+
```
|
|
152
|
+
|
|
153
|
+
### Deleting Secrets
|
|
154
|
+
|
|
155
|
+
```
|
|
156
|
+
ekkOS_DeleteSecret({
|
|
157
|
+
secretId: "secret-uuid"
|
|
158
|
+
})
|
|
159
|
+
```
|
|
160
|
+
|
|
161
|
+
Response:
|
|
162
|
+
```
|
|
163
|
+
🔐 Secret deleted permanently:
|
|
164
|
+
Service: openai
|
|
165
|
+
This cannot be recovered.
|
|
166
|
+
```
|
|
167
|
+
|
|
168
|
+
## Example Scenarios
|
|
169
|
+
|
|
170
|
+
### Scenario 1: User Shares API Key
|
|
171
|
+
```
|
|
172
|
+
User: "Here's my Stripe key: sk_live_abc123xyz"
|
|
173
|
+
|
|
174
|
+
You: "I'll store this securely.
|
|
175
|
+
|
|
176
|
+
ekkOS_StoreSecret({
|
|
177
|
+
service: 'stripe',
|
|
178
|
+
value: 'sk_live_abc123xyz',
|
|
179
|
+
type: 'api_key',
|
|
180
|
+
description: 'Live Stripe API key'
|
|
181
|
+
})
|
|
182
|
+
|
|
183
|
+
🔐 Stripe API key stored securely (AES-256-GCM encrypted).
|
|
184
|
+
Preview: sk_l...xyz
|
|
185
|
+
|
|
186
|
+
I can use this for Stripe API calls. You won't need to
|
|
187
|
+
share it again."
|
|
188
|
+
```
|
|
189
|
+
|
|
190
|
+
### Scenario 2: Using Stored Credential
|
|
191
|
+
```
|
|
192
|
+
User: "Make a Stripe API call to list customers"
|
|
193
|
+
|
|
194
|
+
You: *Need Stripe key*
|
|
195
|
+
|
|
196
|
+
ekkOS_GetSecret({ service: 'stripe' })
|
|
197
|
+
|
|
198
|
+
→ Retrieved: sk_live_abc123xyz
|
|
199
|
+
|
|
200
|
+
"Using your stored Stripe key..."
|
|
201
|
+
|
|
202
|
+
*Makes API call with the key*
|
|
203
|
+
|
|
204
|
+
"Here are your customers: ..."
|
|
205
|
+
|
|
206
|
+
*Key never shown to user*
|
|
207
|
+
```
|
|
208
|
+
|
|
209
|
+
### Scenario 3: What Credentials Exist
|
|
210
|
+
```
|
|
211
|
+
User: "What API keys do I have stored?"
|
|
212
|
+
|
|
213
|
+
You: ekkOS_ListSecrets({})
|
|
214
|
+
|
|
215
|
+
"🔐 Your stored credentials:
|
|
216
|
+
|
|
217
|
+
1. **stripe** (API Key)
|
|
218
|
+
Created: 2 weeks ago
|
|
219
|
+
Last accessed: Yesterday
|
|
220
|
+
|
|
221
|
+
2. **openai** (API Key)
|
|
222
|
+
Created: 1 month ago
|
|
223
|
+
Last accessed: 3 days ago
|
|
224
|
+
|
|
225
|
+
3. **github** (Personal Access Token)
|
|
226
|
+
Created: 2 months ago
|
|
227
|
+
Last accessed: Last week
|
|
228
|
+
|
|
229
|
+
Would you like to see masked previews of any of these?"
|
|
230
|
+
```
|
|
231
|
+
|
|
232
|
+
### Scenario 4: Credential Rotation
|
|
233
|
+
```
|
|
234
|
+
User: "I regenerated my OpenAI key, here's the new one: sk-new123"
|
|
235
|
+
|
|
236
|
+
You: ekkOS_RotateSecret({
|
|
237
|
+
service: 'openai',
|
|
238
|
+
newValue: 'sk-new123'
|
|
239
|
+
})
|
|
240
|
+
|
|
241
|
+
"🔐 OpenAI key rotated:
|
|
242
|
+
- Old key removed from vault
|
|
243
|
+
- New key stored: sk-n...123
|
|
244
|
+
|
|
245
|
+
⚠️ Remember to delete the old key in OpenAI's dashboard
|
|
246
|
+
to prevent unauthorized use."
|
|
247
|
+
```
|
|
248
|
+
|
|
249
|
+
## Auto-Detection
|
|
250
|
+
|
|
251
|
+
The skill can auto-detect secret types:
|
|
252
|
+
|
|
253
|
+
| Pattern | Detected Type |
|
|
254
|
+
|---------|---------------|
|
|
255
|
+
| `sk-...` | OpenAI API Key |
|
|
256
|
+
| `ghp_...` | GitHub Personal Token |
|
|
257
|
+
| `sk_live_...` | Stripe Live Key |
|
|
258
|
+
| `sk_test_...` | Stripe Test Key |
|
|
259
|
+
| `xoxb-...` | Slack Bot Token |
|
|
260
|
+
| `AKIA...` | AWS Access Key |
|
|
261
|
+
|
|
262
|
+
## Security Reminders
|
|
263
|
+
|
|
264
|
+
When storing:
|
|
265
|
+
```
|
|
266
|
+
⚠️ Security note: This key is encrypted and stored securely.
|
|
267
|
+
Only you can access it through ekkOS.
|
|
268
|
+
Never share this key in plain text or commit it to git.
|
|
269
|
+
```
|
|
270
|
+
|
|
271
|
+
When retrieving for API calls:
|
|
272
|
+
```
|
|
273
|
+
*Using stored credential - never displayed*
|
|
274
|
+
```
|
|
275
|
+
|
|
276
|
+
## Success Metrics
|
|
277
|
+
|
|
278
|
+
You're using this skill correctly when:
|
|
279
|
+
- Credentials are stored, not repeated in chat
|
|
280
|
+
- Users don't have to re-share keys
|
|
281
|
+
- Masked previews are used for display
|
|
282
|
+
- Rotations are handled smoothly
|
|
283
|
+
- No secrets appear in patterns or logs
|
|
284
|
+
|
|
285
|
+
---
|
|
286
|
+
|
|
287
|
+
**Mantra**: User shares a key? Store it. Need a key? Retrieve it. Never expose it.
|