File tree Expand file tree Collapse file tree
Expand file tree Collapse file tree Original file line number Diff line number Diff line change 1+ ---
2+ import { LinkButton } from " @astrojs/starlight/components" ;
3+
4+ interface CommunityThread {
5+ title: string ;
6+ href: string ;
7+ meta: string ;
8+ summary: string ;
9+ }
10+
11+ interface CommunityInsight {
12+ title: string ;
13+ summary: string ;
14+ }
15+
16+ interface Props {
17+ intro: string ;
18+ threads: CommunityThread [];
19+ insights: CommunityInsight [];
20+ }
21+
22+ const { intro, threads, insights } = Astro .props ;
23+ ---
24+
25+ <section id =" community" class =" overview-section" >
26+ <div class =" overview-grid overview-grid--community" >
27+ <div class =" overview-prose" >
28+ <p class =" section-label" >社区讨论</p >
29+ <h2 >社区材料的重要性,在于它暴露了官方文章会压缩掉的真实成本。</h2 >
30+ <p >{ intro } </p >
31+ <div class =" thread-list not-content" >
32+ { threads .map ((item ) => (
33+ <article class = " thread-card" >
34+ <p class = " thread-meta" >{ item .meta } </p >
35+ <h3 ><a href = { item .href } >{ item .title } </a ></h3 >
36+ <p >{ item .summary } </p >
37+ </article >
38+ ))}
39+ </div >
40+ <LinkButton href =" ./community/" variant =" secondary" icon =" right-arrow" >
41+ 查看社区讨论与实践观察
42+ </LinkButton >
43+ </div >
44+
45+ <div class =" community-insights not-content" >
46+ <h3 >工程观察</h3 >
47+ { insights .map ((item ) => (
48+ <div class = " insight-item" >
49+ <h4 >{ item .title } </h4 >
50+ <p >{ item .summary } </p >
51+ </div >
52+ ))}
53+ </div >
54+ </div >
55+ </section >
Original file line number Diff line number Diff line change 1+ ---
2+ import { LinkButton } from " @astrojs/starlight/components" ;
3+ ---
4+
5+ <section id =" definition" class =" overview-section overview-section--definition" >
6+ <div class =" overview-grid" >
7+ <div class =" overview-prose" >
8+ <p class =" section-label" >定义优先</p >
9+ <h2 >Harness engineering 研究的,是 agent 外层系统本身。</h2 >
10+ <p class =" lead" >
11+ <strong >Harness engineering</strong > 指的是那层被工程化出来的外壳系统:
12+ 它负责约束、编排、验证、恢复,并让 agent 足够可读、可控,能够真正跑进软件工程工作流中。
13+ 模型当然重要,但真正把模型能力变成 durable engineering surface 的,是 harness。
14+ </p >
15+ <p >
16+ 这意味着真正值得研究的中心对象,既不是模型本身,也不是 prompt 本身,而是模型外面的整套系统:
17+ 任务进入方式、工具表面、执行边界、记忆层、审批、评审纪律与交接结构。
18+ </p >
19+ </div >
20+
21+ <aside id =" boundary" class =" boundary-panel not-content" >
22+ <p class =" section-label" >它不是什么</p >
23+ <ul >
24+ <li >不只是单次会话里的 prompt engineering。</li >
25+ <li >不只是某个 coding agent 产品或 IDE 插件。</li >
26+ <li >不只是一个提供抽象 orchestration primitives 的 agent framework。</li >
27+ <li >不只是画出了流程,但没有 durable execution surface 的 workflow 图。</li >
28+ </ul >
29+ <LinkButton href =" ./definition/" variant =" secondary" icon =" right-arrow" >
30+ 查看完整定义
31+ </LinkButton >
32+ </aside >
33+ </div >
34+ </section >
Original file line number Diff line number Diff line change 1+ ---
2+ import { LinkButton } from " @astrojs/starlight/components" ;
3+
4+ interface LandscapeRow {
5+ name: string ;
6+ href: string ;
7+ intro: string ;
8+ category: string ;
9+ runtimeForm: string ;
10+ starsBadge? : string ;
11+ }
12+
13+ interface Props {
14+ rows: LandscapeRow [];
15+ }
16+
17+ const { rows } = Astro .props ;
18+ ---
19+
20+ <section id =" landscape" class =" overview-section" >
21+ <div class =" overview-section-head" >
22+ <div class =" overview-prose" >
23+ <p class =" section-label" >当前生态</p >
24+ <h2 >这里列的是当前较为流行的 harness 及类 harness 套件。</h2 >
25+ <p >
26+ 下面这张表只是一道切面。它的目的不是替你排名,而是帮助读者学会怎么读生态:按 host layer、
27+ harness layer、methodology layer 与 orchestration layer 去看。
28+ </p >
29+ <p >
30+ 这次额外加了一列“运行形态”,用来区分一个系统究竟是直接作为 agent 宿主存在,还是主要寄生在某个
31+ coding agent 里运行,抑或自己带独立调度外壳。
32+ </p >
33+ </div >
34+ <LinkButton href =" ./landscape/" variant =" minimal" icon =" right-arrow" >
35+ 查看完整生态
36+ </LinkButton >
37+ </div >
38+
39+ <div class =" table-wrap not-content" >
40+ <table class =" landscape-table" >
41+ <thead >
42+ <tr >
43+ <th >套件</th >
44+ <th >简介</th >
45+ <th >分类</th >
46+ <th >运行形态</th >
47+ </tr >
48+ </thead >
49+ <tbody >
50+ { rows .map ((row ) => (
51+ <tr >
52+ <td >
53+ <div class = " suite-cell" >
54+ <a href = { row .href } >{ row .name } </a >
55+ { row .starsBadge && (
56+ <img
57+ src = { row .starsBadge }
58+ alt = { ` ${row .name } GitHub stars ` }
59+ class = " stars-badge"
60+ loading = " lazy"
61+ />
62+ )}
63+ </div >
64+ </td >
65+ <td >{ row .intro } </td >
66+ <td >{ row .category } </td >
67+ <td >{ row .runtimeForm } </td >
68+ </tr >
69+ ))}
70+ </tbody >
71+ </table >
72+ </div >
73+ </section >
Original file line number Diff line number Diff line change 1+ ---
2+ interface NavItem {
3+ href: string ;
4+ label: string ;
5+ }
6+
7+ interface Props {
8+ items: NavItem [];
9+ }
10+
11+ const { items } = Astro .props ;
12+ ---
13+
14+ <div class =" overview-nav-shell not-content" >
15+ <nav class =" overview-nav" aria-label =" Homepage sections" >
16+ { items .map ((item ) => (
17+ <a href = { item .href } >{ item .label } </a >
18+ ))}
19+ </nav >
20+ </div >
Original file line number Diff line number Diff line change 1+ ---
2+ import { CardGrid , LinkCard } from " @astrojs/starlight/components" ;
3+
4+ interface NextLink {
5+ title: string ;
6+ description: string ;
7+ href: string ;
8+ }
9+
10+ interface Props {
11+ items: NextLink [];
12+ }
13+
14+ const { items } = Astro .props ;
15+ ---
16+
17+ <section id =" next" class =" overview-section overview-section--next" >
18+ <div class =" overview-prose" >
19+ <p class =" section-label" >下一步</p >
20+ <h2 >如果这个词现在已经清楚一些了,下一步就应该按问题去读,而不是按 hype 去追。</h2 >
21+ </div >
22+
23+ <CardGrid >
24+ { items .map ((item ) => (
25+ <LinkCard title = { item .title } description = { item .description } href = { item .href } />
26+ ))}
27+ </CardGrid >
28+ </section >
Original file line number Diff line number Diff line change 1+ ---
2+ import { LinkButton } from " @astrojs/starlight/components" ;
3+
4+ interface TaxonomyItem {
5+ title: string ;
6+ description: string ;
7+ note: string ;
8+ href: string ;
9+ }
10+
11+ interface Props {
12+ items: TaxonomyItem [];
13+ }
14+
15+ const { items } = Astro .props ;
16+ ---
17+
18+ <section id =" taxonomy" class =" overview-section" >
19+ <div class =" overview-section-head" >
20+ <div class =" overview-prose" >
21+ <p class =" section-label" >分类</p >
22+ <h2 >如果不先分清类型,后面的比较很容易全都混在一起。</h2 >
23+ <p >
24+ 这一页里的套件看起来都和 agent 有关,但它们处理的问题并不在同一层。
25+ 有些是在提供原生工作面,有些是在宿主之上补控制层,有些则更偏方法论或长时编排。
26+ 先把它们放回各自的位置,后面的分析、对比和选择才会变得清楚。
27+ </p >
28+ <p >
29+ 这组分类的目的,不是替每个项目发明新的官方身份,而是帮助读者先判断自己正在比较哪一层:
30+ 是直接执行工程任务的 agent 宿主,是覆盖在其上的控制层,还是方法论与编排层。
31+ 只有先分清层次,后面的比较才不会把不同问题混成同一种产品选择。
32+ </p >
33+ </div >
34+ <LinkButton href =" ./distinction/" variant =" minimal" icon =" right-arrow" >
35+ 查看完整分类
36+ </LinkButton >
37+ </div >
38+
39+ <div class =" taxonomy-grid not-content" >
40+ { items .map ((item ) => (
41+ <article class = " taxonomy-card" >
42+ <h3 >{ item .title } </h3 >
43+ <p >{ item .description } </p >
44+ <p class = " taxonomy-note" >{ item .note } </p >
45+ <a href = { item .href } >查看完整分类</a >
46+ </article >
47+ ))}
48+ </div >
49+ </section >
Original file line number Diff line number Diff line change 1+ ---
2+ import { LinkButton } from " @astrojs/starlight/components" ;
3+
4+ interface TimelineItem {
5+ date: string ;
6+ title: string ;
7+ source: string ;
8+ summary: string ;
9+ href: string ;
10+ }
11+
12+ interface Props {
13+ items: TimelineItem [];
14+ }
15+
16+ const { items } = Astro .props ;
17+ ---
18+
19+ <section id =" timeline" class =" overview-section" >
20+ <div class =" overview-section-head" >
21+ <div class =" overview-prose" >
22+ <p class =" section-label" >关键文章</p >
23+ <h2 >只有看到它是怎么形成的,这个词才会真正变清楚。</h2 >
24+ <p >
25+ 这不是一组随便拼起来的文章。时间线展示的是讨论如何从一般 agent design,转向工具表面,再到
26+ long-running harness,最后收敛成更清晰的工程抽象。
27+ </p >
28+ </div >
29+ <LinkButton href =" ./timeline/" variant =" minimal" icon =" right-arrow" >
30+ 查看完整时间线
31+ </LinkButton >
32+ </div >
33+
34+ <div class =" timeline-list not-content" >
35+ { items .map ((item ) => (
36+ <article class = " timeline-item" >
37+ <div class = " timeline-date" >{ item .date } </div >
38+ <div class = " timeline-copy" >
39+ <h3 >{ item .title } </h3 >
40+ <p class = " timeline-source" >{ item .source } </p >
41+ <p >{ item .summary } </p >
42+ <a href = { item .href } >看详细时间线</a >
43+ </div >
44+ </article >
45+ ))}
46+ </div >
47+ </section >
Original file line number Diff line number Diff line change 1+ ---
2+ import { CardGrid , LinkCard } from " @astrojs/starlight/components" ;
3+
4+ interface TopicItem {
5+ title: string ;
6+ description: string ;
7+ href: string ;
8+ }
9+
10+ interface Props {
11+ items: TopicItem [];
12+ }
13+
14+ const { items } = Astro .props ;
15+ ---
16+
17+ <section id =" topics" class =" overview-section" >
18+ <div class =" overview-section-head" >
19+ <div class =" overview-prose" >
20+ <p class =" section-label" >研究专题</p >
21+ <h2 >要真正理解这个课题,还需要进入可运行专题。</h2 >
22+ <p >
23+ 综述页提供的是定义、边界、分类与比较框架;再往下,就应该进入可运行材料,观察这些机制在具体系统里如何落地。
24+ </p >
25+ </div >
26+ </div >
27+
28+ <CardGrid >
29+ { items .map ((topic ) => (
30+ <LinkCard title = { topic .title } description = { topic .description } href = { topic .href } />
31+ ))}
32+ </CardGrid >
33+ </section >
Original file line number Diff line number Diff line change 1+ ---
2+ ---
3+
4+ <section id =" why" class =" overview-section" >
5+ <div class =" overview-prose" >
6+ <p class =" section-label" >为什么值得单独研究</p >
7+ <h2 >当模型能力足够强,瓶颈就开始向外移动。</h2 >
8+ <p >
9+ Harness engineering 值得被单独当成一个研究类别,是因为很多实际失败已经不再只是模型不够强。
10+ 它们更多来自边界太弱、验证不足、续跑不可靠、任务状态不可读,以及人类 steering 与
11+ agent execution 之间责任分界不清。
12+ </p >
13+ </div >
14+
15+ <div class =" reason-grid not-content" >
16+ <div class =" reason-card" >
17+ <h3 >约束</h3 >
18+ <p >
19+ 真实工作需要的是能跨会话延续的 permissions、guardrails、checks 与 architecture boundaries。
20+ </p >
21+ </div >
22+ <div class =" reason-card" >
23+ <h3 >恢复</h3 >
24+ <p >
25+ 长任务成败更多取决于干净交接、可恢复续跑与进度可读性,而不只是局部代码生成质量。
26+ </p >
27+ </div >
28+ <div class =" reason-card" >
29+ <h3 >协调</h3 >
30+ <p >
31+ 控制面经常比代码面更重。规划、委派、评审与综合,本身都会变成系统的一部分。
32+ </p >
33+ </div >
34+ </div >
35+ </section >
You can’t perform that action at this time.
0 commit comments