@piagent/platform 1.1.9 → 1.2.1
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/CHANGELOG.md +175 -1
- package/README.md +2 -2
- package/docs/command-reference-vietnamese.md +19 -5
- package/docs/distribution-standard.md +7 -7
- package/docs/mcp-and-tools.md +154 -2
- package/docs/model-options.md +10 -8
- package/docs/operator-manual-vietnamese.md +25 -13
- package/docs/publishing-for-teams.md +2 -0
- package/docs/quickstart-vietnamese.md +2 -2
- package/docs/release-install-policy.md +6 -6
- package/docs/security-threat-model.md +4 -3
- package/docs/team-onboarding.md +4 -4
- package/docs/usage-observability.md +29 -0
- package/docs/vercel-docs-site.md +34 -4
- package/docs-site/architecture.html +152 -0
- package/docs-site/assets/docs.css +1001 -0
- package/docs-site/assets/docs.js +84 -0
- package/docs-site/commands.html +203 -0
- package/docs-site/content/architecture.html +29 -0
- package/docs-site/content/commands.html +80 -0
- package/docs-site/content/index.html +80 -0
- package/docs-site/content/mcp-approval.html +133 -0
- package/docs-site/content/mcp-auth.html +76 -0
- package/docs-site/content/mcp-servers.html +111 -0
- package/docs-site/content/mcp.html +120 -0
- package/docs-site/content/permissions.html +54 -0
- package/docs-site/content/profiles.html +68 -0
- package/docs-site/content/quickstart.html +144 -0
- package/docs-site/content/runtime.html +45 -0
- package/docs-site/content/scope.html +71 -0
- package/docs-site/content/security.html +51 -0
- package/docs-site/content/team.html +23 -0
- package/docs-site/content/workflows.html +47 -0
- package/docs-site/index.html +131 -1534
- package/docs-site/mcp-approval.html +256 -0
- package/docs-site/mcp-auth.html +199 -0
- package/docs-site/mcp-servers.html +234 -0
- package/docs-site/mcp.html +243 -0
- package/docs-site/permissions.html +177 -0
- package/docs-site/profiles.html +191 -0
- package/docs-site/quickstart.html +267 -0
- package/docs-site/runtime.html +168 -0
- package/docs-site/scope.html +194 -0
- package/docs-site/security.html +174 -0
- package/docs-site/team.html +142 -0
- package/docs-site/workflows.html +170 -0
- package/package.json +4 -2
- package/packages/piagent-core/capabilities/capability-core.js +58 -5
- package/packages/piagent-core/capabilities/capability-sources.js +73 -12
- package/packages/piagent-core/extensions/document-intake.ts +5 -5
- package/packages/piagent-core/extensions/piagent-guard.ts +432 -2
- package/packages/piagent-core/extensions/policy-core.js +1586 -98
- package/packages/piagent-core/mcp/mcp-approval-store.js +216 -0
- package/packages/piagent-core/mcp/mcp-auth-readiness.js +225 -0
- package/packages/piagent-core/mcp/mcp-command-actions.js +400 -0
- package/packages/piagent-core/mcp/mcp-config-layers.js +466 -0
- package/packages/piagent-core/mcp/mcp-import-kinds.js +240 -0
- package/packages/piagent-core/mcp/mcp-server-catalog.js +150 -0
- package/packages/piagent-core/mcp/mcp-server-entry.js +293 -0
- package/packages/piagent-core/mcp/mcp-session-view.js +236 -0
- package/packages/piagent-core/mcp/mcp-tool-naming.js +90 -0
- package/packages/piagent-core/package.json +7 -3
- package/packages/piagent-core/prompts/model-options.md +8 -8
- package/scripts/build-docs-site.mjs +421 -0
- package/scripts/configure-model-scope.sh +21 -5
- package/scripts/configure-subagents.sh +18 -5
- package/scripts/init-project.sh +15 -8
- package/scripts/install-global.sh +5 -5
- package/scripts/mcp-manage.mjs +656 -0
- package/scripts/pi-model-catalog.sh +11 -1
- package/scripts/pi-session-stats.sh +27 -1
- package/scripts/pi-usage-history.mjs +567 -0
- package/scripts/piagent-cli.mjs +1 -1
- package/scripts/preview-docs-site.mjs +88 -0
- package/scripts/quality-benchmark.sh +37 -9
- package/scripts/setup.sh +23 -15
- package/scripts/team-doctor.sh +18 -2
- package/scripts/uninstall-global.sh +10 -4
- package/scripts/verify-local.sh +65 -19
- package/scripts/verify-release-identity.mjs +37 -2
- package/scripts/configure-mcp.sh +0 -349
package/docs-site/index.html
CHANGED
|
@@ -4,15 +4,12 @@
|
|
|
4
4
|
<meta charset="utf-8" />
|
|
5
5
|
<meta name="viewport" content="width=device-width, initial-scale=1" />
|
|
6
6
|
<title>Pi Agent Platform Docs</title>
|
|
7
|
-
<meta
|
|
8
|
-
name="description"
|
|
9
|
-
content="Tài liệu vận hành Pi Agent Platform: cài đặt, profile, permission, workflow, bảo mật và triển khai tài liệu tĩnh."
|
|
10
|
-
/>
|
|
7
|
+
<meta name="description" content="Nền tảng dùng lại cho nhiều dự án: cài đặt, profile, quyền chạy, MCP, bảo mật và workflow trong một tài liệu." />
|
|
11
8
|
<meta name="theme-color" content="#050505" />
|
|
12
9
|
<link rel="canonical" href="https://piagent.io.vn/" />
|
|
13
10
|
<link rel="icon" href="/favicon.svg" type="image/svg+xml" />
|
|
14
11
|
<meta property="og:title" content="Pi Agent Platform Docs" />
|
|
15
|
-
<meta property="og:description" content="
|
|
12
|
+
<meta property="og:description" content="Nền tảng dùng lại cho nhiều dự án: cài đặt, profile, quyền chạy, MCP, bảo mật và workflow trong một tài liệu." />
|
|
16
13
|
<meta property="og:url" content="https://piagent.io.vn/" />
|
|
17
14
|
<link rel="preconnect" href="https://fonts.googleapis.com" />
|
|
18
15
|
<link rel="preconnect" href="https://fonts.gstatic.com" crossorigin />
|
|
@@ -20,1572 +17,172 @@
|
|
|
20
17
|
href="https://fonts.googleapis.com/css2?family=Be+Vietnam+Pro:wght@400;500;600;700;800&family=JetBrains+Mono:wght@400;500;600&display=swap"
|
|
21
18
|
rel="stylesheet"
|
|
22
19
|
/>
|
|
23
|
-
<
|
|
24
|
-
|
|
25
|
-
color-scheme: dark;
|
|
26
|
-
--bg: #050505;
|
|
27
|
-
--bg-soft: #0b0b0d;
|
|
28
|
-
--panel: #101114;
|
|
29
|
-
--panel-strong: #15171b;
|
|
30
|
-
--text: #f4f4ef;
|
|
31
|
-
--muted: #a4a6ad;
|
|
32
|
-
--muted-2: #71747d;
|
|
33
|
-
--line: #24262d;
|
|
34
|
-
--line-soft: #191b20;
|
|
35
|
-
--accent: #d8ff7a;
|
|
36
|
-
--accent-2: #8be9c8;
|
|
37
|
-
--danger: #ff8f8f;
|
|
38
|
-
--warning: #ffd166;
|
|
39
|
-
--ok: #8be9c8;
|
|
40
|
-
--shadow: 0 24px 90px rgba(0, 0, 0, 0.45);
|
|
41
|
-
--radius: 22px;
|
|
42
|
-
--sidebar: 294px;
|
|
43
|
-
--content: 1260px;
|
|
44
|
-
}
|
|
45
|
-
|
|
46
|
-
* {
|
|
47
|
-
box-sizing: border-box;
|
|
48
|
-
}
|
|
49
|
-
|
|
50
|
-
html {
|
|
51
|
-
scroll-behavior: smooth;
|
|
52
|
-
}
|
|
53
|
-
|
|
54
|
-
body {
|
|
55
|
-
margin: 0;
|
|
56
|
-
min-height: 100vh;
|
|
57
|
-
background:
|
|
58
|
-
radial-gradient(circle at 18% -10%, rgba(216, 255, 122, 0.12), transparent 34rem),
|
|
59
|
-
radial-gradient(circle at 88% 8%, rgba(139, 233, 200, 0.1), transparent 30rem),
|
|
60
|
-
linear-gradient(180deg, #050505 0%, #07080a 55%, #050505 100%);
|
|
61
|
-
color: var(--text);
|
|
62
|
-
font-family: "Be Vietnam Pro", ui-sans-serif, system-ui, -apple-system, BlinkMacSystemFont, "Segoe UI", sans-serif;
|
|
63
|
-
line-height: 1.65;
|
|
64
|
-
}
|
|
65
|
-
|
|
66
|
-
a {
|
|
67
|
-
color: inherit;
|
|
68
|
-
text-decoration: none;
|
|
69
|
-
}
|
|
70
|
-
|
|
71
|
-
a:hover {
|
|
72
|
-
color: var(--accent);
|
|
73
|
-
}
|
|
74
|
-
|
|
75
|
-
code,
|
|
76
|
-
pre {
|
|
77
|
-
font-family: "JetBrains Mono", ui-monospace, SFMono-Regular, Menlo, Consolas, monospace;
|
|
78
|
-
}
|
|
79
|
-
|
|
80
|
-
.topbar {
|
|
81
|
-
position: sticky;
|
|
82
|
-
top: 0;
|
|
83
|
-
z-index: 30;
|
|
84
|
-
display: flex;
|
|
85
|
-
align-items: center;
|
|
86
|
-
justify-content: space-between;
|
|
87
|
-
height: 62px;
|
|
88
|
-
padding: 0 28px;
|
|
89
|
-
border-bottom: 1px solid rgba(255, 255, 255, 0.08);
|
|
90
|
-
background: rgba(5, 5, 5, 0.78);
|
|
91
|
-
backdrop-filter: blur(20px);
|
|
92
|
-
}
|
|
93
|
-
|
|
94
|
-
.brand {
|
|
95
|
-
display: inline-flex;
|
|
96
|
-
align-items: center;
|
|
97
|
-
gap: 12px;
|
|
98
|
-
min-width: 0;
|
|
99
|
-
font-weight: 700;
|
|
100
|
-
letter-spacing: -0.03em;
|
|
101
|
-
}
|
|
102
|
-
|
|
103
|
-
.brand-mark {
|
|
104
|
-
display: grid;
|
|
105
|
-
place-items: center;
|
|
106
|
-
width: 34px;
|
|
107
|
-
height: 34px;
|
|
108
|
-
border: 1px solid rgba(216, 255, 122, 0.32);
|
|
109
|
-
border-radius: 11px;
|
|
110
|
-
background:
|
|
111
|
-
linear-gradient(135deg, rgba(216, 255, 122, 0.12), transparent),
|
|
112
|
-
#0d0f12;
|
|
113
|
-
color: var(--accent);
|
|
114
|
-
font-family: "JetBrains Mono", monospace;
|
|
115
|
-
font-size: 13px;
|
|
116
|
-
overflow: hidden;
|
|
117
|
-
box-shadow: inset 0 0 0 1px rgba(255, 255, 255, 0.04);
|
|
118
|
-
}
|
|
119
|
-
|
|
120
|
-
.brand-mark img {
|
|
121
|
-
display: block;
|
|
122
|
-
width: 100%;
|
|
123
|
-
height: 100%;
|
|
124
|
-
}
|
|
125
|
-
|
|
126
|
-
.brand span:last-child {
|
|
127
|
-
overflow: hidden;
|
|
128
|
-
text-overflow: ellipsis;
|
|
129
|
-
white-space: nowrap;
|
|
130
|
-
}
|
|
131
|
-
|
|
132
|
-
.top-actions {
|
|
133
|
-
display: flex;
|
|
134
|
-
align-items: center;
|
|
135
|
-
gap: 10px;
|
|
136
|
-
}
|
|
137
|
-
|
|
138
|
-
.pill {
|
|
139
|
-
display: inline-flex;
|
|
140
|
-
align-items: center;
|
|
141
|
-
gap: 8px;
|
|
142
|
-
min-height: 34px;
|
|
143
|
-
padding: 6px 12px;
|
|
144
|
-
border: 1px solid rgba(255, 255, 255, 0.1);
|
|
145
|
-
border-radius: 999px;
|
|
146
|
-
background: rgba(255, 255, 255, 0.035);
|
|
147
|
-
color: var(--muted);
|
|
148
|
-
font-size: 12px;
|
|
149
|
-
font-weight: 600;
|
|
150
|
-
}
|
|
151
|
-
|
|
152
|
-
.pill-dot {
|
|
153
|
-
width: 7px;
|
|
154
|
-
height: 7px;
|
|
155
|
-
border-radius: 999px;
|
|
156
|
-
background: var(--ok);
|
|
157
|
-
box-shadow: 0 0 18px rgba(139, 233, 200, 0.6);
|
|
158
|
-
}
|
|
159
|
-
|
|
160
|
-
.layout {
|
|
161
|
-
display: grid;
|
|
162
|
-
grid-template-columns: var(--sidebar) minmax(0, 1fr);
|
|
163
|
-
gap: 0;
|
|
164
|
-
width: 100%;
|
|
165
|
-
}
|
|
166
|
-
|
|
167
|
-
.sidebar {
|
|
168
|
-
position: sticky;
|
|
169
|
-
top: 62px;
|
|
170
|
-
align-self: start;
|
|
171
|
-
height: calc(100vh - 62px);
|
|
172
|
-
padding: 28px 22px 28px 28px;
|
|
173
|
-
overflow-y: auto;
|
|
174
|
-
border-right: 1px solid rgba(255, 255, 255, 0.08);
|
|
175
|
-
background: linear-gradient(180deg, rgba(255, 255, 255, 0.025), rgba(255, 255, 255, 0));
|
|
176
|
-
}
|
|
177
|
-
|
|
178
|
-
.sidebar-search {
|
|
179
|
-
position: relative;
|
|
180
|
-
margin-bottom: 26px;
|
|
181
|
-
}
|
|
182
|
-
|
|
183
|
-
.sidebar-search input {
|
|
184
|
-
width: 100%;
|
|
185
|
-
height: 42px;
|
|
186
|
-
padding: 0 14px 0 38px;
|
|
187
|
-
border: 1px solid var(--line);
|
|
188
|
-
border-radius: 14px;
|
|
189
|
-
outline: none;
|
|
190
|
-
background: rgba(255, 255, 255, 0.04);
|
|
191
|
-
color: var(--text);
|
|
192
|
-
font: inherit;
|
|
193
|
-
font-size: 13px;
|
|
194
|
-
}
|
|
195
|
-
|
|
196
|
-
.sidebar-search input:focus {
|
|
197
|
-
border-color: rgba(216, 255, 122, 0.5);
|
|
198
|
-
box-shadow: 0 0 0 4px rgba(216, 255, 122, 0.08);
|
|
199
|
-
}
|
|
200
|
-
|
|
201
|
-
.sidebar-search svg {
|
|
202
|
-
position: absolute;
|
|
203
|
-
left: 13px;
|
|
204
|
-
top: 50%;
|
|
205
|
-
width: 15px;
|
|
206
|
-
height: 15px;
|
|
207
|
-
color: var(--muted-2);
|
|
208
|
-
transform: translateY(-50%);
|
|
209
|
-
}
|
|
210
|
-
|
|
211
|
-
.nav-group {
|
|
212
|
-
margin: 0 0 22px;
|
|
213
|
-
}
|
|
214
|
-
|
|
215
|
-
.nav-title {
|
|
216
|
-
margin: 0 0 9px;
|
|
217
|
-
color: var(--muted-2);
|
|
218
|
-
font-size: 11px;
|
|
219
|
-
font-weight: 700;
|
|
220
|
-
letter-spacing: 0.11em;
|
|
221
|
-
text-transform: uppercase;
|
|
222
|
-
}
|
|
223
|
-
|
|
224
|
-
.nav-link {
|
|
225
|
-
display: flex;
|
|
226
|
-
align-items: center;
|
|
227
|
-
min-height: 34px;
|
|
228
|
-
padding: 7px 10px;
|
|
229
|
-
border-radius: 11px;
|
|
230
|
-
color: var(--muted);
|
|
231
|
-
font-size: 13px;
|
|
232
|
-
font-weight: 500;
|
|
233
|
-
transition: background 160ms ease, color 160ms ease, transform 160ms ease;
|
|
234
|
-
}
|
|
235
|
-
|
|
236
|
-
.nav-link:hover,
|
|
237
|
-
.nav-link.active {
|
|
238
|
-
background: rgba(255, 255, 255, 0.06);
|
|
239
|
-
color: var(--text);
|
|
240
|
-
}
|
|
241
|
-
|
|
242
|
-
.nav-link.active {
|
|
243
|
-
box-shadow: inset 2px 0 0 var(--accent);
|
|
244
|
-
}
|
|
245
|
-
|
|
246
|
-
main {
|
|
247
|
-
min-width: 0;
|
|
248
|
-
display: flex;
|
|
249
|
-
justify-content: center;
|
|
250
|
-
}
|
|
251
|
-
|
|
252
|
-
.content-shell {
|
|
253
|
-
width: min(100%, var(--content));
|
|
254
|
-
padding: 58px 56px 96px;
|
|
255
|
-
}
|
|
256
|
-
|
|
257
|
-
.hero {
|
|
258
|
-
position: relative;
|
|
259
|
-
overflow: hidden;
|
|
260
|
-
padding: 42px;
|
|
261
|
-
border: 1px solid rgba(255, 255, 255, 0.1);
|
|
262
|
-
border-radius: 30px;
|
|
263
|
-
background:
|
|
264
|
-
linear-gradient(135deg, rgba(216, 255, 122, 0.13), transparent 38%),
|
|
265
|
-
linear-gradient(180deg, rgba(255, 255, 255, 0.055), rgba(255, 255, 255, 0.018)),
|
|
266
|
-
var(--panel);
|
|
267
|
-
box-shadow: var(--shadow);
|
|
268
|
-
}
|
|
269
|
-
|
|
270
|
-
.hero::after {
|
|
271
|
-
content: "";
|
|
272
|
-
position: absolute;
|
|
273
|
-
inset: auto -18% -58% 32%;
|
|
274
|
-
height: 280px;
|
|
275
|
-
border-radius: 50%;
|
|
276
|
-
background: radial-gradient(circle, rgba(139, 233, 200, 0.16), transparent 64%);
|
|
277
|
-
pointer-events: none;
|
|
278
|
-
}
|
|
279
|
-
|
|
280
|
-
.eyebrow {
|
|
281
|
-
display: inline-flex;
|
|
282
|
-
align-items: center;
|
|
283
|
-
gap: 9px;
|
|
284
|
-
margin: 0 0 18px;
|
|
285
|
-
color: var(--accent);
|
|
286
|
-
font-size: 12px;
|
|
287
|
-
font-weight: 700;
|
|
288
|
-
letter-spacing: 0.12em;
|
|
289
|
-
text-transform: uppercase;
|
|
290
|
-
}
|
|
291
|
-
|
|
292
|
-
.eyebrow::before {
|
|
293
|
-
content: "";
|
|
294
|
-
width: 8px;
|
|
295
|
-
height: 8px;
|
|
296
|
-
border-radius: 999px;
|
|
297
|
-
background: var(--accent);
|
|
298
|
-
box-shadow: 0 0 24px rgba(216, 255, 122, 0.8);
|
|
299
|
-
}
|
|
300
|
-
|
|
301
|
-
h1,
|
|
302
|
-
h2,
|
|
303
|
-
h3 {
|
|
304
|
-
margin: 0;
|
|
305
|
-
line-height: 1.12;
|
|
306
|
-
letter-spacing: -0.055em;
|
|
307
|
-
}
|
|
308
|
-
|
|
309
|
-
h1 {
|
|
310
|
-
max-width: 860px;
|
|
311
|
-
font-size: clamp(42px, 8vw, 82px);
|
|
312
|
-
font-weight: 800;
|
|
313
|
-
}
|
|
314
|
-
|
|
315
|
-
h2 {
|
|
316
|
-
font-size: clamp(30px, 4vw, 48px);
|
|
317
|
-
font-weight: 800;
|
|
318
|
-
}
|
|
319
|
-
|
|
320
|
-
h3 {
|
|
321
|
-
font-size: 20px;
|
|
322
|
-
font-weight: 700;
|
|
323
|
-
letter-spacing: -0.035em;
|
|
324
|
-
}
|
|
325
|
-
|
|
326
|
-
p {
|
|
327
|
-
margin: 0;
|
|
328
|
-
color: var(--muted);
|
|
329
|
-
}
|
|
330
|
-
|
|
331
|
-
.hero p {
|
|
332
|
-
position: relative;
|
|
333
|
-
z-index: 1;
|
|
334
|
-
max-width: 760px;
|
|
335
|
-
margin-top: 20px;
|
|
336
|
-
color: #d6d7dc;
|
|
337
|
-
font-size: 17px;
|
|
338
|
-
}
|
|
339
|
-
|
|
340
|
-
.hero-actions {
|
|
341
|
-
position: relative;
|
|
342
|
-
z-index: 1;
|
|
343
|
-
display: flex;
|
|
344
|
-
flex-wrap: wrap;
|
|
345
|
-
gap: 12px;
|
|
346
|
-
margin-top: 28px;
|
|
347
|
-
}
|
|
348
|
-
|
|
349
|
-
.button {
|
|
350
|
-
display: inline-flex;
|
|
351
|
-
align-items: center;
|
|
352
|
-
justify-content: center;
|
|
353
|
-
gap: 9px;
|
|
354
|
-
min-height: 42px;
|
|
355
|
-
padding: 10px 16px;
|
|
356
|
-
border: 1px solid rgba(255, 255, 255, 0.12);
|
|
357
|
-
border-radius: 999px;
|
|
358
|
-
background: rgba(255, 255, 255, 0.055);
|
|
359
|
-
color: var(--text);
|
|
360
|
-
font-size: 13px;
|
|
361
|
-
font-weight: 700;
|
|
362
|
-
cursor: pointer;
|
|
363
|
-
transition: background 160ms ease, border-color 160ms ease, color 160ms ease;
|
|
364
|
-
}
|
|
365
|
-
|
|
366
|
-
.button:hover,
|
|
367
|
-
.button:focus-visible {
|
|
368
|
-
border-color: rgba(216, 255, 122, 0.45);
|
|
369
|
-
background: rgba(216, 255, 122, 0.1);
|
|
370
|
-
color: var(--accent);
|
|
371
|
-
}
|
|
372
|
-
|
|
373
|
-
.button.primary {
|
|
374
|
-
border-color: transparent;
|
|
375
|
-
background: var(--accent);
|
|
376
|
-
color: #111300;
|
|
377
|
-
}
|
|
378
|
-
|
|
379
|
-
.button.primary:hover,
|
|
380
|
-
.button.primary:focus-visible {
|
|
381
|
-
background: #e5ff98;
|
|
382
|
-
color: #111300;
|
|
383
|
-
}
|
|
384
|
-
|
|
385
|
-
.button.social {
|
|
386
|
-
min-height: 34px;
|
|
387
|
-
padding: 7px 12px;
|
|
388
|
-
color: #d6d7dc;
|
|
389
|
-
}
|
|
390
|
-
|
|
391
|
-
.button.social svg {
|
|
392
|
-
width: 14px;
|
|
393
|
-
height: 14px;
|
|
394
|
-
}
|
|
395
|
-
|
|
396
|
-
.owner-strip {
|
|
397
|
-
position: relative;
|
|
398
|
-
z-index: 1;
|
|
399
|
-
display: flex;
|
|
400
|
-
flex-wrap: wrap;
|
|
401
|
-
align-items: center;
|
|
402
|
-
gap: 10px;
|
|
403
|
-
margin-top: 18px;
|
|
404
|
-
}
|
|
405
|
-
|
|
406
|
-
.owner-label {
|
|
407
|
-
color: var(--muted-2);
|
|
408
|
-
font-size: 12px;
|
|
409
|
-
font-weight: 800;
|
|
410
|
-
letter-spacing: 0.12em;
|
|
411
|
-
text-transform: uppercase;
|
|
412
|
-
}
|
|
413
|
-
|
|
414
|
-
.owner-strip a {
|
|
415
|
-
display: inline-flex;
|
|
416
|
-
align-items: center;
|
|
417
|
-
gap: 7px;
|
|
418
|
-
padding: 7px 11px;
|
|
419
|
-
border: 1px solid rgba(255, 255, 255, 0.1);
|
|
420
|
-
border-radius: 999px;
|
|
421
|
-
background: rgba(255, 255, 255, 0.04);
|
|
422
|
-
color: #d6d7dc;
|
|
423
|
-
font-size: 12px;
|
|
424
|
-
font-weight: 700;
|
|
425
|
-
}
|
|
426
|
-
|
|
427
|
-
.owner-strip a:hover,
|
|
428
|
-
.owner-strip a:focus-visible {
|
|
429
|
-
border-color: rgba(216, 255, 122, 0.42);
|
|
430
|
-
color: var(--accent);
|
|
431
|
-
}
|
|
432
|
-
|
|
433
|
-
.section {
|
|
434
|
-
padding-top: 86px;
|
|
435
|
-
scroll-margin-top: 86px;
|
|
436
|
-
}
|
|
437
|
-
|
|
438
|
-
.section-kicker {
|
|
439
|
-
margin-bottom: 12px;
|
|
440
|
-
color: var(--accent-2);
|
|
441
|
-
font-size: 12px;
|
|
442
|
-
font-weight: 800;
|
|
443
|
-
letter-spacing: 0.12em;
|
|
444
|
-
text-transform: uppercase;
|
|
445
|
-
}
|
|
446
|
-
|
|
447
|
-
.section-lead {
|
|
448
|
-
max-width: 820px;
|
|
449
|
-
margin-top: 18px;
|
|
450
|
-
font-size: 16px;
|
|
451
|
-
}
|
|
452
|
-
|
|
453
|
-
.grid {
|
|
454
|
-
display: grid;
|
|
455
|
-
gap: 16px;
|
|
456
|
-
margin-top: 28px;
|
|
457
|
-
}
|
|
458
|
-
|
|
459
|
-
.grid.cols-2 {
|
|
460
|
-
grid-template-columns: repeat(2, minmax(0, 1fr));
|
|
461
|
-
}
|
|
462
|
-
|
|
463
|
-
.grid.cols-3 {
|
|
464
|
-
grid-template-columns: repeat(3, minmax(0, 1fr));
|
|
465
|
-
}
|
|
466
|
-
|
|
467
|
-
.card {
|
|
468
|
-
padding: 22px;
|
|
469
|
-
border: 1px solid rgba(255, 255, 255, 0.1);
|
|
470
|
-
border-radius: var(--radius);
|
|
471
|
-
background: linear-gradient(180deg, rgba(255, 255, 255, 0.045), rgba(255, 255, 255, 0.018));
|
|
472
|
-
}
|
|
473
|
-
|
|
474
|
-
.card strong {
|
|
475
|
-
color: var(--text);
|
|
476
|
-
}
|
|
477
|
-
|
|
478
|
-
.card p {
|
|
479
|
-
margin-top: 10px;
|
|
480
|
-
font-size: 14px;
|
|
481
|
-
}
|
|
482
|
-
|
|
483
|
-
.steps {
|
|
484
|
-
display: grid;
|
|
485
|
-
gap: 14px;
|
|
486
|
-
margin-top: 28px;
|
|
487
|
-
counter-reset: steps;
|
|
488
|
-
}
|
|
489
|
-
|
|
490
|
-
.step {
|
|
491
|
-
counter-increment: steps;
|
|
492
|
-
display: grid;
|
|
493
|
-
grid-template-columns: 44px minmax(0, 1fr);
|
|
494
|
-
gap: 16px;
|
|
495
|
-
padding: 20px;
|
|
496
|
-
border: 1px solid rgba(255, 255, 255, 0.1);
|
|
497
|
-
border-radius: var(--radius);
|
|
498
|
-
background: rgba(255, 255, 255, 0.028);
|
|
499
|
-
}
|
|
500
|
-
|
|
501
|
-
.step::before {
|
|
502
|
-
content: counter(steps, decimal-leading-zero);
|
|
503
|
-
display: grid;
|
|
504
|
-
place-items: center;
|
|
505
|
-
width: 42px;
|
|
506
|
-
height: 42px;
|
|
507
|
-
border-radius: 14px;
|
|
508
|
-
background: rgba(216, 255, 122, 0.12);
|
|
509
|
-
color: var(--accent);
|
|
510
|
-
font-family: "JetBrains Mono", monospace;
|
|
511
|
-
font-size: 13px;
|
|
512
|
-
font-weight: 800;
|
|
513
|
-
}
|
|
514
|
-
|
|
515
|
-
.step p {
|
|
516
|
-
margin-top: 8px;
|
|
517
|
-
font-size: 14px;
|
|
518
|
-
}
|
|
519
|
-
|
|
520
|
-
.command-grid {
|
|
521
|
-
display: grid;
|
|
522
|
-
grid-template-columns: repeat(2, minmax(0, 1fr));
|
|
523
|
-
gap: 14px;
|
|
524
|
-
margin-top: 28px;
|
|
525
|
-
}
|
|
526
|
-
|
|
527
|
-
.command-card {
|
|
528
|
-
overflow: hidden;
|
|
529
|
-
border: 1px solid rgba(255, 255, 255, 0.1);
|
|
530
|
-
border-radius: var(--radius);
|
|
531
|
-
background: #08090b;
|
|
532
|
-
}
|
|
533
|
-
|
|
534
|
-
.command-card header {
|
|
535
|
-
display: flex;
|
|
536
|
-
align-items: center;
|
|
537
|
-
justify-content: space-between;
|
|
538
|
-
gap: 16px;
|
|
539
|
-
padding: 14px 16px;
|
|
540
|
-
border-bottom: 1px solid var(--line-soft);
|
|
541
|
-
background: rgba(255, 255, 255, 0.025);
|
|
542
|
-
}
|
|
543
|
-
|
|
544
|
-
.command-card header span {
|
|
545
|
-
color: var(--text);
|
|
546
|
-
font-size: 13px;
|
|
547
|
-
font-weight: 700;
|
|
548
|
-
}
|
|
549
|
-
|
|
550
|
-
.clip-btn {
|
|
551
|
-
min-width: 74px;
|
|
552
|
-
border: 1px solid rgba(255, 255, 255, 0.1);
|
|
553
|
-
border-radius: 999px;
|
|
554
|
-
background: rgba(255, 255, 255, 0.05);
|
|
555
|
-
color: var(--muted);
|
|
556
|
-
font: inherit;
|
|
557
|
-
font-size: 12px;
|
|
558
|
-
font-weight: 700;
|
|
559
|
-
cursor: pointer;
|
|
560
|
-
padding: 6px 10px;
|
|
561
|
-
}
|
|
562
|
-
|
|
563
|
-
.clip-btn:hover,
|
|
564
|
-
.clip-btn:focus-visible {
|
|
565
|
-
color: var(--accent);
|
|
566
|
-
border-color: rgba(216, 255, 122, 0.45);
|
|
567
|
-
}
|
|
568
|
-
|
|
569
|
-
pre {
|
|
570
|
-
margin: 0;
|
|
571
|
-
padding: 16px;
|
|
572
|
-
overflow-x: auto;
|
|
573
|
-
color: #e9e9e3;
|
|
574
|
-
font-size: 13px;
|
|
575
|
-
line-height: 1.65;
|
|
576
|
-
}
|
|
577
|
-
|
|
578
|
-
code {
|
|
579
|
-
color: #f5f5f0;
|
|
580
|
-
}
|
|
581
|
-
|
|
582
|
-
.inline-code {
|
|
583
|
-
padding: 2px 6px;
|
|
584
|
-
border: 1px solid rgba(255, 255, 255, 0.1);
|
|
585
|
-
border-radius: 7px;
|
|
586
|
-
background: rgba(255, 255, 255, 0.05);
|
|
587
|
-
color: var(--accent-2);
|
|
588
|
-
font-family: "JetBrains Mono", monospace;
|
|
589
|
-
font-size: 0.91em;
|
|
590
|
-
}
|
|
591
|
-
|
|
592
|
-
.table-wrap {
|
|
593
|
-
margin-top: 28px;
|
|
594
|
-
overflow: hidden;
|
|
595
|
-
border: 1px solid rgba(255, 255, 255, 0.1);
|
|
596
|
-
border-radius: var(--radius);
|
|
597
|
-
}
|
|
598
|
-
|
|
599
|
-
table {
|
|
600
|
-
width: 100%;
|
|
601
|
-
border-collapse: collapse;
|
|
602
|
-
background: rgba(255, 255, 255, 0.02);
|
|
603
|
-
}
|
|
604
|
-
|
|
605
|
-
th,
|
|
606
|
-
td {
|
|
607
|
-
padding: 16px;
|
|
608
|
-
border-bottom: 1px solid var(--line-soft);
|
|
609
|
-
text-align: left;
|
|
610
|
-
vertical-align: top;
|
|
611
|
-
font-size: 14px;
|
|
612
|
-
}
|
|
613
|
-
|
|
614
|
-
th {
|
|
615
|
-
color: var(--text);
|
|
616
|
-
font-size: 12px;
|
|
617
|
-
letter-spacing: 0.09em;
|
|
618
|
-
text-transform: uppercase;
|
|
619
|
-
}
|
|
620
|
-
|
|
621
|
-
td {
|
|
622
|
-
color: var(--muted);
|
|
623
|
-
}
|
|
624
|
-
|
|
625
|
-
tr:last-child td {
|
|
626
|
-
border-bottom: 0;
|
|
627
|
-
}
|
|
628
|
-
|
|
629
|
-
.tag-list {
|
|
630
|
-
display: flex;
|
|
631
|
-
flex-wrap: wrap;
|
|
632
|
-
gap: 8px;
|
|
633
|
-
margin-top: 16px;
|
|
634
|
-
}
|
|
635
|
-
|
|
636
|
-
.tag {
|
|
637
|
-
padding: 6px 10px;
|
|
638
|
-
border: 1px solid rgba(255, 255, 255, 0.1);
|
|
639
|
-
border-radius: 999px;
|
|
640
|
-
color: var(--muted);
|
|
641
|
-
font-family: "JetBrains Mono", monospace;
|
|
642
|
-
font-size: 12px;
|
|
643
|
-
}
|
|
644
|
-
|
|
645
|
-
.callout {
|
|
646
|
-
margin-top: 28px;
|
|
647
|
-
padding: 20px;
|
|
648
|
-
border: 1px solid rgba(255, 209, 102, 0.26);
|
|
649
|
-
border-radius: var(--radius);
|
|
650
|
-
background: rgba(255, 209, 102, 0.07);
|
|
651
|
-
}
|
|
652
|
-
|
|
653
|
-
.callout strong {
|
|
654
|
-
color: var(--warning);
|
|
655
|
-
}
|
|
656
|
-
|
|
657
|
-
.callout p {
|
|
658
|
-
margin-top: 8px;
|
|
659
|
-
}
|
|
660
|
-
|
|
661
|
-
.callout ul {
|
|
662
|
-
margin: 12px 0 0;
|
|
663
|
-
padding-left: 20px;
|
|
664
|
-
color: var(--muted);
|
|
665
|
-
}
|
|
666
|
-
|
|
667
|
-
.ok-callout {
|
|
668
|
-
border-color: rgba(139, 233, 200, 0.22);
|
|
669
|
-
background: rgba(139, 233, 200, 0.065);
|
|
670
|
-
}
|
|
671
|
-
|
|
672
|
-
.ok-callout strong {
|
|
673
|
-
color: var(--ok);
|
|
674
|
-
}
|
|
675
|
-
|
|
676
|
-
.split {
|
|
677
|
-
display: grid;
|
|
678
|
-
grid-template-columns: 1fr 1fr;
|
|
679
|
-
gap: 16px;
|
|
680
|
-
margin-top: 28px;
|
|
681
|
-
}
|
|
682
|
-
|
|
683
|
-
.footer {
|
|
684
|
-
margin-top: 90px;
|
|
685
|
-
padding-top: 28px;
|
|
686
|
-
border-top: 1px solid rgba(255, 255, 255, 0.1);
|
|
687
|
-
color: var(--muted-2);
|
|
688
|
-
font-size: 13px;
|
|
689
|
-
}
|
|
690
|
-
|
|
691
|
-
.footer-links {
|
|
692
|
-
display: flex;
|
|
693
|
-
flex-wrap: wrap;
|
|
694
|
-
gap: 12px;
|
|
695
|
-
margin-top: 14px;
|
|
696
|
-
}
|
|
697
|
-
|
|
698
|
-
.footer-links a {
|
|
699
|
-
color: var(--muted);
|
|
700
|
-
font-weight: 700;
|
|
701
|
-
}
|
|
702
|
-
|
|
703
|
-
.footer-links a:hover,
|
|
704
|
-
.footer-links a:focus-visible {
|
|
705
|
-
color: var(--accent);
|
|
706
|
-
}
|
|
707
|
-
|
|
708
|
-
.mobile-menu {
|
|
709
|
-
display: none;
|
|
710
|
-
}
|
|
711
|
-
|
|
712
|
-
@media (max-width: 1020px) {
|
|
713
|
-
.layout {
|
|
714
|
-
grid-template-columns: 1fr;
|
|
715
|
-
}
|
|
716
|
-
|
|
717
|
-
.sidebar {
|
|
718
|
-
position: fixed;
|
|
719
|
-
inset: 62px 0 auto;
|
|
720
|
-
z-index: 25;
|
|
721
|
-
display: none;
|
|
722
|
-
height: calc(100vh - 62px);
|
|
723
|
-
padding: 22px;
|
|
724
|
-
background: rgba(5, 5, 5, 0.96);
|
|
725
|
-
}
|
|
726
|
-
|
|
727
|
-
.sidebar.open {
|
|
728
|
-
display: block;
|
|
729
|
-
}
|
|
730
|
-
|
|
731
|
-
.mobile-menu {
|
|
732
|
-
display: inline-flex;
|
|
733
|
-
}
|
|
734
|
-
|
|
735
|
-
.content-shell {
|
|
736
|
-
width: min(100%, 980px);
|
|
737
|
-
padding: 38px 22px 76px;
|
|
738
|
-
}
|
|
739
|
-
|
|
740
|
-
.hero {
|
|
741
|
-
padding: 30px;
|
|
742
|
-
}
|
|
743
|
-
}
|
|
744
|
-
|
|
745
|
-
@media (max-width: 760px) {
|
|
746
|
-
.topbar {
|
|
747
|
-
padding: 0 16px;
|
|
748
|
-
}
|
|
749
|
-
|
|
750
|
-
.top-actions .pill {
|
|
751
|
-
display: none;
|
|
752
|
-
}
|
|
753
|
-
|
|
754
|
-
.button.social {
|
|
755
|
-
display: none;
|
|
756
|
-
}
|
|
757
|
-
|
|
758
|
-
.grid.cols-2,
|
|
759
|
-
.grid.cols-3,
|
|
760
|
-
.command-grid,
|
|
761
|
-
.split {
|
|
762
|
-
grid-template-columns: 1fr;
|
|
763
|
-
}
|
|
764
|
-
|
|
765
|
-
th,
|
|
766
|
-
td {
|
|
767
|
-
display: block;
|
|
768
|
-
width: 100%;
|
|
769
|
-
}
|
|
770
|
-
|
|
771
|
-
th {
|
|
772
|
-
border-bottom: 0;
|
|
773
|
-
padding-bottom: 4px;
|
|
774
|
-
}
|
|
775
|
-
|
|
776
|
-
td {
|
|
777
|
-
padding-top: 4px;
|
|
778
|
-
}
|
|
779
|
-
}
|
|
780
|
-
|
|
781
|
-
@media (prefers-reduced-motion: reduce) {
|
|
782
|
-
html {
|
|
783
|
-
scroll-behavior: auto;
|
|
784
|
-
}
|
|
785
|
-
|
|
786
|
-
*,
|
|
787
|
-
*::before,
|
|
788
|
-
*::after {
|
|
789
|
-
transition: none !important;
|
|
790
|
-
}
|
|
791
|
-
}
|
|
792
|
-
</style>
|
|
20
|
+
<link rel="stylesheet" href="/assets/docs.css" />
|
|
21
|
+
<script src="/assets/docs.js" defer></script>
|
|
793
22
|
</head>
|
|
794
23
|
<body>
|
|
795
24
|
<header class="topbar">
|
|
796
|
-
<a class="brand" href="
|
|
25
|
+
<a class="brand" href="/" aria-label="Pi Agent Platform">
|
|
797
26
|
<span class="brand-mark"><img src="/assets/piagent-logo.svg" alt="" /></span>
|
|
798
27
|
<span>Pi Agent Platform</span>
|
|
799
28
|
</a>
|
|
800
29
|
<div class="top-actions">
|
|
801
|
-
<span class="pill"><span class="pill-dot"></span>v1.1
|
|
30
|
+
<span class="pill"><span class="pill-dot"></span>v1.2.1 docs</span>
|
|
802
31
|
<a class="button social" href="https://github.com/Vt-mmm/piagent" target="_blank" rel="noopener noreferrer" aria-label="Mở GitHub repository">
|
|
803
32
|
<svg viewBox="0 0 24 24" fill="none" aria-hidden="true">
|
|
804
33
|
<path d="M7 17 17 7M9 7h8v8" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" />
|
|
805
34
|
</svg>
|
|
806
35
|
GitHub
|
|
807
36
|
</a>
|
|
808
|
-
<a class="button social" href="https://www.facebook.com/vinhtam0544/" target="_blank" rel="noopener noreferrer" aria-label="Mở Facebook">
|
|
809
|
-
<svg viewBox="0 0 24 24" fill="none" aria-hidden="true">
|
|
810
|
-
<path d="M7 17 17 7M9 7h8v8" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round" />
|
|
811
|
-
</svg>
|
|
812
|
-
Facebook
|
|
813
|
-
</a>
|
|
814
37
|
<button class="button mobile-menu" type="button" data-menu>Lộ trình</button>
|
|
815
|
-
<a class="button" href="
|
|
38
|
+
<a class="button" href="/commands">Commands</a>
|
|
816
39
|
</div>
|
|
817
40
|
</header>
|
|
818
41
|
|
|
819
|
-
<div class="layout">
|
|
42
|
+
<div class="layout with-toc">
|
|
820
43
|
<aside class="sidebar" data-sidebar>
|
|
821
|
-
<div class="sidebar-search" aria-label="Tìm trong
|
|
44
|
+
<div class="sidebar-search" aria-label="Tìm trong tài liệu">
|
|
822
45
|
<svg viewBox="0 0 24 24" fill="none" aria-hidden="true">
|
|
823
46
|
<path d="M10.8 18.1a7.3 7.3 0 1 1 0-14.6 7.3 7.3 0 0 1 0 14.6Zm5.3-1.7 4.4 4.4" stroke="currentColor" stroke-width="2" stroke-linecap="round" />
|
|
824
47
|
</svg>
|
|
825
|
-
<input type="search" placeholder="Tìm
|
|
48
|
+
<input type="search" placeholder="Tìm trang" data-filter />
|
|
826
49
|
</div>
|
|
827
50
|
|
|
828
51
|
<nav aria-label="Tài liệu">
|
|
829
52
|
<div class="nav-group">
|
|
830
|
-
<p class="nav-title">
|
|
831
|
-
<a class="nav-link" href="
|
|
832
|
-
<a class="nav-link" href="
|
|
833
|
-
<a class="nav-link" href="
|
|
53
|
+
<p class="nav-title">Get started</p>
|
|
54
|
+
<a class="nav-link current" href="/" aria-current="page">Overview</a>
|
|
55
|
+
<a class="nav-link" href="/quickstart">Quickstart</a>
|
|
56
|
+
<a class="nav-link" href="/scope">Phạm vi platform</a>
|
|
834
57
|
</div>
|
|
835
58
|
<div class="nav-group">
|
|
836
|
-
<p class="nav-title">
|
|
837
|
-
<a class="nav-link" href="
|
|
838
|
-
<a class="nav-link" href="
|
|
839
|
-
<a class="nav-link" href="
|
|
840
|
-
<a class="nav-link" href="
|
|
59
|
+
<p class="nav-title">Build</p>
|
|
60
|
+
<a class="nav-link" href="/profiles">Project profile</a>
|
|
61
|
+
<a class="nav-link" href="/permissions">Permission modes</a>
|
|
62
|
+
<a class="nav-link" href="/commands">Command catalog</a>
|
|
63
|
+
<a class="nav-link" href="/workflows">Workflows</a>
|
|
841
64
|
</div>
|
|
842
65
|
<div class="nav-group">
|
|
843
|
-
<p class="nav-title">
|
|
844
|
-
<a class="nav-link" href="
|
|
845
|
-
<a class="nav-link" href="
|
|
846
|
-
<a class="nav-link" href="
|
|
847
|
-
<a class="nav-link" href="
|
|
66
|
+
<p class="nav-title">MCP</p>
|
|
67
|
+
<a class="nav-link" href="/mcp">MCP overview</a>
|
|
68
|
+
<a class="nav-link" href="/mcp-servers">Quản lý server</a>
|
|
69
|
+
<a class="nav-link" href="/mcp-auth">Auth và readiness</a>
|
|
70
|
+
<a class="nav-link" href="/mcp-approval">Approval gate</a>
|
|
71
|
+
</div>
|
|
72
|
+
<div class="nav-group">
|
|
73
|
+
<p class="nav-title">Operate</p>
|
|
74
|
+
<a class="nav-link" href="/security">Security model</a>
|
|
75
|
+
<a class="nav-link" href="/architecture">Architecture</a>
|
|
76
|
+
<a class="nav-link" href="/runtime">Runtime tools</a>
|
|
77
|
+
<a class="nav-link" href="/team">Team usage</a>
|
|
848
78
|
</div>
|
|
849
79
|
</nav>
|
|
850
80
|
</aside>
|
|
851
81
|
|
|
852
82
|
<main>
|
|
853
|
-
<div class="content-shell">
|
|
854
|
-
|
|
855
|
-
|
|
856
|
-
|
|
857
|
-
|
|
858
|
-
|
|
859
|
-
|
|
860
|
-
|
|
861
|
-
|
|
862
|
-
|
|
863
|
-
|
|
864
|
-
|
|
865
|
-
|
|
866
|
-
|
|
867
|
-
|
|
868
|
-
|
|
869
|
-
|
|
870
|
-
|
|
871
|
-
|
|
872
|
-
|
|
873
|
-
|
|
874
|
-
|
|
875
|
-
|
|
876
|
-
|
|
877
|
-
Codex CLI và Claude Code là agent coding tổng quát và đều có cơ chế governance native như permission, approval, sandbox/trust, hooks, subagents, MCP hoặc managed settings tuỳ bề mặt sử dụng. Pi Agent Platform đưa các cơ chế governance tương tự vào Pi, rồi đóng gói thành workflow đội nhóm: profile, policy guard, capability lock, MCP, subagents, memory và verify gate dùng lại được trên nhiều repo.
|
|
878
|
-
</p>
|
|
879
|
-
|
|
880
|
-
<div class="table-wrap">
|
|
881
|
-
<table>
|
|
882
|
-
<thead>
|
|
883
|
-
<tr>
|
|
884
|
-
<th>Hạng mục</th>
|
|
885
|
-
<th>Codex CLI</th>
|
|
886
|
-
<th>Claude Code</th>
|
|
887
|
-
<th>Pi Agent Platform</th>
|
|
888
|
-
</tr>
|
|
889
|
-
</thead>
|
|
890
|
-
<tbody>
|
|
891
|
-
<tr>
|
|
892
|
-
<td>Vai trò chính</td>
|
|
893
|
-
<td>Coding agent chạy trong terminal, làm việc trực tiếp trên local repo.</td>
|
|
894
|
-
<td>Agent coding đa bề mặt: terminal, IDE, desktop, web và tích hợp dev tools.</td>
|
|
895
|
-
<td>Governance layer cho Pi: chuẩn hoá cách team dùng agent theo policy, profile và workflow vận hành.</td>
|
|
896
|
-
</tr>
|
|
897
|
-
<tr>
|
|
898
|
-
<td>Tuỳ biến team</td>
|
|
899
|
-
<td>Dùng AGENTS.md, config, skills, plugins, MCP và command native.</td>
|
|
900
|
-
<td>Dùng CLAUDE.md, settings, permissions, hooks, skills và MCP.</td>
|
|
901
|
-
<td>Dùng adapter profile, base policy, command guard, capability pack, docs và scripts.</td>
|
|
902
|
-
</tr>
|
|
903
|
-
<tr>
|
|
904
|
-
<td>Quyền chạy</td>
|
|
905
|
-
<td>Có sandbox, approval policy, permission profiles, network controls và workflow read-only/workspace-write tuỳ môi trường.</td>
|
|
906
|
-
<td>Có permissions, working-directory boundary, sandboxed bash option, hooks và managed settings cho team.</td>
|
|
907
|
-
<td>Có <span class="inline-code">read-only</span>, <span class="inline-code">workspace-write</span>, <span class="inline-code">trusted-full-access</span> ở lớp policy extension của Pi.</td>
|
|
908
|
-
</tr>
|
|
909
|
-
<tr>
|
|
910
|
-
<td>Bảo mật secret</td>
|
|
911
|
-
<td>Dựa trên OS-enforced sandbox, approval, network policy và bề mặt Codex đang dùng.</td>
|
|
912
|
-
<td>Dựa trên permission architecture, sandbox option, trust verification, allowlist và security best practices.</td>
|
|
913
|
-
<td>Application-level policy layer cho controlled tools: protected paths, shell checks, symlink alias, output redaction và integrity lock.</td>
|
|
914
|
-
</tr>
|
|
915
|
-
<tr>
|
|
916
|
-
<td>Điểm mạnh riêng</td>
|
|
917
|
-
<td>Trải nghiệm terminal gọn, tích hợp Git và local tooling.</td>
|
|
918
|
-
<td>Hệ sinh thái command, hooks, memory, multi-surface mạnh.</td>
|
|
919
|
-
<td>Tạo chuẩn nội bộ: mọi repo dùng cùng profile, cùng guard, cùng verify discipline.</td>
|
|
920
|
-
</tr>
|
|
921
|
-
</tbody>
|
|
922
|
-
</table>
|
|
923
|
-
</div>
|
|
924
|
-
</section>
|
|
925
|
-
|
|
926
|
-
<section class="section" id="quickstart">
|
|
927
|
-
<p class="section-kicker">Quickstart</p>
|
|
928
|
-
<h2>Step by step cho thành viên mới</h2>
|
|
929
|
-
<p class="section-lead">
|
|
930
|
-
Hai lệnh để cài, rồi mở repo, chọn profile, bật quyền phù hợp, chạy task, và verify bằng command thật. Gỡ cũng chỉ hai lệnh khi không dùng nữa.
|
|
931
|
-
</p>
|
|
932
|
-
|
|
933
|
-
<div class="steps">
|
|
934
|
-
<article class="step">
|
|
935
|
-
<div>
|
|
936
|
-
<h3>Cài — hai lệnh</h3>
|
|
937
|
-
<p>Cần Node.js 22.19.0 trở lên. Không cần cài Pi Coding Agent trước: <span class="inline-code">piagent-setup</span> tự cài đúng bản <span class="inline-code">0.82.0</span> mà release <span class="inline-code">v1.1.9</span> đang pin. Chạy nó ngay trong thư mục project — nó cài Pi package, khởi tạo <span class="inline-code">.pi/</span>, cài MCP baseline cùng subagents, rồi chạy doctor. Thêm <span class="inline-code">--no-mcp</span>, <span class="inline-code">--no-subagents</span>, <span class="inline-code">--no-herdr</span> hoặc <span class="inline-code">--global-only</span> để bỏ bớt.</p>
|
|
938
|
-
<div class="table-wrap compact-table">
|
|
939
|
-
<table>
|
|
940
|
-
<thead>
|
|
941
|
-
<tr>
|
|
942
|
-
<th>Runtime</th>
|
|
943
|
-
<th>Trạng thái rollout</th>
|
|
944
|
-
</tr>
|
|
945
|
-
</thead>
|
|
946
|
-
<tbody>
|
|
947
|
-
<tr>
|
|
948
|
-
<td>macOS Apple Silicon + Bash</td>
|
|
949
|
-
<td>Đã verify cho release này.</td>
|
|
950
|
-
</tr>
|
|
951
|
-
<tr>
|
|
952
|
-
<td>Linux x64 + Bash</td>
|
|
953
|
-
<td>Đã verify trong CI.</td>
|
|
954
|
-
</tr>
|
|
955
|
-
<tr>
|
|
956
|
-
<td>macOS Intel / Linux ARM64 + Bash</td>
|
|
957
|
-
<td>Supported target; chạy doctor + smoke test trước khi rollout rộng.</td>
|
|
958
|
-
</tr>
|
|
959
|
-
<tr>
|
|
960
|
-
<td>Native Windows / WSL2</td>
|
|
961
|
-
<td>Chưa là target rollout team; WSL2 chỉ experimental.</td>
|
|
962
|
-
</tr>
|
|
963
|
-
</tbody>
|
|
964
|
-
</table>
|
|
965
|
-
</div>
|
|
966
|
-
<div class="command-card">
|
|
967
|
-
<header><span>Hai lệnh</span><button class="clip-btn" data-clip="npm install -g @piagent/platform piagent-setup">Lấy lệnh</button></header>
|
|
968
|
-
<pre><code>npm install -g @piagent/platform
|
|
83
|
+
<div class="content-shell" data-article>
|
|
84
|
+
<section class="hero">
|
|
85
|
+
<p class="eyebrow">Team operating docs</p>
|
|
86
|
+
<h1>Pi runtime được đóng gói như một nền tảng dùng lại cho nhiều dự án.</h1>
|
|
87
|
+
<p>
|
|
88
|
+
Tài liệu này gom phần cài đặt, profile, quyền chạy, MCP, bảo mật và workflow vào một nơi duy nhất. Mục tiêu là thành viên mới chỉ cần mở trang này, chọn đúng command, chạy đúng chế độ và biết ranh giới an toàn.
|
|
89
|
+
</p>
|
|
90
|
+
<div class="owner-strip" aria-label="Thông tin dự án">
|
|
91
|
+
<span class="owner-label">Project links</span>
|
|
92
|
+
<a href="https://piagent.io.vn" target="_blank" rel="noopener noreferrer">Docs · piagent.io.vn</a>
|
|
93
|
+
<a href="https://github.com/Vt-mmm/piagent" target="_blank" rel="noopener noreferrer">GitHub · Vt-mmm/piagent</a>
|
|
94
|
+
<a href="https://www.facebook.com/vinhtam0544/" target="_blank" rel="noopener noreferrer">Facebook · Vĩnh Tâm</a>
|
|
95
|
+
</div>
|
|
96
|
+
<div class="hero-actions">
|
|
97
|
+
<a class="button primary" href="/quickstart">Bắt đầu</a>
|
|
98
|
+
<a class="button" href="/commands">Xem command</a>
|
|
99
|
+
<a class="button" href="/mcp">MCP</a>
|
|
100
|
+
</div>
|
|
101
|
+
</section>
|
|
102
|
+
|
|
103
|
+
<section class="section">
|
|
104
|
+
<h2 id="cai-dat">Cài trong hai lệnh</h2>
|
|
105
|
+
<p>Node.js <span class="inline-code">>=22.19.0</span>. Chạy từ đúng project muốn set up.</p>
|
|
106
|
+
<pre><code>npm install -g @piagent/platform
|
|
969
107
|
piagent-setup</code></pre>
|
|
970
|
-
|
|
971
|
-
|
|
972
|
-
|
|
973
|
-
|
|
974
|
-
|
|
975
|
-
|
|
976
|
-
|
|
977
|
-
|
|
978
|
-
|
|
979
|
-
|
|
980
|
-
|
|
981
|
-
|
|
982
|
-
|
|
983
|
-
|
|
984
|
-
|
|
985
|
-
|
|
986
|
-
|
|
987
|
-
|
|
988
|
-
|
|
989
|
-
|
|
990
|
-
|
|
991
|
-
|
|
992
|
-
|
|
993
|
-
|
|
994
|
-
|
|
995
|
-
|
|
996
|
-
|
|
997
|
-
|
|
998
|
-
|
|
999
|
-
|
|
1000
|
-
|
|
1001
|
-
|
|
1002
|
-
|
|
1003
|
-
|
|
1004
|
-
|
|
1005
|
-
|
|
1006
|
-
|
|
1007
|
-
|
|
1008
|
-
|
|
1009
|
-
|
|
1010
|
-
|
|
1011
|
-
|
|
1012
|
-
|
|
1013
|
-
|
|
1014
|
-
|
|
1015
|
-
|
|
1016
|
-
|
|
1017
|
-
|
|
1018
|
-
|
|
1019
|
-
|
|
1020
|
-
|
|
1021
|
-
|
|
1022
|
-
|
|
1023
|
-
|
|
1024
|
-
|
|
1025
|
-
|
|
1026
|
-
|
|
1027
|
-
|
|
1028
|
-
</
|
|
1029
|
-
|
|
1030
|
-
|
|
1031
|
-
|
|
1032
|
-
|
|
1033
|
-
|
|
1034
|
-
|
|
1035
|
-
|
|
1036
|
-
|
|
1037
|
-
|
|
1038
|
-
/
|
|
1039
|
-
|
|
1040
|
-
|
|
1041
|
-
</div>
|
|
1042
|
-
</article>
|
|
1043
|
-
|
|
1044
|
-
<article class="step">
|
|
1045
|
-
<div>
|
|
1046
|
-
<h3>Verify trước khi handoff</h3>
|
|
1047
|
-
<p>Final gate chỉ tin kết quả command đã chạy thật, exit 0, và khớp verify plan. Sau khi pin hoặc nâng version, chạy doctor trên project:</p>
|
|
1048
|
-
<div class="command-card">
|
|
1049
|
-
<header><span>Doctor</span><button class="clip-btn" data-clip="piagent-doctor">Lấy lệnh</button></header>
|
|
1050
|
-
<pre><code>piagent-doctor</code></pre>
|
|
1051
|
-
</div>
|
|
1052
|
-
<p>Người phát triển chính platform còn có <span class="inline-code">npm run verify</span> trong source repo; chi tiết ở <a href="https://github.com/Vt-mmm/piagent/blob/main/CONTRIBUTING.md">CONTRIBUTING</a>.</p>
|
|
1053
|
-
</div>
|
|
1054
|
-
</article>
|
|
1055
|
-
|
|
1056
|
-
<article class="step">
|
|
1057
|
-
<div>
|
|
1058
|
-
<h3>Gỡ cài đặt khi không dùng nữa</h3>
|
|
1059
|
-
<p><span class="inline-code">piagent-uninstall</span> mặc định chỉ in ra sẽ gỡ những gì rồi thoát; phải thêm <span class="inline-code">--apply</span> nó mới thực hiện, vì nó sửa Pi settings mà công cụ khác cũng ghi vào. Mặc định chỉ gỡ Pi package của platform; add-on, Pi host và state trong project đều là opt-in.</p>
|
|
1060
|
-
<div class="command-card">
|
|
1061
|
-
<header><span>Gỡ — hai lệnh</span><button class="clip-btn" data-clip="piagent-uninstall piagent-uninstall --apply">Lấy lệnh</button></header>
|
|
1062
|
-
<pre><code>piagent-uninstall
|
|
1063
|
-
piagent-uninstall --apply</code></pre>
|
|
1064
|
-
</div>
|
|
1065
|
-
<p>Add-on, Pi host, state trong project và helper npm-global đều tách riêng và là opt-in — <span class="inline-code">piagent-uninstall --help</span> liệt kê đủ. Nó gỡ theo những gì đang đăng ký trong Pi settings chứ không theo những gì bản hiện tại cài, nên package do release cũ đăng ký vẫn ra được.</p>
|
|
1066
|
-
<div class="callout ok-callout">
|
|
1067
|
-
<strong>Không bao giờ bị xoá</strong>
|
|
1068
|
-
<p>Credential, trust, session, todo và <span class="inline-code">.pi/memory/</span> được giữ nguyên ở mọi tổ hợp cờ — đó là dữ liệu của người dùng, không phải state của platform. Các file sinh từ template rồi sửa tiếp như <span class="inline-code">AGENTS.md</span>, <span class="inline-code">.pi/settings.json</span>, <span class="inline-code">project-context.md</span> chỉ được liệt kê để tự quyết. Với <span class="inline-code">.pi/settings.json</span>, chỉ đúng entry trỏ tới platform bị bỏ khỏi <span class="inline-code">packages</span>.</p>
|
|
1069
|
-
</div>
|
|
1070
|
-
</div>
|
|
1071
|
-
</article>
|
|
1072
|
-
|
|
1073
|
-
</div>
|
|
1074
|
-
</section>
|
|
1075
|
-
|
|
1076
|
-
<section class="section" id="architecture">
|
|
1077
|
-
<p class="section-kicker">Architecture</p>
|
|
1078
|
-
<h2>Kiến trúc repo</h2>
|
|
1079
|
-
<p class="section-lead">
|
|
1080
|
-
Repo này không nhét business logic vào core. Core chỉ giữ policy, prompts, guard, skills, subagents và scripts đủ chung để áp cho nhiều dự án.
|
|
1081
|
-
</p>
|
|
1082
|
-
|
|
1083
|
-
<div class="grid cols-3">
|
|
1084
|
-
<article class="card">
|
|
1085
|
-
<h3>Core package</h3>
|
|
1086
|
-
<p><span class="inline-code">packages/piagent-core</span> chứa extension guard, prompts, skills và subagent roles.</p>
|
|
1087
|
-
</article>
|
|
1088
|
-
<article class="card">
|
|
1089
|
-
<h3>Adapters</h3>
|
|
1090
|
-
<p><span class="inline-code">adapters/</span> chứa profile dùng lại: frontend, backend, fullstack, data, devops, docs.</p>
|
|
1091
|
-
</article>
|
|
1092
|
-
<article class="card">
|
|
1093
|
-
<h3>Capability packs</h3>
|
|
1094
|
-
<p><span class="inline-code">packs/</span> gom policy, lifecycle, recipes và eval scenarios theo manifest có lock.</p>
|
|
1095
|
-
</article>
|
|
1096
|
-
<article class="card">
|
|
1097
|
-
<h3>Policies</h3>
|
|
1098
|
-
<p>Base policy định nghĩa protected paths, command rules, permission modes và human-action gates.</p>
|
|
1099
|
-
</article>
|
|
1100
|
-
<article class="card">
|
|
1101
|
-
<h3>Scripts</h3>
|
|
1102
|
-
<p>Setup, doctor, model scope, MCP, subagents, benchmark và trusted-run wrapper đều có CLI riêng.</p>
|
|
1103
|
-
</article>
|
|
1104
|
-
<article class="card">
|
|
1105
|
-
<h3>Docs</h3>
|
|
1106
|
-
<p><span class="inline-code">docs/</span> giữ manual dài. <span class="inline-code">docs-site/</span> là trang HTML gọn cho team.</p>
|
|
1107
|
-
</article>
|
|
1108
|
-
</div>
|
|
1109
|
-
</section>
|
|
1110
|
-
|
|
1111
|
-
<section class="section" id="security">
|
|
1112
|
-
<p class="section-kicker">Security model</p>
|
|
1113
|
-
<h2>Policy enforcement layer, không phải OS sandbox</h2>
|
|
1114
|
-
<p class="section-lead">
|
|
1115
|
-
Platform ưu tiên fail-closed trong bề mặt tool được kiểm soát: khi lock sai, profile sai hoặc command đụng vùng nhạy cảm, guard cố gắng chặn trước khi tool chạy. Đây là application-level policy enforcement layer, không phải lớp cách ly hoàn chỉnh; với code hoặc prompt không tin cậy vẫn cần container/VM và giới hạn credential, filesystem, process, network.
|
|
1116
|
-
</p>
|
|
1117
|
-
|
|
1118
|
-
<div class="grid cols-2">
|
|
1119
|
-
<article class="card">
|
|
1120
|
-
<h3>Protected paths</h3>
|
|
1121
|
-
<p>Chặn đọc/ghi qua controlled tools đối với file như <span class="inline-code">.env</span>, <span class="inline-code">auth.json</span>, local trust files, profile lock và settings nhạy cảm.</p>
|
|
1122
|
-
</article>
|
|
1123
|
-
<article class="card">
|
|
1124
|
-
<h3>Shell hardening</h3>
|
|
1125
|
-
<p>Guard dựa vào shell parser và rule cho command được kiểm soát để bắt glob, brace, redirection, bare-word symlink và xargs composition trước khi shell mở rộng runtime.</p>
|
|
1126
|
-
</article>
|
|
1127
|
-
<article class="card">
|
|
1128
|
-
<h3>Secret redaction</h3>
|
|
1129
|
-
<p>Tool output text đi qua redactor để che token, provider keys, secret keyword patterns và giá trị nhạy cảm phổ biến. Benchmark hiện là synthetic/internal và model vẫn đang hoàn thiện.</p>
|
|
1130
|
-
</article>
|
|
1131
|
-
<article class="card">
|
|
1132
|
-
<h3>Capability lock</h3>
|
|
1133
|
-
<p>Pack lock có digest và tamper detection. Lock hỏng thì fail-closed, không tự nới quyền.</p>
|
|
1134
|
-
</article>
|
|
1135
|
-
<article class="card">
|
|
1136
|
-
<h3>Human-action gate</h3>
|
|
1137
|
-
<p>Destructive hoặc external-provider action vẫn cần operator xác nhận rõ, kể cả khi full-access đang bật. Gate áp dụng cho direct tool, MCP proxy đã decode và các shell form như GitHub CLI write hoặc HTTP non-GET.</p>
|
|
1138
|
-
</article>
|
|
1139
|
-
<article class="card">
|
|
1140
|
-
<h3>Verify evidence</h3>
|
|
1141
|
-
<p>Handoff hoàn tất cần bằng chứng verify từ bash result đã quan sát, không nhận câu trả lời “đã test” suông.</p>
|
|
1142
|
-
</article>
|
|
1143
|
-
</div>
|
|
1144
|
-
|
|
1145
|
-
<div class="callout">
|
|
1146
|
-
<strong>Ranh giới quan trọng</strong>
|
|
1147
|
-
<p>Guard phụ thuộc vào tool path, controlled tools và shell parser mà platform quan sát được. Nó không ngăn một process khác chạy cùng quyền OS đọc/ghi ngoài guard, và không thay thế sandbox của hệ điều hành.</p>
|
|
1148
|
-
<ul>
|
|
1149
|
-
<li>Có thể bị ảnh hưởng bởi symlink, encoding, nested payload, shell expansion hoặc tool mới chưa được policy hoá.</li>
|
|
1150
|
-
<li>Redaction là backstop giảm rò rỉ, không phải giấy phép để đưa secret thật vào prompt/output.</li>
|
|
1151
|
-
<li>Workload không tin cậy cần container/VM với giới hạn filesystem, process, network và credential.</li>
|
|
1152
|
-
</ul>
|
|
1153
|
-
</div>
|
|
1154
|
-
|
|
1155
|
-
<div class="callout">
|
|
1156
|
-
<strong>Redaction cần kiểm toán độc lập</strong>
|
|
1157
|
-
<p>Các benchmark hiện tại là kiểm thử synthetic/internal cho regression và release gate, chưa tương đương external security audit. Dự án công khai <a href="https://github.com/Vt-mmm/piagent/blob/main/docs/security-threat-model.md" target="_blank" rel="noopener noreferrer">threat model và attack-vector map</a>; phạm vi OS/shell rộng hơn, parser fuzzing, third-party audit và LTS vẫn là các mức bảo đảm cao hơn chưa được claim. Signed provenance thì đã có: mỗi bản publish lên npm mang attestation ký qua sigstore từ GitHub Actions, buộc tarball về đúng commit và workflow tạo ra nó.</p>
|
|
1158
|
-
</div>
|
|
1159
|
-
|
|
1160
|
-
<div class="callout">
|
|
1161
|
-
<strong>Dependency gate tách hai lớp</strong>
|
|
1162
|
-
<p>Release kiểm toán riêng dependency tree nhỏ của terminal helper và cây exact Pi host + pinned add-on. Helper tree hiện sạch hoàn toàn. Cây Pi host có 1 high và 11 moderate, và dự án nói thẳng con số đó thay vì gọi runtime là “0 vulnerability”.</p>
|
|
1163
|
-
<p>Bản high là <span class="inline-code">GHSA-mh99-v99m-4gvg</span> trong <span class="inline-code">brace-expansion</span> — DoS, không leo quyền, không lộ dữ liệu. Repo này không sửa được: Pi host publish kèm <span class="inline-code">npm-shrinkwrap.json</span> ghim version dính lỗi, mà shrinkwrap đã publish thì thắng <span class="inline-code">overrides</span> của consumer. Mọi bản Pi đã phát hành đều dính một advisory brace-expansion, nên pin bản cũ chỉ đổi lỗi này lấy lỗi khác. Vì vậy gate miễn trừ đúng một advisory có tên, kèm lý do ghi trong mã nguồn, và tự đỏ lại khi hết hạn rà soát <span class="inline-code">2026-08-25</span> hoặc ngay khi upstream vá xong. Mọi high/critical khác vẫn chặn.</p>
|
|
1164
|
-
<p>11 moderate còn lại thuộc hai advisory upstream: encoded-backslash path traversal trên Windows trong Hono adapter, và protobuf parser DoS. Native Windows/WSL2 chưa nằm trong matrix rollout team, nhưng dự án vẫn theo dõi cả hai.</p>
|
|
1165
|
-
</div>
|
|
1166
|
-
</section>
|
|
1167
|
-
|
|
1168
|
-
<section class="section" id="profiles">
|
|
1169
|
-
<p class="section-kicker">Profiles</p>
|
|
1170
|
-
<h2>Project profile: chọn đúng đường ray cho repo</h2>
|
|
1171
|
-
<p class="section-lead">
|
|
1172
|
-
Profile ghi vào <span class="inline-code">.pi/piagent-profile.json</span> và lock tương ứng. Command profile hiện chạy trực tiếp, ưu tiên UI select cho profile/tech stack, không kích thêm câu trả lời dài từ model.
|
|
1173
|
-
</p>
|
|
1174
|
-
|
|
1175
|
-
<div class="command-grid">
|
|
1176
|
-
<article class="command-card">
|
|
1177
|
-
<header><span>Xem status ngắn</span><button class="clip-btn" data-clip="/profile">Lấy lệnh</button></header>
|
|
1178
|
-
<pre><code>/profile</code></pre>
|
|
1179
|
-
</article>
|
|
1180
|
-
<article class="command-card">
|
|
1181
|
-
<header><span>Liệt kê options</span><button class="clip-btn" data-clip="/profile list">Lấy lệnh</button></header>
|
|
1182
|
-
<pre><code>/profile list</code></pre>
|
|
1183
|
-
</article>
|
|
1184
|
-
<article class="command-card">
|
|
1185
|
-
<header><span>Áp profile detect</span><button class="clip-btn" data-clip="/profile auto">Lấy lệnh</button></header>
|
|
1186
|
-
<pre><code>/profile auto</code></pre>
|
|
1187
|
-
</article>
|
|
1188
|
-
<article class="command-card">
|
|
1189
|
-
<header><span>Setup bằng select</span><button class="clip-btn" data-clip="/profile setup /profile tech setup fullstack">Lấy lệnh</button></header>
|
|
1190
|
-
<pre><code>/profile setup
|
|
1191
|
-
/profile tech setup fullstack</code></pre>
|
|
1192
|
-
</article>
|
|
1193
|
-
<article class="command-card">
|
|
1194
|
-
<header><span>Apply tech deterministic</span><button class="clip-btn" data-clip="/profile tech apply fullstack frontend=nextjs backend=nestjs database=prisma">Lấy lệnh</button></header>
|
|
1195
|
-
<pre><code>/profile tech apply fullstack frontend=nextjs backend=nestjs database=prisma</code></pre>
|
|
1196
|
-
</article>
|
|
1197
|
-
<article class="command-card">
|
|
1198
|
-
<header><span>Frontend</span><button class="clip-btn" data-clip="/profile web-frontend">Lấy lệnh</button></header>
|
|
1199
|
-
<pre><code>/profile web-frontend
|
|
1200
|
-
/profile fe</code></pre>
|
|
1201
|
-
</article>
|
|
1202
|
-
<article class="command-card">
|
|
1203
|
-
<header><span>Backend/API</span><button class="clip-btn" data-clip="/profile backend-api">Lấy lệnh</button></header>
|
|
1204
|
-
<pre><code>/profile backend-api</code></pre>
|
|
1205
|
-
</article>
|
|
1206
|
-
<article class="command-card">
|
|
1207
|
-
<header><span>Backend read-only, frontend write</span><button class="clip-btn" data-clip="/profile be-readonly-fe">Lấy lệnh</button></header>
|
|
1208
|
-
<pre><code>/profile be-readonly-fe
|
|
1209
|
-
/profile be-fe</code></pre>
|
|
1210
|
-
</article>
|
|
1211
|
-
<article class="command-card">
|
|
1212
|
-
<header><span>Fullstack</span><button class="clip-btn" data-clip="/profile fullstack">Lấy lệnh</button></header>
|
|
1213
|
-
<pre><code>/profile fullstack
|
|
1214
|
-
/profile full</code></pre>
|
|
1215
|
-
</article>
|
|
1216
|
-
<article class="command-card">
|
|
1217
|
-
<header><span>Docs-only</span><button class="clip-btn" data-clip="/profile docs">Lấy lệnh</button></header>
|
|
1218
|
-
<pre><code>/profile docs</code></pre>
|
|
1219
|
-
</article>
|
|
1220
|
-
</div>
|
|
1221
|
-
|
|
1222
|
-
<div class="tag-list">
|
|
1223
|
-
<span class="tag">generic</span>
|
|
1224
|
-
<span class="tag">node-typescript</span>
|
|
1225
|
-
<span class="tag">python</span>
|
|
1226
|
-
<span class="tag">web-frontend</span>
|
|
1227
|
-
<span class="tag">backend-api</span>
|
|
1228
|
-
<span class="tag">fullstack</span>
|
|
1229
|
-
<span class="tag">be-readonly-fe</span>
|
|
1230
|
-
<span class="tag">data</span>
|
|
1231
|
-
<span class="tag">devops</span>
|
|
1232
|
-
<span class="tag">mobile</span>
|
|
1233
|
-
<span class="tag">docs</span>
|
|
1234
|
-
</div>
|
|
1235
|
-
|
|
1236
|
-
<div class="callout">
|
|
1237
|
-
<strong>Tech stack theo role</strong>
|
|
1238
|
-
<p>Frontend profile chọn FE + database optional; backend profile chọn BE + database optional; fullstack chọn đủ FE, BE và database. Sau đó platform tạo <span class="inline-code">.pi/tech-stack.json</span> và snapshot Context7 ngắn trong <span class="inline-code">.pi/tech-context/*</span>.</p>
|
|
1239
|
-
</div>
|
|
1240
|
-
</section>
|
|
1241
|
-
|
|
1242
|
-
<section class="section" id="permissions">
|
|
1243
|
-
<p class="section-kicker">Permissions</p>
|
|
1244
|
-
<h2>Một command để đổi quyền theo task</h2>
|
|
1245
|
-
<p class="section-lead">
|
|
1246
|
-
Permission mode là session-local override. Đổi mode không sửa project profile. Nếu truyền thêm nội dung sau command, Pi đổi quyền rồi gửi phần còn lại thành task kế tiếp.
|
|
1247
|
-
</p>
|
|
1248
|
-
|
|
1249
|
-
<div class="table-wrap">
|
|
1250
|
-
<table>
|
|
1251
|
-
<thead>
|
|
1252
|
-
<tr>
|
|
1253
|
-
<th>Mode</th>
|
|
1254
|
-
<th>Dùng khi nào</th>
|
|
1255
|
-
<th>Ranh giới</th>
|
|
1256
|
-
<th>Command</th>
|
|
1257
|
-
</tr>
|
|
1258
|
-
</thead>
|
|
1259
|
-
<tbody>
|
|
1260
|
-
<tr>
|
|
1261
|
-
<td><span class="inline-code">read-only</span></td>
|
|
1262
|
-
<td>Scout, audit, mapping, review không chỉnh source.</td>
|
|
1263
|
-
<td>Cho read, grep, find, ls và piagent tools; chặn shell/write/unknown tools.</td>
|
|
1264
|
-
<td><span class="inline-code">/read-only</span></td>
|
|
1265
|
-
</tr>
|
|
1266
|
-
<tr>
|
|
1267
|
-
<td><span class="inline-code">workspace-write</span></td>
|
|
1268
|
-
<td>Implementation bình thường trong repo.</td>
|
|
1269
|
-
<td>Default guarded mode; giữ protected path, shell policy, capability và verify gate.</td>
|
|
1270
|
-
<td><span class="inline-code">/workspace-write</span></td>
|
|
1271
|
-
</tr>
|
|
1272
|
-
<tr>
|
|
1273
|
-
<td><span class="inline-code">trusted-full-access</span></td>
|
|
1274
|
-
<td>Automation trên repo đã tin và task đã rõ.</td>
|
|
1275
|
-
<td>Nới autonomy trong guard, nhưng vẫn giữ protected path, redaction, lock và confirmation.</td>
|
|
1276
|
-
<td><span class="inline-code">/full-access</span></td>
|
|
1277
|
-
</tr>
|
|
1278
|
-
</tbody>
|
|
1279
|
-
</table>
|
|
1280
|
-
</div>
|
|
1281
|
-
|
|
1282
|
-
<div class="command-grid">
|
|
1283
|
-
<article class="command-card">
|
|
1284
|
-
<header><span>Xem permission</span><button class="clip-btn" data-clip="/permission-status">Lấy lệnh</button></header>
|
|
1285
|
-
<pre><code>/permission-status</code></pre>
|
|
1286
|
-
</article>
|
|
1287
|
-
<article class="command-card">
|
|
1288
|
-
<header><span>Read-only session</span><button class="clip-btn" data-clip="/read-only">Lấy lệnh</button></header>
|
|
1289
|
-
<pre><code>/read-only</code></pre>
|
|
1290
|
-
</article>
|
|
1291
|
-
<article class="command-card">
|
|
1292
|
-
<header><span>Workspace write</span><button class="clip-btn" data-clip="/workspace-write">Lấy lệnh</button></header>
|
|
1293
|
-
<pre><code>/workspace-write</code></pre>
|
|
1294
|
-
</article>
|
|
1295
|
-
<article class="command-card">
|
|
1296
|
-
<header><span>Full-access + task</span><button class="clip-btn" data-clip="/full-access Run the trusted local verification suite.">Lấy lệnh</button></header>
|
|
1297
|
-
<pre><code>/full-access Run the trusted local verification suite.</code></pre>
|
|
1298
|
-
</article>
|
|
1299
|
-
</div>
|
|
1300
|
-
</section>
|
|
1301
|
-
|
|
1302
|
-
<section class="section" id="commands">
|
|
1303
|
-
<p class="section-kicker">Command catalog</p>
|
|
1304
|
-
<h2>Command ngắn, rõ, ít token burn</h2>
|
|
1305
|
-
<p class="section-lead">
|
|
1306
|
-
Ưu tiên dùng slash command vì mỗi command đã gói policy và flow. Thành viên không cần paste lại hướng dẫn dài trong từng prompt.
|
|
1307
|
-
</p>
|
|
1308
|
-
|
|
1309
|
-
<div class="grid cols-2">
|
|
1310
|
-
<article class="card">
|
|
1311
|
-
<h3>Session basics</h3>
|
|
1312
|
-
<div class="tag-list">
|
|
1313
|
-
<span class="tag">/login</span>
|
|
1314
|
-
<span class="tag">/model</span>
|
|
1315
|
-
<span class="tag">/piagent-commands</span>
|
|
1316
|
-
<span class="tag">/piagent-status</span>
|
|
1317
|
-
<span class="tag">/piagent-orchestration</span>
|
|
1318
|
-
<span class="tag">/piagent-usage</span>
|
|
1319
|
-
<span class="tag">/task-preflight</span>
|
|
1320
|
-
</div>
|
|
1321
|
-
<p>Dùng để setup session, chọn model, xem profile/usage/orchestration và quyết định có cần fresh session trước task lớn không.</p>
|
|
1322
|
-
</article>
|
|
1323
|
-
<article class="card">
|
|
1324
|
-
<h3>Project profile</h3>
|
|
1325
|
-
<div class="tag-list">
|
|
1326
|
-
<span class="tag">/profile</span>
|
|
1327
|
-
<span class="tag">/profile list</span>
|
|
1328
|
-
<span class="tag">/profile auto</span>
|
|
1329
|
-
<span class="tag">/profile setup</span>
|
|
1330
|
-
<span class="tag">/profile tech</span>
|
|
1331
|
-
<span class="tag">/profile tech setup</span>
|
|
1332
|
-
<span class="tag">/profile fullstack</span>
|
|
1333
|
-
<span class="tag">/profile be-fe</span>
|
|
1334
|
-
</div>
|
|
1335
|
-
<p>Áp profile trực tiếp hoặc mở select option để chọn profile/tech stack. Output ngắn, không yêu cầu model giải thích dài.</p>
|
|
1336
|
-
</article>
|
|
1337
|
-
<article class="card">
|
|
1338
|
-
<h3>Implementation workflow</h3>
|
|
1339
|
-
<div class="tag-list">
|
|
1340
|
-
<span class="tag">/task</span>
|
|
1341
|
-
<span class="tag">/plan</span>
|
|
1342
|
-
<span class="tag">/review</span>
|
|
1343
|
-
<span class="tag">/scout</span>
|
|
1344
|
-
<span class="tag">/discuss</span>
|
|
1345
|
-
</div>
|
|
1346
|
-
<p>Gói sẵn read context, task contract, implementation, verify evidence và final handoff.</p>
|
|
1347
|
-
</article>
|
|
1348
|
-
<article class="card">
|
|
1349
|
-
<h3>Git handoff</h3>
|
|
1350
|
-
<div class="tag-list">
|
|
1351
|
-
<span class="tag">/commit</span>
|
|
1352
|
-
<span class="tag">/pr</span>
|
|
1353
|
-
<span class="tag">git status</span>
|
|
1354
|
-
<span class="tag">git diff</span>
|
|
1355
|
-
</div>
|
|
1356
|
-
<p>Không cần namespace <span class="inline-code">/git</span>. Commit/PR đi qua shell guard; push và stage rộng như <span class="inline-code">git add -A</span> cần xác nhận.</p>
|
|
1357
|
-
</article>
|
|
1358
|
-
<article class="card">
|
|
1359
|
-
<h3>Fresh sessions</h3>
|
|
1360
|
-
<div class="tag-list">
|
|
1361
|
-
<span class="tag">/fresh-task</span>
|
|
1362
|
-
<span class="tag">/fresh-scout</span>
|
|
1363
|
-
<span class="tag">/fresh-be-to-fe</span>
|
|
1364
|
-
</div>
|
|
1365
|
-
<p>Dùng khi context đã nặng hoặc cần một session sạch cho workflow mới.</p>
|
|
1366
|
-
</article>
|
|
1367
|
-
<article class="card">
|
|
1368
|
-
<h3>MCP</h3>
|
|
1369
|
-
<div class="tag-list">
|
|
1370
|
-
<span class="tag">/mcp</span>
|
|
1371
|
-
<span class="tag">piagent-mcp</span>
|
|
1372
|
-
</div>
|
|
1373
|
-
<p>Kiểm tra và cấu hình tool servers theo preset core, popular hoặc design.</p>
|
|
1374
|
-
</article>
|
|
1375
|
-
<article class="card">
|
|
1376
|
-
<h3>Subagents</h3>
|
|
1377
|
-
<div class="tag-list">
|
|
1378
|
-
<span class="tag">/subagents-doctor</span>
|
|
1379
|
-
<span class="tag">/subagents-models</span>
|
|
1380
|
-
<span class="tag">/subagents-fleet</span>
|
|
1381
|
-
<span class="tag">/subagent-cost</span>
|
|
1382
|
-
</div>
|
|
1383
|
-
<p>Kiểm tra runtime, model routing, background runs và cost. Daily flow vẫn solo-first; subagents dùng cho scout/planning/review độc lập.</p>
|
|
1384
|
-
</article>
|
|
1385
|
-
</div>
|
|
1386
|
-
</section>
|
|
1387
|
-
|
|
1388
|
-
<section class="section" id="workflow">
|
|
1389
|
-
<p class="section-kicker">Workflows</p>
|
|
1390
|
-
<h2>Các luồng chính</h2>
|
|
1391
|
-
<p class="section-lead">
|
|
1392
|
-
Chọn workflow theo intent thay vì mô tả lại policy trong prompt. Cách này giảm context lặp và giữ output tập trung hơn.
|
|
1393
|
-
</p>
|
|
1394
|
-
|
|
1395
|
-
<div class="callout ok-callout">
|
|
1396
|
-
<strong>Git trong Pi Agent</strong>
|
|
1397
|
-
<p>Không có namespace <span class="inline-code">/git</span> riêng. Dùng <span class="inline-code">/commit</span> để commit local đã review, dùng <span class="inline-code">/pr</span> để chuẩn bị PR. Các hành động như <span class="inline-code">git push</span> hoặc stage rộng <span class="inline-code">git add -A</span> vẫn cần operator xác nhận.</p>
|
|
1398
|
-
</div>
|
|
1399
|
-
|
|
1400
|
-
<div class="callout">
|
|
1401
|
-
<strong>Solo-first orchestration</strong>
|
|
1402
|
-
<p>Dùng <span class="inline-code">/piagent-orchestration</span> để xem mode, max subagents, review lenses, Field Guide và writer policy. Mặc định parent agent tự làm chính; subagents chỉ dùng khi scout, planning hoặc review có lane độc lập đáng token.</p>
|
|
1403
|
-
</div>
|
|
1404
|
-
|
|
1405
|
-
<div class="command-grid">
|
|
1406
|
-
<article class="command-card">
|
|
1407
|
-
<header><span>Implementation bounded</span><button class="clip-btn" data-clip="/task Fix the failing checkout test and verify.">Lấy lệnh</button></header>
|
|
1408
|
-
<pre><code>/task Fix the failing checkout test and verify.</code></pre>
|
|
1409
|
-
</article>
|
|
1410
|
-
<article class="command-card">
|
|
1411
|
-
<header><span>Read-only scout</span><button class="clip-btn" data-clip="/scout Map the auth flow and risk areas.">Lấy lệnh</button></header>
|
|
1412
|
-
<pre><code>/scout Map the auth flow and risk areas.</code></pre>
|
|
1413
|
-
</article>
|
|
1414
|
-
<article class="command-card">
|
|
1415
|
-
<header><span>Plan trước khi code</span><button class="clip-btn" data-clip="/plan Add multi-tenant billing support.">Lấy lệnh</button></header>
|
|
1416
|
-
<pre><code>/plan Add multi-tenant billing support.</code></pre>
|
|
1417
|
-
</article>
|
|
1418
|
-
<article class="command-card">
|
|
1419
|
-
<header><span>Review diff</span><button class="clip-btn" data-clip="/review">Lấy lệnh</button></header>
|
|
1420
|
-
<pre><code>/review</code></pre>
|
|
1421
|
-
</article>
|
|
1422
|
-
<article class="command-card">
|
|
1423
|
-
<header><span>Commit local có guard</span><button class="clip-btn" data-clip="/commit "feat: add guarded git workflow"">Lấy lệnh</button></header>
|
|
1424
|
-
<pre><code>/commit "feat: add guarded git workflow"</code></pre>
|
|
1425
|
-
</article>
|
|
1426
|
-
<article class="command-card">
|
|
1427
|
-
<header><span>Chuẩn bị pull request</span><button class="clip-btn" data-clip="/pr "Prepare PR for guarded git workflow"">Lấy lệnh</button></header>
|
|
1428
|
-
<pre><code>/pr "Prepare PR for guarded git workflow"</code></pre>
|
|
1429
|
-
</article>
|
|
1430
|
-
<article class="command-card">
|
|
1431
|
-
<header><span>Backend spec sang frontend</span><button class="clip-btn" data-clip="/be-to-fe Implement frontend support for the new user status endpoint.">Lấy lệnh</button></header>
|
|
1432
|
-
<pre><code>/profile be-readonly-fe
|
|
1433
|
-
/be-to-fe Implement frontend support for the new user status endpoint.</code></pre>
|
|
1434
|
-
</article>
|
|
1435
|
-
<article class="command-card">
|
|
1436
|
-
<header><span>Cải thiện platform</span><button class="clip-btn" data-clip="/platform-improve Harden command docs and run verification.">Lấy lệnh</button></header>
|
|
1437
|
-
<pre><code>/platform-improve Harden command docs and run verification.</code></pre>
|
|
1438
|
-
</article>
|
|
1439
|
-
</div>
|
|
1440
|
-
</section>
|
|
1441
|
-
|
|
1442
|
-
<section class="section" id="runtime">
|
|
1443
|
-
<p class="section-kicker">Runtime tools</p>
|
|
1444
|
-
<h2>Terminal commands cho operator</h2>
|
|
1445
|
-
<p class="section-lead">
|
|
1446
|
-
Nhóm command này chạy ngoài slash command, dùng cho setup, doctor, benchmark, capability lock và automation.
|
|
1447
|
-
</p>
|
|
1448
|
-
|
|
1449
|
-
<div class="command-grid">
|
|
1450
|
-
<article class="command-card">
|
|
1451
|
-
<header><span>Setup global</span><button class="clip-btn" data-clip="piagent-setup --mcp-preset core --subagents-preset safe">Lấy lệnh</button></header>
|
|
1452
|
-
<pre><code>piagent-setup --mcp-preset core --subagents-preset safe</code></pre>
|
|
1453
|
-
</article>
|
|
1454
|
-
<article class="command-card">
|
|
1455
|
-
<header><span>Full update</span><button class="clip-btn" data-clip="npm install -g --ignore-scripts @earendil-works/pi-coding-agent@0.82.0 npm install -g --ignore-scripts @piagent/platform@X.Y.Z piagent-install --stable --dry-run piagent-install --stable">Lấy lệnh</button></header>
|
|
1456
|
-
<pre><code>npm install -g --ignore-scripts @earendil-works/pi-coding-agent@0.82.0
|
|
1457
|
-
npm install -g --ignore-scripts @piagent/platform@X.Y.Z
|
|
1458
|
-
piagent-install --stable --dry-run
|
|
1459
|
-
piagent-install --stable</code></pre>
|
|
1460
|
-
</article>
|
|
1461
|
-
<article class="command-card">
|
|
1462
|
-
<header><span>Pi package only</span><button class="clip-btn" data-clip="piagent-install --version vX.Y.Z --resolve-tag --dry-run piagent-install --version vX.Y.Z --resolve-tag">Lấy lệnh</button></header>
|
|
1463
|
-
<pre><code>piagent-install --version vX.Y.Z --resolve-tag --dry-run
|
|
1464
|
-
piagent-install --version vX.Y.Z --resolve-tag</code></pre>
|
|
1465
|
-
</article>
|
|
1466
|
-
<article class="command-card">
|
|
1467
|
-
<header><span>Init project</span><button class="clip-btn" data-clip="piagent-init /path/to/project">Lấy lệnh</button></header>
|
|
1468
|
-
<pre><code>piagent-init /path/to/project</code></pre>
|
|
1469
|
-
</article>
|
|
1470
|
-
<article class="command-card">
|
|
1471
|
-
<header><span>Doctor</span><button class="clip-btn" data-clip="piagent-doctor /path/to/project">Lấy lệnh</button></header>
|
|
1472
|
-
<pre><code>piagent-doctor /path/to/project</code></pre>
|
|
1473
|
-
</article>
|
|
1474
|
-
<article class="command-card">
|
|
1475
|
-
<header><span>Trusted run</span><button class="clip-btn" data-clip="piagent-auto --full-access -p "Run the trusted local benchmark suite."">Lấy lệnh</button></header>
|
|
1476
|
-
<pre><code>piagent-auto --read-only -p "Scout payment mapping. Do not edit source."
|
|
1477
|
-
piagent-auto --full-access -p "Run the trusted local benchmark suite."</code></pre>
|
|
1478
|
-
</article>
|
|
1479
|
-
<article class="command-card">
|
|
1480
|
-
<header><span>Capabilities</span><button class="clip-btn" data-clip="piagent-capabilities catalog --check piagent-capabilities doctor --profile .pi/piagent-profile.json">Lấy lệnh</button></header>
|
|
1481
|
-
<pre><code>piagent-capabilities catalog --check
|
|
1482
|
-
piagent-capabilities doctor --profile .pi/piagent-profile.json</code></pre>
|
|
1483
|
-
</article>
|
|
1484
|
-
<article class="command-card">
|
|
1485
|
-
<header><span>Verification</span><button class="clip-btn" data-clip="npm run verify npm test npm run typecheck">Lấy lệnh</button></header>
|
|
1486
|
-
<pre><code>npm run verify
|
|
1487
|
-
npm test
|
|
1488
|
-
npm run typecheck</code></pre>
|
|
1489
|
-
</article>
|
|
1490
|
-
</div>
|
|
1491
|
-
</section>
|
|
1492
|
-
|
|
1493
|
-
<section class="section" id="team">
|
|
1494
|
-
<p class="section-kicker">Team usage</p>
|
|
1495
|
-
<h2>Team nên dùng như một chuẩn vận hành</h2>
|
|
1496
|
-
<p class="section-lead">
|
|
1497
|
-
Mỗi repo chỉ cần link package, chọn profile đúng và giữ tài liệu project-specific ở repo của dự án đó. Core vẫn sạch, nhỏ và audit được.
|
|
1498
|
-
</p>
|
|
1499
|
-
|
|
1500
|
-
<div class="split">
|
|
1501
|
-
<article class="card">
|
|
1502
|
-
<h3>Việc nên làm</h3>
|
|
1503
|
-
<p>Chạy <span class="inline-code">/onboard-project</span>, áp <span class="inline-code">/profile auto</span>, dùng workflow command, verify thật và ghi blockers rõ ràng.</p>
|
|
1504
|
-
</article>
|
|
1505
|
-
<article class="card">
|
|
1506
|
-
<h3>Việc nên tránh</h3>
|
|
1507
|
-
<p>Đưa token, auth file, cache, session, private examples hoặc business logic riêng vào core package public.</p>
|
|
1508
|
-
</article>
|
|
1509
|
-
</div>
|
|
1510
|
-
|
|
1511
|
-
<div class="callout ok-callout">
|
|
1512
|
-
<strong>Chuẩn handoff</strong>
|
|
1513
|
-
<p>Final response nên nói ngắn: đã đổi gì, verify nào đã chạy, có dùng subagent không, và còn rủi ro hoặc next step nào cần người review.</p>
|
|
1514
|
-
</div>
|
|
1515
|
-
|
|
1516
|
-
<div class="callout">
|
|
1517
|
-
<strong>Release docs gate</strong>
|
|
1518
|
-
<p>Version docs mới chỉ được promote lên Vercel sau khi tag-triggered CI pass và stable dry-run resolve đúng commit SHA. Phải promote đúng tagged commit, không chèn merge commit hay docs-only edit khác. Domain canonical là <span class="inline-code">piagent.io.vn</span>; apex phải là Vercel primary và <span class="inline-code">www</span> redirect về apex.</p>
|
|
1519
|
-
</div>
|
|
1520
|
-
</section>
|
|
1521
|
-
|
|
1522
|
-
<footer class="footer">
|
|
1523
|
-
<p>Pi Agent Platform docs · static HTML · governed agent workflow</p>
|
|
1524
|
-
<div class="footer-links" aria-label="External links">
|
|
1525
|
-
<a href="https://piagent.io.vn" target="_blank" rel="noopener noreferrer">piagent.io.vn</a>
|
|
1526
|
-
<a href="https://github.com/Vt-mmm/piagent" target="_blank" rel="noopener noreferrer">GitHub repository</a>
|
|
1527
|
-
<a href="https://www.facebook.com/vinhtam0544/" target="_blank" rel="noopener noreferrer">Facebook profile</a>
|
|
1528
|
-
</div>
|
|
1529
|
-
</footer>
|
|
108
|
+
<p><span class="inline-code">piagent-setup</span> cài đúng Pi Coding Agent host mà release này pin, cài Pi package, khởi tạo thư mục hiện tại, rồi chạy doctor. Nó cũng cài MCP baseline và subagents — bỏ qua bằng <span class="inline-code">--no-mcp</span>, <span class="inline-code">--no-subagents</span> hoặc <span class="inline-code">--global-only</span>. Chi tiết ở <a href="/quickstart">Quickstart</a>.</p>
|
|
109
|
+
</section>
|
|
110
|
+
|
|
111
|
+
<section class="section">
|
|
112
|
+
<h2 id="bat-dau-tu-dau">Bắt đầu từ đâu</h2>
|
|
113
|
+
<div class="card-grid">
|
|
114
|
+
<a class="doc-card" href="/quickstart">
|
|
115
|
+
<span class="card-kicker">Get started</span>
|
|
116
|
+
<h3>Quickstart</h3>
|
|
117
|
+
<p>Cài, mở repo, onboard context, chọn profile và permission, chạy task đầu tiên, verify trước khi handoff.</p>
|
|
118
|
+
</a>
|
|
119
|
+
<a class="doc-card" href="/scope">
|
|
120
|
+
<span class="card-kicker">Get started</span>
|
|
121
|
+
<h3>Phạm vi platform</h3>
|
|
122
|
+
<p>Vì sao repo này tồn tại khi đã có agent coding tổng quát, và ranh giới nó nhận về mình.</p>
|
|
123
|
+
</a>
|
|
124
|
+
<a class="doc-card" href="/profiles">
|
|
125
|
+
<span class="card-kicker">Build</span>
|
|
126
|
+
<h3>Project profile</h3>
|
|
127
|
+
<p>Chọn đường ray cho repo: protected path, verify command, capability được cấp.</p>
|
|
128
|
+
</a>
|
|
129
|
+
<a class="doc-card" href="/mcp">
|
|
130
|
+
<span class="card-kicker">MCP</span>
|
|
131
|
+
<h3>MCP</h3>
|
|
132
|
+
<p>Bốn layer config, preset đã pin, quản lý server, trạng thái auth, và approval gate cho server đến từ repo.</p>
|
|
133
|
+
</a>
|
|
134
|
+
<a class="doc-card" href="/security">
|
|
135
|
+
<span class="card-kicker">Operate</span>
|
|
136
|
+
<h3>Security model</h3>
|
|
137
|
+
<p>Policy enforcement layer chứ không phải OS sandbox — nói rõ chặn được gì và không chặn được gì.</p>
|
|
138
|
+
</a>
|
|
139
|
+
<a class="doc-card" href="/commands">
|
|
140
|
+
<span class="card-kicker">Build</span>
|
|
141
|
+
<h3>Command catalog</h3>
|
|
142
|
+
<p>Slash command và terminal command, nhóm theo việc cần làm.</p>
|
|
143
|
+
</a>
|
|
144
|
+
</div>
|
|
145
|
+
</section>
|
|
146
|
+
|
|
147
|
+
<section class="section">
|
|
148
|
+
<h2 id="ba-nhom">Tài liệu chia làm ba nhóm</h2>
|
|
149
|
+
<div class="split">
|
|
150
|
+
<div class="card">
|
|
151
|
+
<h3 id="get-started-nhom">Get started</h3>
|
|
152
|
+
<p>Dành cho người chưa chạy lần nào: cài, quickstart, và vị trí của platform so với các agent CLI khác.</p>
|
|
153
|
+
</div>
|
|
154
|
+
<div class="card">
|
|
155
|
+
<h3 id="build-nhom">Build</h3>
|
|
156
|
+
<p>Dùng hằng ngày: profile, permission, command, workflow — và MCP tách riêng vì có bề mặt lệnh của nó.</p>
|
|
157
|
+
</div>
|
|
158
|
+
<div class="card">
|
|
159
|
+
<h3 id="operate-nhom">Operate</h3>
|
|
160
|
+
<p>Người vận hành và review: security model, kiến trúc repo, terminal tool, cách team dùng như một chuẩn.</p>
|
|
161
|
+
</div>
|
|
162
|
+
</div>
|
|
163
|
+
</section>
|
|
164
|
+
<nav class="pager" aria-label="Trang kế tiếp">
|
|
165
|
+
<a class="pager-next" href="/quickstart">
|
|
166
|
+
<span class="pager-label">Tiếp</span>
|
|
167
|
+
<span class="pager-title">Quickstart</span>
|
|
168
|
+
</a>
|
|
169
|
+
</nav>
|
|
170
|
+
|
|
171
|
+
<footer class="footer">
|
|
172
|
+
<p>Pi Agent Platform docs · static HTML · governed agent workflow</p>
|
|
173
|
+
<div class="footer-links" aria-label="External links">
|
|
174
|
+
<a href="https://piagent.io.vn" target="_blank" rel="noopener noreferrer">piagent.io.vn</a>
|
|
175
|
+
<a href="https://github.com/Vt-mmm/piagent" target="_blank" rel="noopener noreferrer">GitHub repository</a>
|
|
176
|
+
<a href="https://www.facebook.com/vinhtam0544/" target="_blank" rel="noopener noreferrer">Facebook profile</a>
|
|
177
|
+
</div>
|
|
178
|
+
</footer>
|
|
1530
179
|
</div>
|
|
1531
180
|
</main>
|
|
1532
|
-
</div>
|
|
1533
|
-
|
|
1534
|
-
<script>
|
|
1535
|
-
const sidebar = document.querySelector("[data-sidebar]");
|
|
1536
|
-
const menuButton = document.querySelector("[data-menu]");
|
|
1537
|
-
const filterInput = document.querySelector("[data-filter]");
|
|
1538
|
-
const navLinks = Array.from(document.querySelectorAll(".nav-link"));
|
|
1539
|
-
const sections = navLinks
|
|
1540
|
-
.map((link) => document.querySelector(link.getAttribute("href")))
|
|
1541
|
-
.filter(Boolean);
|
|
1542
|
-
|
|
1543
|
-
menuButton?.addEventListener("click", () => {
|
|
1544
|
-
sidebar?.classList.toggle("open");
|
|
1545
|
-
});
|
|
1546
|
-
|
|
1547
|
-
navLinks.forEach((link) => {
|
|
1548
|
-
link.addEventListener("click", () => sidebar?.classList.remove("open"));
|
|
1549
|
-
});
|
|
1550
181
|
|
|
1551
|
-
|
|
1552
|
-
|
|
1553
|
-
|
|
1554
|
-
|
|
1555
|
-
|
|
1556
|
-
});
|
|
1557
|
-
});
|
|
1558
|
-
|
|
1559
|
-
const observer = new IntersectionObserver(
|
|
1560
|
-
(entries) => {
|
|
1561
|
-
const visible = entries
|
|
1562
|
-
.filter((entry) => entry.isIntersecting)
|
|
1563
|
-
.sort((a, b) => b.intersectionRatio - a.intersectionRatio)[0];
|
|
1564
|
-
if (!visible) return;
|
|
1565
|
-
navLinks.forEach((link) => {
|
|
1566
|
-
link.classList.toggle("active", link.getAttribute("href") === `#${visible.target.id}`);
|
|
1567
|
-
});
|
|
1568
|
-
},
|
|
1569
|
-
{ rootMargin: "-18% 0px -68% 0px", threshold: [0.1, 0.35, 0.7] }
|
|
1570
|
-
);
|
|
1571
|
-
|
|
1572
|
-
sections.forEach((section) => observer.observe(section));
|
|
1573
|
-
|
|
1574
|
-
document.querySelectorAll("[data-clip]").forEach((button) => {
|
|
1575
|
-
button.addEventListener("click", async () => {
|
|
1576
|
-
const text = button.getAttribute("data-clip") || "";
|
|
1577
|
-
try {
|
|
1578
|
-
await navigator.clipboard.writeText(text);
|
|
1579
|
-
const old = button.textContent;
|
|
1580
|
-
button.textContent = "Đã lấy";
|
|
1581
|
-
setTimeout(() => {
|
|
1582
|
-
button.textContent = old;
|
|
1583
|
-
}, 1200);
|
|
1584
|
-
} catch {
|
|
1585
|
-
button.textContent = "Chọn lệnh";
|
|
1586
|
-
}
|
|
1587
|
-
});
|
|
1588
|
-
});
|
|
1589
|
-
</script>
|
|
182
|
+
<aside class="toc" aria-label="Mục lục trang">
|
|
183
|
+
<p class="toc-title">Trên trang này</p>
|
|
184
|
+
<nav data-toc></nav>
|
|
185
|
+
</aside>
|
|
186
|
+
</div>
|
|
1590
187
|
</body>
|
|
1591
188
|
</html>
|