@heretek-ai/epistemic-swarm 0.7.17 → 0.7.18
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/.agents/skills/brainstorming/SKILL.md +6 -0
- package/.agents/skills/code_audit/SKILL.md +6 -0
- package/.agents/skills/darkharvest/SKILL.md +6 -0
- package/.agents/skills/epistemic_search/SKILL.md +6 -0
- package/.agents/skills/factory/SKILL.md +6 -0
- package/.agents/skills/grilling/SKILL.md +6 -0
- package/.agents/skills/oss_scout/SKILL.md +6 -0
- package/.agents/skills/research_cache/SKILL.md +6 -0
- package/.agents/skills/swarm_config/SKILL.md +6 -0
- package/.claude-plugin/plugin.json +1 -1
- package/package.json +2 -2
- package/plugins/antigravity/README.md +50 -15
- package/plugins/antigravity/agents/alpha-thesis.md +35 -5
- package/plugins/antigravity/agents/beta-antithesis.md +34 -6
- package/plugins/antigravity/agents/brainstormer.md +26 -6
- package/plugins/antigravity/agents/code-auditor.md +28 -0
- package/plugins/antigravity/agents/darkharvester.md +30 -0
- package/plugins/antigravity/agents/epistemic-auditor.md +27 -4
- package/plugins/antigravity/agents/manager.md +26 -0
- package/plugins/antigravity/agents/oss-scout.md +27 -0
- package/plugins/antigravity/agents/programmer.md +25 -0
- package/plugins/antigravity/agents/qa-a.md +22 -0
- package/plugins/antigravity/agents/qa-b.md +22 -0
- package/plugins/antigravity/antigravity_hooks.py +167 -0
- package/plugins/antigravity/commands/audit.md +10 -0
- package/plugins/antigravity/commands/brainstorming.md +12 -0
- package/plugins/antigravity/commands/darkharvest.md +11 -0
- package/plugins/antigravity/commands/domainexpansion.md +9 -0
- package/plugins/antigravity/commands/factory.md +9 -0
- package/plugins/antigravity/commands/grill.md +9 -0
- package/plugins/antigravity/commands/scout.md +10 -0
- package/plugins/antigravity/commands/swarm-config.md +10 -0
- package/plugins/antigravity/commands/swarm.md +9 -0
- package/plugins/antigravity/hooks.json +34 -13
- package/plugins/antigravity/mcp_config.json +11 -11
- package/plugins/antigravity/mcp_launcher.py +58 -0
- package/plugins/antigravity/plugin.json +7 -17
- package/plugins/antigravity/rules/AGENTS.md +125 -0
- package/plugins/antigravity/rules/epistemic-integrity.md +15 -5
- package/plugins/antigravity/skills/brainstorming/SKILL.md +6 -0
- package/plugins/antigravity/skills/code_audit/SKILL.md +6 -0
- package/plugins/antigravity/skills/darkharvest/SKILL.md +6 -0
- package/plugins/antigravity/skills/epistemic_search/SKILL.md +6 -0
- package/plugins/antigravity/skills/factory/SKILL.md +6 -0
- package/plugins/antigravity/skills/grilling/SKILL.md +6 -0
- package/plugins/antigravity/skills/oss_scout/SKILL.md +6 -0
- package/plugins/antigravity/skills/research_cache/SKILL.md +6 -0
- package/plugins/antigravity/skills/swarm_config/SKILL.md +6 -0
- package/plugins/codex/skills/brainstorming/SKILL.md +6 -0
- package/plugins/codex/skills/code_audit/SKILL.md +6 -0
- package/plugins/codex/skills/darkharvest/SKILL.md +6 -0
- package/plugins/codex/skills/epistemic_search/SKILL.md +6 -0
- package/plugins/codex/skills/factory/SKILL.md +6 -0
- package/plugins/codex/skills/grilling/SKILL.md +6 -0
- package/plugins/codex/skills/oss_scout/SKILL.md +6 -0
- package/plugins/codex/skills/research_cache/SKILL.md +6 -0
- package/plugins/codex/skills/swarm_config/SKILL.md +6 -0
- package/plugins/gemini/skills/brainstorming/SKILL.md +6 -0
- package/plugins/gemini/skills/code_audit/SKILL.md +6 -0
- package/plugins/gemini/skills/darkharvest/SKILL.md +6 -0
- package/plugins/gemini/skills/epistemic_search/SKILL.md +6 -0
- package/plugins/gemini/skills/factory/SKILL.md +6 -0
- package/plugins/gemini/skills/grilling/SKILL.md +6 -0
- package/plugins/gemini/skills/oss_scout/SKILL.md +6 -0
- package/plugins/gemini/skills/research_cache/SKILL.md +6 -0
- package/plugins/gemini/skills/swarm_config/SKILL.md +6 -0
- package/plugins/research-cache/skills/research_cache/hasher.py +25 -3
- package/runner/__pycache__/__init__.cpython-311.pyc +0 -0
- package/runner/__pycache__/auctioneer.cpython-311.pyc +0 -0
- package/runner/__pycache__/auditor_engine.cpython-311.pyc +0 -0
- package/runner/__pycache__/claim_store.cpython-311.pyc +0 -0
- package/runner/__pycache__/claim_witness.cpython-311.pyc +0 -0
- package/runner/__pycache__/darkharvest_claims.cpython-311.pyc +0 -0
- package/runner/__pycache__/errors.cpython-311.pyc +0 -0
- package/runner/__pycache__/living_dossiers.cpython-311.pyc +0 -0
- package/runner/__pycache__/mcp_protocol.cpython-311.pyc +0 -0
- package/runner/__pycache__/mcp_server.cpython-311.pyc +0 -0
- package/runner/__pycache__/path_safety.cpython-311.pyc +0 -0
- package/runner/__pycache__/pcrb.cpython-311.pyc +0 -0
- package/runner/__pycache__/pcrb_verify.cpython-311.pyc +0 -0
- package/runner/__pycache__/preflight.cpython-311.pyc +0 -0
- package/runner/__pycache__/refinement.cpython-311.pyc +0 -0
- package/runner/__pycache__/research_swarm.cpython-311.pyc +0 -0
- package/runner/__pycache__/retrieval_log.cpython-311.pyc +0 -0
- package/runner/__pycache__/schema_validate.cpython-311.pyc +0 -0
- package/runner/__pycache__/schemas.cpython-311.pyc +0 -0
- package/runner/__pycache__/state_machine.cpython-311.pyc +0 -0
- package/runner/antigravity_hooks.py +167 -0
- package/runner/auditor_engine.py +19 -2
- package/runner/darkharvest_claims.py +42 -10
- package/runner/mcp_server.py +212 -60
- package/runner/preflight.py +38 -1
- package/runner/research_swarm.py +106 -8
- package/runner/schema_validate.py +40 -2
- package/runner/schemas.py +335 -0
- package/runner/state_machine.py +28 -2
- package/runner/tests/__pycache__/test_antigravity_plugin.cpython-311.pyc +0 -0
- package/runner/tests/__pycache__/test_auction_order.cpython-311.pyc +0 -0
- package/runner/tests/__pycache__/test_backends.cpython-311.pyc +0 -0
- package/runner/tests/__pycache__/test_bet1_spike.cpython-311.pyc +0 -0
- package/runner/tests/__pycache__/test_claim_store.cpython-311.pyc +0 -0
- package/runner/tests/__pycache__/test_claim_witness.cpython-311.pyc +0 -0
- package/runner/tests/__pycache__/test_claude_plugin.cpython-311.pyc +0 -0
- package/runner/tests/__pycache__/test_config_schema.cpython-311.pyc +0 -0
- package/runner/tests/__pycache__/test_contract_tooling.cpython-311.pyc +0 -0
- package/runner/tests/__pycache__/test_darkharvest_audit.cpython-311.pyc +0 -0
- package/runner/tests/__pycache__/test_domain_packs.cpython-311.pyc +0 -0
- package/runner/tests/__pycache__/test_dossier_contract.cpython-311.pyc +0 -0
- package/runner/tests/__pycache__/test_factory.cpython-311.pyc +0 -0
- package/runner/tests/__pycache__/test_fleet_seam.cpython-311.pyc +0 -0
- package/runner/tests/__pycache__/test_frontier_concurrency.cpython-311.pyc +0 -0
- package/runner/tests/__pycache__/test_frontier_mirror_standalone.cpython-311.pyc +0 -0
- package/runner/tests/__pycache__/test_grounding.cpython-311.pyc +0 -0
- package/runner/tests/__pycache__/test_living_dossiers.cpython-311.pyc +0 -0
- package/runner/tests/__pycache__/test_manifest_concurrency.cpython-311.pyc +0 -0
- package/runner/tests/__pycache__/test_mcp_server.cpython-311.pyc +0 -0
- package/runner/tests/__pycache__/test_opencode_ux.cpython-311.pyc +0 -0
- package/runner/tests/__pycache__/test_opencode_v2_registrars.cpython-311.pyc +0 -0
- package/runner/tests/__pycache__/test_pcrb.cpython-311.pyc +0 -0
- package/runner/tests/__pycache__/test_refinement.cpython-311.pyc +0 -0
- package/runner/tests/__pycache__/test_search_anomaly.cpython-311.pyc +0 -0
- package/runner/tests/__pycache__/test_search_provider.cpython-311.pyc +0 -0
- package/runner/tests/__pycache__/test_search_provider_plugin.cpython-311.pyc +0 -0
- package/runner/tests/__pycache__/test_swarm.cpython-311.pyc +0 -0
- package/runner/tests/__pycache__/test_swarm_config.cpython-311.pyc +0 -0
- package/runner/tests/__pycache__/test_sweep_regressions.cpython-311.pyc +0 -0
- package/runner/tests/__pycache__/test_webcache.cpython-311.pyc +0 -0
- package/runner/tests/fixtures/config_validation_cases.json +216 -0
- package/runner/tests/test_antigravity_plugin.py +206 -0
- package/runner/tests/test_backends.py +113 -0
- package/runner/tests/test_config_schema.py +669 -0
- package/runner/tests/test_darkharvest_audit.py +105 -0
- package/runner/tests/test_search_anomaly.py +65 -0
- package/runner/tests/test_search_provider.py +70 -0
- package/runner/tests/test_swarm_config.py +233 -0
- package/runner/tests/test_webcache.py +49 -0
- package/schemas/config.schema.json +299 -0
- package/schemas/manifest.schema.json +6 -0
- package/scripts/__pycache__/bet1_advisory_spike.cpython-311.pyc +0 -0
- package/scripts/__pycache__/build_adapters.cpython-311.pyc +0 -0
- package/scripts/__pycache__/check_docs.cpython-311.pyc +0 -0
- package/scripts/__pycache__/divergence_experiment.cpython-311.pyc +0 -0
- package/scripts/__pycache__/gen_schemas.cpython-311.pyc +0 -0
- package/scripts/build_adapters.py +131 -1
- package/skills/epistemic_search/scripts/__pycache__/search.cpython-311.pyc +0 -0
- package/skills/epistemic_search/scripts/search.py +26 -5
- package/skills/epistemic_search/scripts/webcache.py +24 -0
- package/skills/grilling/__pycache__/__init__.cpython-311.pyc +0 -0
- package/skills/grilling/__pycache__/socratic_tree.cpython-311.pyc +0 -0
- package/skills/research_cache/__pycache__/__init__.cpython-311.pyc +0 -0
- package/skills/research_cache/__pycache__/hasher.cpython-311.pyc +0 -0
- package/skills/research_cache/hasher.py +25 -3
- package/skills/swarm_config/SKILL.md +76 -1
- package/skills/swarm_config/__init__.py +18 -0
- package/skills/swarm_config/__pycache__/__init__.cpython-311.pyc +0 -0
- package/skills/swarm_config/__pycache__/configure.cpython-311.pyc +0 -0
- package/skills/swarm_config/configure.py +403 -17
|
@@ -0,0 +1,167 @@
|
|
|
1
|
+
#!/usr/bin/env python3
|
|
2
|
+
"""
|
|
3
|
+
Antigravity Lifecycle Hook Interceptor & Epistemic Gate Bridge.
|
|
4
|
+
|
|
5
|
+
Binds Antigravity's lifecycle events (PreToolUse, PreInvocation, PostToolUse, Stop)
|
|
6
|
+
to IUMBTEMS's epistemic evidence verification pipeline.
|
|
7
|
+
|
|
8
|
+
Contract Invariants:
|
|
9
|
+
- Input is received as JSON on stdin (camelCase per Antigravity hook protojson).
|
|
10
|
+
- Output is emitted as JSON on stdout.
|
|
11
|
+
- Zero-failure tolerance: any unexpected internal error falls back safely without
|
|
12
|
+
blocking the agent loop.
|
|
13
|
+
"""
|
|
14
|
+
|
|
15
|
+
import json
|
|
16
|
+
import os
|
|
17
|
+
import sys
|
|
18
|
+
from pathlib import Path
|
|
19
|
+
from typing import Any, Dict
|
|
20
|
+
|
|
21
|
+
|
|
22
|
+
def _get_workspace_dir(payload: Dict[str, Any]) -> Path:
|
|
23
|
+
workspaces = payload.get("workspacePaths", [])
|
|
24
|
+
if workspaces:
|
|
25
|
+
return Path(workspaces[0]).resolve()
|
|
26
|
+
if "IUMBTEMS_WORKSPACE" in os.environ:
|
|
27
|
+
return Path(os.environ["IUMBTEMS_WORKSPACE"]).resolve()
|
|
28
|
+
if "IUMBTEMS_ROOT" in os.environ:
|
|
29
|
+
return Path(os.environ["IUMBTEMS_ROOT"]).resolve()
|
|
30
|
+
curr = Path.cwd().resolve()
|
|
31
|
+
for p in [curr] + list(curr.parents):
|
|
32
|
+
if (p / ".research").exists() or (p / ".git").exists():
|
|
33
|
+
return p
|
|
34
|
+
return curr
|
|
35
|
+
|
|
36
|
+
|
|
37
|
+
def _read_stdin_payload() -> Dict[str, Any]:
|
|
38
|
+
try:
|
|
39
|
+
content = sys.stdin.read()
|
|
40
|
+
if not content.strip():
|
|
41
|
+
return {}
|
|
42
|
+
return json.loads(content)
|
|
43
|
+
except Exception:
|
|
44
|
+
return {}
|
|
45
|
+
|
|
46
|
+
|
|
47
|
+
def handle_pre_tool(payload: Dict[str, Any]) -> Dict[str, Any]:
|
|
48
|
+
"""Intercept ungrounded search/fetch and redirect to epistemic cache tools."""
|
|
49
|
+
tool_call = payload.get("toolCall", {})
|
|
50
|
+
name = str(tool_call.get("name", "")).lower()
|
|
51
|
+
|
|
52
|
+
if "search_web" in name or "websearch" in name:
|
|
53
|
+
return {
|
|
54
|
+
"decision": "deny",
|
|
55
|
+
"reason": (
|
|
56
|
+
"Intercepted by IUMBTEMS epistemic-swarm: Web searches must be "
|
|
57
|
+
"verifiable. Use epistemic search (python3 skills/epistemic_search/scripts/search.py "
|
|
58
|
+
'"<query>") or MCP tool brave_web_search for SHA-256 cached verification.'
|
|
59
|
+
),
|
|
60
|
+
}
|
|
61
|
+
|
|
62
|
+
if "read_url_content" in name or "webfetch" in name:
|
|
63
|
+
return {
|
|
64
|
+
"decision": "deny",
|
|
65
|
+
"reason": (
|
|
66
|
+
"Intercepted by IUMBTEMS epistemic-swarm: Web fetches must be "
|
|
67
|
+
"content-addressed. Use epistemic fetch (python3 skills/epistemic_search/scripts/fetch.py "
|
|
68
|
+
'"<url>") to cache sources into .research/sources/<sha256>.md.'
|
|
69
|
+
),
|
|
70
|
+
}
|
|
71
|
+
|
|
72
|
+
return {"decision": "allow"}
|
|
73
|
+
|
|
74
|
+
|
|
75
|
+
def handle_pre_invocation(payload: Dict[str, Any]) -> Dict[str, Any]:
|
|
76
|
+
"""Inject ephemeral evidence tagging constraints before model reasoning."""
|
|
77
|
+
return {
|
|
78
|
+
"injectSteps": [
|
|
79
|
+
{
|
|
80
|
+
"ephemeralMessage": (
|
|
81
|
+
"[EPISTEMIC INTEGRITY] Every factual claim must carry "
|
|
82
|
+
"[VERIFIED: <sha256>] (verbatim quote in .research/sources/<hash>.md), "
|
|
83
|
+
"[INFERRED: <parents>], [HYPOTHESIS: <test>], or [NEGATIVE_KNOWLEDGE: <query>]. "
|
|
84
|
+
"Unverified parametric recall is strictly quarantined."
|
|
85
|
+
)
|
|
86
|
+
}
|
|
87
|
+
]
|
|
88
|
+
}
|
|
89
|
+
|
|
90
|
+
|
|
91
|
+
def handle_post_tool(payload: Dict[str, Any]) -> Dict[str, Any]:
|
|
92
|
+
"""Log tool completions and record negative knowledge on failures."""
|
|
93
|
+
try:
|
|
94
|
+
workspace_dir = _get_workspace_dir(payload)
|
|
95
|
+
research_dir = workspace_dir / ".research"
|
|
96
|
+
|
|
97
|
+
error = payload.get("error")
|
|
98
|
+
if error and research_dir.exists():
|
|
99
|
+
log_file = research_dir / "retrieval.jsonl"
|
|
100
|
+
entry = {
|
|
101
|
+
"stepIdx": payload.get("stepIdx"),
|
|
102
|
+
"error": str(error),
|
|
103
|
+
"status": "tool_failure",
|
|
104
|
+
}
|
|
105
|
+
with log_file.open("a", encoding="utf-8") as f:
|
|
106
|
+
f.write(json.dumps(entry) + "\n")
|
|
107
|
+
except Exception:
|
|
108
|
+
pass
|
|
109
|
+
return {}
|
|
110
|
+
|
|
111
|
+
|
|
112
|
+
def handle_stop(payload: Dict[str, Any]) -> Dict[str, Any]:
|
|
113
|
+
"""Prevent agent from terminating if an active swarm run has unverified claims."""
|
|
114
|
+
try:
|
|
115
|
+
workspace_dir = _get_workspace_dir(payload)
|
|
116
|
+
research_dir = workspace_dir / ".research"
|
|
117
|
+
|
|
118
|
+
# If a STOP signal file was placed by user or factory, respect it immediately
|
|
119
|
+
factory_stop = (workspace_dir / ".factory" / "STOP")
|
|
120
|
+
if factory_stop.exists():
|
|
121
|
+
return {"decision": "allow"}
|
|
122
|
+
|
|
123
|
+
# Check if living dossier retractions require human/agent re-review
|
|
124
|
+
ledger_path = research_dir / "ledger" / "claim_status.json"
|
|
125
|
+
if ledger_path.exists():
|
|
126
|
+
try:
|
|
127
|
+
ledger = json.loads(ledger_path.read_text(encoding="utf-8"))
|
|
128
|
+
stale_claims = [
|
|
129
|
+
c for c in ledger.get("claims", [])
|
|
130
|
+
if c.get("status") in ("STALE", "SUSPECT")
|
|
131
|
+
]
|
|
132
|
+
if stale_claims:
|
|
133
|
+
return {
|
|
134
|
+
"decision": "continue",
|
|
135
|
+
"reason": (
|
|
136
|
+
f"Epistemic audit warning: {len(stale_claims)} claims are degraded "
|
|
137
|
+
"(STALE/SUSPECT) due to source retractions. Review before finishing."
|
|
138
|
+
),
|
|
139
|
+
}
|
|
140
|
+
except Exception:
|
|
141
|
+
pass
|
|
142
|
+
except Exception:
|
|
143
|
+
pass
|
|
144
|
+
return {"decision": "allow"}
|
|
145
|
+
|
|
146
|
+
|
|
147
|
+
def main() -> None:
|
|
148
|
+
action = sys.argv[1] if len(sys.argv) > 1 else "pre_tool"
|
|
149
|
+
payload = _read_stdin_payload()
|
|
150
|
+
|
|
151
|
+
if action == "pre_tool":
|
|
152
|
+
result = handle_pre_tool(payload)
|
|
153
|
+
elif action == "pre_invocation":
|
|
154
|
+
result = handle_pre_invocation(payload)
|
|
155
|
+
elif action == "post_tool":
|
|
156
|
+
result = handle_post_tool(payload)
|
|
157
|
+
elif action == "stop":
|
|
158
|
+
result = handle_stop(payload)
|
|
159
|
+
else:
|
|
160
|
+
result = {"decision": "allow"}
|
|
161
|
+
|
|
162
|
+
sys.stdout.write(json.dumps(result))
|
|
163
|
+
sys.stdout.flush()
|
|
164
|
+
|
|
165
|
+
|
|
166
|
+
if __name__ == "__main__":
|
|
167
|
+
main()
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
---
|
|
2
|
+
description: Dialectic codebase architecture and security audit with line-level proof
|
|
3
|
+
---
|
|
4
|
+
|
|
5
|
+
Run the IUMBTEMS dialectic codebase audit on `$1`:
|
|
6
|
+
|
|
7
|
+
`python3 runner/research_swarm.py --mode audit --objective "$1"`
|
|
8
|
+
|
|
9
|
+
Report: `.research/code_audit_report.md` with `file:///path#Lstart-Lend` pointers
|
|
10
|
+
and verbatim snippets. Every vulnerability needs a concrete patch blueprint.
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
---
|
|
2
|
+
description: Lateral brainstorming — novel feature vectors and speculative spikes
|
|
3
|
+
---
|
|
4
|
+
|
|
5
|
+
Run IUMBTEMS lateral brainstorming on `$1` (see `skills/brainstorming/SKILL.md`
|
|
6
|
+
and `prompts/agent_brainstormer.md`):
|
|
7
|
+
|
|
8
|
+
1. Ingest workspace context read-only (`python3 skills/brainstorming/scripts/brainstorm.py --objective "$1" --show-context`).
|
|
9
|
+
2. Thesis / Radical Antithesis / Synthesis — never bug-fix lists.
|
|
10
|
+
3. Output Novel Feature Vectors (3-5), Lateral Architectural Moves (2-3),
|
|
11
|
+
Experimental Hypotheses (2-3 with `[HYPOTHESIS:<falsification test>]`).
|
|
12
|
+
4. Write `.research/brainstorm_report.md` (or run `python3 runner/research_swarm.py --mode brainstorm --objective "$1"`).
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
---
|
|
2
|
+
description: Product competitor teardown with per-feature harvest verdicts
|
|
3
|
+
---
|
|
4
|
+
|
|
5
|
+
Run a product competitor teardown for `$1`:
|
|
6
|
+
|
|
7
|
+
`python3 runner/research_swarm.py --mode darkharvest --objective "$1"`
|
|
8
|
+
|
|
9
|
+
Seeds may be embedded as repo URLs; cap live runs at `--max-repos 6`.
|
|
10
|
+
Permissive-only vendor; GPL/AGPL clean-room-rebuild only; workflows clonable, assets never.
|
|
11
|
+
Report: `.research/darkharvest_report.md` (matrix + white-space gaps + SPDX backlog).
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
---
|
|
2
|
+
description: Autonomous agent-guided self-improvement loop (count-flagged)
|
|
3
|
+
---
|
|
4
|
+
|
|
5
|
+
Run the IUMBTEMS domain-expansion loop for `$1` loops (max 10):
|
|
6
|
+
|
|
7
|
+
Bypasses per-loop gates; stops on count OR `.factory/STOP` file OR user kill.
|
|
8
|
+
Each loop: agents propose direction, quick swarm check, implement, dual-QA verify.
|
|
9
|
+
Enforce via the `iumbtems_factory` tool (expansion command with loops/max_loops).
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
---
|
|
2
|
+
description: Coding-factory Manager loop with grill-gated phased builds
|
|
3
|
+
---
|
|
4
|
+
|
|
5
|
+
Run the IUMBTEMS coding-factory Manager loop for `$1`:
|
|
6
|
+
|
|
7
|
+
1. Grill until `.factory/frontier.json` is settled (max 5 swarm cycles per gate); explicit user approve advances each gate.
|
|
8
|
+
2. Per gate: `python3 runner/research_swarm.py --mode brainstorm` plus `--mode darkharvest` (mock-first), then synthesize `.roadmap/<phase>/` GOAL.md + dossier.json.
|
|
9
|
+
3. Programmer subagent per phase; qa-a plus qa-b per phase; retries tracked via the `iumbtems_factory` tool (phase-add / qa-record; 3 failures escalate). Never invoke factory helper scripts by relative path.
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
---
|
|
2
|
+
description: Socratic grilling and decision frontier exploration
|
|
3
|
+
---
|
|
4
|
+
|
|
5
|
+
Launch IUMBTEMS Socratic grilling for `$1`.
|
|
6
|
+
|
|
7
|
+
Follow `skills/grilling/SKILL.md` (rounds, frontier, assumption inversion,
|
|
8
|
+
factual vs decisional separation). Persist with
|
|
9
|
+
`python3 skills/grilling/socratic_tree.py --export`.
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
---
|
|
2
|
+
description: Scout open-source libraries and build clean-room blueprints
|
|
3
|
+
---
|
|
4
|
+
|
|
5
|
+
Scout open-source solutions for `$1`:
|
|
6
|
+
|
|
7
|
+
`python3 runner/research_swarm.py --mode scout --objective "$1"`
|
|
8
|
+
|
|
9
|
+
Flag GPL/AGPL contamination, solo-maintainer risk, dependency weight, CVEs.
|
|
10
|
+
Report: `.research/oss_scout_report.md` plus a clean-room re-implementation blueprint.
|
|
@@ -0,0 +1,10 @@
|
|
|
1
|
+
---
|
|
2
|
+
description: Inspect or tune Epistemic Swarm parameters (engine, depth, mode)
|
|
3
|
+
---
|
|
4
|
+
|
|
5
|
+
Inspect or tune IUMBTEMS swarm parameters: `$1`.
|
|
6
|
+
|
|
7
|
+
`python3 skills/swarm_config/configure.py $1`
|
|
8
|
+
|
|
9
|
+
Engines: `duckduckgo` (zero-key default), `brave`, `firecrawl`, `searxng`.
|
|
10
|
+
Modes: `research`, `audit`, `scout`, `hybrid`, `brainstorm`. Depth: 1-4.
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
---
|
|
2
|
+
description: Run IUMBTEMS dialectic research swarm on an objective
|
|
3
|
+
---
|
|
4
|
+
|
|
5
|
+
Run the IUMBTEMS dialectic research swarm on `$1`.
|
|
6
|
+
|
|
7
|
+
1. If the objective is ambiguous, follow `skills/grilling/SKILL.md` first.
|
|
8
|
+
2. Execute `python3 runner/research_swarm.py --objective "$1" $@[2:]`.
|
|
9
|
+
3. Summarize `.research/final_synthesis.md`, preserving `[VERIFIED:<hash>]` pointers.
|
|
@@ -1,22 +1,43 @@
|
|
|
1
1
|
{
|
|
2
|
-
"
|
|
3
|
-
"
|
|
2
|
+
"epistemic-query-interceptor": {
|
|
3
|
+
"PreToolUse": [
|
|
4
4
|
{
|
|
5
|
-
"matcher": "
|
|
6
|
-
"
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
5
|
+
"matcher": "search_web|read_url_content",
|
|
6
|
+
"hooks": [
|
|
7
|
+
{
|
|
8
|
+
"type": "command",
|
|
9
|
+
"command": "python3 antigravity_hooks.py pre_tool || echo '{\"decision\": \"allow\"}'",
|
|
10
|
+
"timeout": 15
|
|
11
|
+
}
|
|
12
|
+
]
|
|
13
13
|
}
|
|
14
14
|
],
|
|
15
|
-
"
|
|
15
|
+
"PreInvocation": [
|
|
16
|
+
{
|
|
17
|
+
"type": "command",
|
|
18
|
+
"command": "python3 antigravity_hooks.py pre_invocation || echo '{}'",
|
|
19
|
+
"timeout": 15
|
|
20
|
+
}
|
|
21
|
+
]
|
|
22
|
+
},
|
|
23
|
+
"epistemic-claim-auditor": {
|
|
24
|
+
"PostToolUse": [
|
|
16
25
|
{
|
|
17
26
|
"matcher": "*",
|
|
18
|
-
"
|
|
19
|
-
|
|
27
|
+
"hooks": [
|
|
28
|
+
{
|
|
29
|
+
"type": "command",
|
|
30
|
+
"command": "python3 antigravity_hooks.py post_tool || echo '{}'",
|
|
31
|
+
"timeout": 15
|
|
32
|
+
}
|
|
33
|
+
]
|
|
34
|
+
}
|
|
35
|
+
],
|
|
36
|
+
"Stop": [
|
|
37
|
+
{
|
|
38
|
+
"type": "command",
|
|
39
|
+
"command": "python3 antigravity_hooks.py stop || echo '{\"decision\": \"allow\"}'",
|
|
40
|
+
"timeout": 20
|
|
20
41
|
}
|
|
21
42
|
]
|
|
22
43
|
}
|
|
@@ -1,33 +1,33 @@
|
|
|
1
1
|
{
|
|
2
2
|
"mcpServers": {
|
|
3
|
+
"iumbtems": {
|
|
4
|
+
"command": "python3",
|
|
5
|
+
"args": ["${extensionPath}/mcp_launcher.py", "iumbtems"],
|
|
6
|
+
"env": {
|
|
7
|
+
"IUMBTEMS_WORKSPACE": "${workspacePath}"
|
|
8
|
+
}
|
|
9
|
+
},
|
|
3
10
|
"brave-search": {
|
|
4
11
|
"command": "python3",
|
|
5
|
-
"args": ["${
|
|
12
|
+
"args": ["${extensionPath}/mcp_launcher.py", "brave-search"],
|
|
6
13
|
"env": {
|
|
7
14
|
"BRAVE_SEARCH_API_KEY": "${BRAVE_SEARCH_API_KEY}"
|
|
8
15
|
}
|
|
9
16
|
},
|
|
10
17
|
"firecrawl": {
|
|
11
18
|
"command": "python3",
|
|
12
|
-
"args": ["${
|
|
19
|
+
"args": ["${extensionPath}/mcp_launcher.py", "firecrawl"],
|
|
13
20
|
"env": {
|
|
14
21
|
"FIRECRAWL_API_KEY": "${FIRECRAWL_API_KEY}",
|
|
15
|
-
"FIRECRAWL_API_URL": "${FIRECRAWL_API_URL:-
|
|
22
|
+
"FIRECRAWL_API_URL": "${FIRECRAWL_API_URL:-https://api.firecrawl.dev}"
|
|
16
23
|
}
|
|
17
24
|
},
|
|
18
25
|
"searxng": {
|
|
19
26
|
"command": "python3",
|
|
20
|
-
"args": ["${
|
|
27
|
+
"args": ["${extensionPath}/mcp_launcher.py", "searxng"],
|
|
21
28
|
"env": {
|
|
22
29
|
"SEARXNG_URL": "${SEARXNG_URL:-http://localhost:8080}"
|
|
23
30
|
}
|
|
24
|
-
},
|
|
25
|
-
"iumbtems": {
|
|
26
|
-
"command": "python3",
|
|
27
|
-
"args": ["${pluginPath}/../../runner/mcp_server.py"],
|
|
28
|
-
"env": {
|
|
29
|
-
"PYTHONPATH": "${pluginPath}/../.."
|
|
30
|
-
}
|
|
31
31
|
}
|
|
32
32
|
}
|
|
33
33
|
}
|
|
@@ -0,0 +1,58 @@
|
|
|
1
|
+
#!/usr/bin/env python3
|
|
2
|
+
"""
|
|
3
|
+
Antigravity MCP Server Launcher & Epistemic Fallback Proxy.
|
|
4
|
+
|
|
5
|
+
Binds Antigravity's MCP server declarations to:
|
|
6
|
+
- runner/mcp_server.py (canonical 17 iumbtems_* tools)
|
|
7
|
+
- config/mcp_launcher.py (brave-search, firecrawl, searxng with zero-key fallback)
|
|
8
|
+
"""
|
|
9
|
+
|
|
10
|
+
import os
|
|
11
|
+
import sys
|
|
12
|
+
from pathlib import Path
|
|
13
|
+
import runpy
|
|
14
|
+
|
|
15
|
+
SCRIPT_DIR = Path(__file__).resolve().parent
|
|
16
|
+
|
|
17
|
+
def find_project_root() -> Path:
|
|
18
|
+
candidates = []
|
|
19
|
+
if "IUMBTEMS_WORKSPACE" in os.environ:
|
|
20
|
+
candidates.append(Path(os.environ["IUMBTEMS_WORKSPACE"]).resolve())
|
|
21
|
+
if "IUMBTEMS_ROOT" in os.environ:
|
|
22
|
+
candidates.append(Path(os.environ["IUMBTEMS_ROOT"]).resolve())
|
|
23
|
+
|
|
24
|
+
curr = Path.cwd().resolve()
|
|
25
|
+
candidates.extend([curr] + list(curr.parents))
|
|
26
|
+
|
|
27
|
+
for c in candidates:
|
|
28
|
+
if (c / "runner" / "mcp_server.py").is_file():
|
|
29
|
+
return c
|
|
30
|
+
return curr
|
|
31
|
+
|
|
32
|
+
def main():
|
|
33
|
+
service = sys.argv[1] if len(sys.argv) > 1 else "iumbtems"
|
|
34
|
+
root = find_project_root()
|
|
35
|
+
|
|
36
|
+
if str(root) not in sys.path:
|
|
37
|
+
sys.path.insert(0, str(root))
|
|
38
|
+
|
|
39
|
+
if service == "iumbtems":
|
|
40
|
+
server_script = root / "runner" / "mcp_server.py"
|
|
41
|
+
if server_script.is_file():
|
|
42
|
+
# Run runner/mcp_server.py directly in this process
|
|
43
|
+
sys.argv = [str(server_script)]
|
|
44
|
+
runpy.run_path(str(server_script), run_name="__main__")
|
|
45
|
+
else:
|
|
46
|
+
sys.stderr.write(f"IUMBTEMS mcp_server.py not found under project root: {root}\n")
|
|
47
|
+
sys.exit(1)
|
|
48
|
+
else:
|
|
49
|
+
launcher = root / "config" / "mcp_launcher.py"
|
|
50
|
+
if launcher.is_file():
|
|
51
|
+
sys.argv = [str(launcher), service]
|
|
52
|
+
runpy.run_path(str(launcher), run_name="__main__")
|
|
53
|
+
else:
|
|
54
|
+
sys.stderr.write(f"IUMBTEMS config/mcp_launcher.py not found under project root: {root}\n")
|
|
55
|
+
sys.exit(1)
|
|
56
|
+
|
|
57
|
+
if __name__ == "__main__":
|
|
58
|
+
main()
|
|
@@ -1,23 +1,13 @@
|
|
|
1
1
|
{
|
|
2
2
|
"$schema": "https://antigravity.google/schemas/v1/plugin.json",
|
|
3
3
|
"name": "epistemic-swarm",
|
|
4
|
-
"version": "0.
|
|
5
|
-
"description": "IUMBTEMS Epistemic Swarm
|
|
6
|
-
"author":
|
|
4
|
+
"version": "0.7.18",
|
|
5
|
+
"description": "IUMBTEMS (Epistemic Swarm) \u2014 High-Integrity Dialectic Research, Architecture Auditing, Competitor Teardowns, and Socratic Planning for Antigravity.",
|
|
6
|
+
"author": {
|
|
7
|
+
"name": "Heretek AI",
|
|
8
|
+
"email": "dev@heretek.ai"
|
|
9
|
+
},
|
|
7
10
|
"license": "Apache-2.0",
|
|
8
11
|
"repository": "https://github.com/Heretek-AI/IUMBTEMS",
|
|
9
|
-
"homepage": "https://github.com/Heretek-AI/IUMBTEMS#readme"
|
|
10
|
-
"skills": [
|
|
11
|
-
"./skills/grilling",
|
|
12
|
-
"./skills/research_cache",
|
|
13
|
-
"./skills/epistemic_search",
|
|
14
|
-
"./skills/swarm_config",
|
|
15
|
-
"./skills/code_audit",
|
|
16
|
-
"./skills/oss_scout",
|
|
17
|
-
"./skills/brainstorming",
|
|
18
|
-
"./skills/darkharvest",
|
|
19
|
-
"./skills/factory"
|
|
20
|
-
],
|
|
21
|
-
"agents": ["./agents"],
|
|
22
|
-
"rules": ["./rules"]
|
|
12
|
+
"homepage": "https://github.com/Heretek-AI/IUMBTEMS#readme"
|
|
23
13
|
}
|
|
@@ -0,0 +1,125 @@
|
|
|
1
|
+
# AGENTS.md — IUMBTEMS contributor guide
|
|
2
|
+
|
|
3
|
+
## Evidence first
|
|
4
|
+
Every factual claim carries a tag: `[VERIFIED: <sha256>]` (verbatim quote in
|
|
5
|
+
`.research/sources/<hash>.md`), `[INFERRED: <parents>]`, `[HYPOTHESIS: <test>]`,
|
|
6
|
+
or `[NEGATIVE_KNOWLEDGE: <query>]`. Never present parametric recall as verified.
|
|
7
|
+
|
|
8
|
+
## Naming
|
|
9
|
+
- **IUMBTEMS** is the project/brand; **Epistemic Swarm** is the product/technical
|
|
10
|
+
name (npm `@heretek-ai/epistemic-swarm`, Claude plugin `epistemic-swarm`). Keep
|
|
11
|
+
user-facing docs IUMBTEMS-led and use "Epistemic Swarm" for the package/plugin.
|
|
12
|
+
|
|
13
|
+
## Canonical surfaces (single source of truth)
|
|
14
|
+
- `skills/*/SKILL.md` + `prompts/*.md` — canonical prose and specs.
|
|
15
|
+
- Hand-maintained (NOT generated): `README.md`, `MARKETPLACE.md`, `AGENTS.md`,
|
|
16
|
+
`docs/*.md`, `.omp/*`, `.claude/*`, `plugins/*/README.md`, and the OpenCode
|
|
17
|
+
plugin source `plugins/opencode/index.js`.
|
|
18
|
+
- `python3 runner/mcp_server.py` — canonical programmatic surface (17 `iumbtems_*`
|
|
19
|
+
tools: `config`, `swarm_research`, `code_audit`, `oss_scout`, `brainstorm`,
|
|
20
|
+
`darkharvest`, `factory`, `verify_quote`, `socratic_frontier`, `export_brief`,
|
|
21
|
+
`verify_brief`, `reindex_claims`, `report_retraction`, `check_staleness`,
|
|
22
|
+
`set_domain_pack`, `doctor`, `test`).
|
|
23
|
+
- GENERATED — never hand-edit: `plugins/{antigravity,gemini,codex}/skills/**`,
|
|
24
|
+
`.agents/skills/**`, and the modular copies under
|
|
25
|
+
`plugins/{research-cache,socratic-grilling,darkharvest,factory}/skills/**`.
|
|
26
|
+
Edit the canonical skill, then run `python3 scripts/build_adapters.py`.
|
|
27
|
+
|
|
28
|
+
## Commands
|
|
29
|
+
- `iumbtems run|audit|scout|brainstorm|darkharvest|grill|config|doctor|test`
|
|
30
|
+
- `iumbtems adapters|install|marketplace|help` — regenerate adapter stubs, install
|
|
31
|
+
the Claude Code overlay, print the marketplace catalog, print usage.
|
|
32
|
+
- `iumbtems factory <init|phase-add|qa-record|expansion|stop|gate>` — factory
|
|
33
|
+
run-state helper (state in `.factory/`, output in `.roadmap/`, evidence in
|
|
34
|
+
`.research/`). Run-shaping flags: `--resume` (continue a session), `--dry-run`
|
|
35
|
+
(validate without spawning).
|
|
36
|
+
- OpenCode slash commands: `/swarm /grill /swarm-config /audit /scout
|
|
37
|
+
/brainstorming /darkharvest /factory /domainexpansion`.
|
|
38
|
+
|
|
39
|
+
## Skills quick map
|
|
40
|
+
- `grilling` — Socratic assumption-inversion, decision frontier.
|
|
41
|
+
- `brainstorming` — divergent ideation (never bug fixes); scaffold via
|
|
42
|
+
`skills/brainstorming/scripts/brainstorm.py`.
|
|
43
|
+
- `oss_scout` — library discovery, license red-team, clean-room blueprints.
|
|
44
|
+
- `darkharvest` — product competitor teardown; helper
|
|
45
|
+
`skills/darkharvest/scripts/harvest.py`. Permissive-only vendoring;
|
|
46
|
+
GPL/AGPL spec-rebuild only; workflows clonable, assets never.
|
|
47
|
+
- `factory` — Manager loop roles/gates/QA bounds; helper
|
|
48
|
+
`skills/factory/scripts/factory.py` (3 QA failures escalate; expansion capped,
|
|
49
|
+
STOP-file kill).
|
|
50
|
+
- `research_cache` — content-addressed SHA-256 source cache + quote verification
|
|
51
|
+
(`hasher.py`).
|
|
52
|
+
- `epistemic_search` — zero-key DuckDuckGo search, fetch, and cache-through
|
|
53
|
+
(`search.py`, `webcache.py`).
|
|
54
|
+
- `swarm_config` — inspect/tune/persist research parameters
|
|
55
|
+
(`skills/swarm_config/configure.py`).
|
|
56
|
+
- `code_audit` — structural architecture mapping + vulnerability red-teaming.
|
|
57
|
+
|
|
58
|
+
## Contract invariants (do not break; detail lives in `docs/SYSTEM_ARCHITECTURE.md`)
|
|
59
|
+
|
|
60
|
+
| Invariant | Detail |
|
|
61
|
+
| :--- | :--- |
|
|
62
|
+
| Manifests are per mode (`manifest.json` for research, `manifest.<mode>.json` otherwise) | §6.2.2 |
|
|
63
|
+
| Manifest writes use unique temp names + `fcntl` lock (`.research/.manifest.lock`); readers use `find_any_manifest` | §6.2.2 |
|
|
64
|
+
| Role dossier contract: agents get the **exact** dossier path; completion is **derived from files on disk** (`reconcile_scope_status`) | §6.2.3 |
|
|
65
|
+
| Loader tolerates bounded mode aliases + manifest `outputs`, normalizing to the canonical name | §6.2.3 |
|
|
66
|
+
| Grounding is observable (`.research/retrieval.jsonl` + `retrieval:` banner); scoring is per mode; only `source_hash` + `verbatim_quote` claims count toward Verified | §6.3 |
|
|
67
|
+
| Darkharvest license cross-check is a safety control (`WARNING_LICENSE_CONFLICT`); `self_reported_*` fields are never counted | §6.4 |
|
|
68
|
+
| Contracts are generated (`runner/schemas.py` → `schemas/`); validation is warn-on-load | §6.5 |
|
|
69
|
+
| Agent runtime is host-native; spawned agents get matching OS `cwd` and `PWD`; `opencode run` passes `--auto` | §6.1–6.2 |
|
|
70
|
+
| Config deep-merges `agents` per role; legacy `["claude", "-p"]` pins migrate to `null` unless `backend` is `"claude"` | §6.6 |
|
|
71
|
+
| Preflight auto-runs at every swarm start (`iumbtems_doctor`); mode-aware fail-fast halts before spawning (exit 3) | §6.5 |
|
|
72
|
+
| Frontier is tool-drivable (`--add-node/--settle/--export`); frontier writes are atomic + locked | §5, §6.5 |
|
|
73
|
+
| Run-scoped layout is opt-in (`IUMBTEMS_RUN_SCOPED=1`); default is flat | §6.5 |
|
|
74
|
+
| `factory` writes `phase.json` (never `GOAL.md`/`dossier.json`, refused unless `--force`); `gate open|settle|approve|waive|escalate|count` | §10 |
|
|
75
|
+
|
|
76
|
+
## Workflow rules
|
|
77
|
+
- Writes go only to `.research/`, `.factory/` (runtime state), `.roadmap/`
|
|
78
|
+
(phase output). Never auto-install dependencies.
|
|
79
|
+
- After touching `skills/*`, `package.json` (pi/omp blocks), or OpenCode plugin
|
|
80
|
+
surface: run `python3 scripts/build_adapters.py --check` and
|
|
81
|
+
`python3 -m unittest discover -s runner/tests`. Both must be green.
|
|
82
|
+
- After touching `runner/schemas.py`: run `python3 scripts/gen_schemas.py`
|
|
83
|
+
(regenerates `schemas/*.schema.json`); `--check` must be green.
|
|
84
|
+
- Docs changes: `python3 scripts/check_docs.py` must resolve every repo-relative
|
|
85
|
+
reference.
|
|
86
|
+
- OpenCode V2 is the first-class target: agent profiles + commands live in
|
|
87
|
+
`config/opencode-snippet.json` and `plugins/opencode/index.js`
|
|
88
|
+
(`OPENCODE_COMMANDS`, `commandCatalog()`); commands may pin `agent:` and
|
|
89
|
+
`subagent:` (`subtask:` legacy alias) per https://opencode.ai/v2/docs/commands/.
|
|
90
|
+
- The plugin registers through the V2 domains at setup: `tool.transform` and
|
|
91
|
+
`command.transform` (catalog), plus `agent.transform` (the snippet's role
|
|
92
|
+
profiles, incl. manager/programmer/qa-a/qa-b) and `skill.transform` (bundled
|
|
93
|
+
`skills/*/SKILL.md`). This removes the config-snippet install dependency —
|
|
94
|
+
without it a `/factory` run executed as the generic `build` agent and the
|
|
95
|
+
agent hunted the filesystem for its own skill prose. Commands that pin an
|
|
96
|
+
agent also call `session.switchAgent` (best-effort, shape-tolerant) so the
|
|
97
|
+
pinned role is actually active.
|
|
98
|
+
- V2 `AgentEditor` has NO `add()` — only `list/get/default/update/remove`, and
|
|
99
|
+
`update(id, mutate)` upserts (seeded from `Agent.Info.default(id)`; the
|
|
100
|
+
first-party `opencode.config.agent` uses the same path). The plugin registers
|
|
101
|
+
profiles with `update`; calling `add` made opencode v2.0.18 disable the whole
|
|
102
|
+
plugin (`disabled plugin after transform failure`, state=agent). The shipped
|
|
103
|
+
snippet is V2-shaped: `agents` (plural), `skills` as a list, `mcp.servers`.
|
|
104
|
+
- Dual QA gates the loop: diverged `qa-a` (functional) and `qa-b`
|
|
105
|
+
(adversarial) seats, manager tiebreak, 3 failures escalate. Waivers carry
|
|
106
|
+
conditions. When a fix's precondition changes, re-verify its blast radius
|
|
107
|
+
(see #7/#8).
|
|
108
|
+
- You drive the installed package, not the worktree: fixes authored here take
|
|
109
|
+
effect only after release + reinstall.
|
|
110
|
+
|
|
111
|
+
## Releases
|
|
112
|
+
- Bump `package.json` (+ lockfile sync) **and `.claude-plugin/plugin.json`**
|
|
113
|
+
(0.7.5 shipped with a stale plugin manifest — keep all three in lockstep),
|
|
114
|
+
commit, push to `main`, then
|
|
115
|
+
`gh release create vX.Y.Z`. The `Publish to npm` workflow (OIDC trusted
|
|
116
|
+
publishing) runs on release-published. Verify with
|
|
117
|
+
`curl https://registry.npmjs.org/@heretek-ai%2Fepistemic-swarm`
|
|
118
|
+
(allow propagation time).
|
|
119
|
+
- **After every push to `main` or release, check *all* workflows, not just the
|
|
120
|
+
publisher:** `gh run list --limit 10` and inspect `Validate All Harnesses`,
|
|
121
|
+
`Validate Claude Code Marketplace`, `Plugin Evals`, `CodeQL`, and
|
|
122
|
+
`Publish to npm`. A green `Publish to npm` alone hid real failures for several
|
|
123
|
+
releases (a committed symlink under `skills/` broke `plugin validate --strict`,
|
|
124
|
+
and an OpenCode tool-parity gap went unnoticed) — the release is not done until
|
|
125
|
+
every workflow is green.
|
|
@@ -1,6 +1,16 @@
|
|
|
1
|
-
# Epistemic Integrity (AntiGravity
|
|
1
|
+
# Epistemic Integrity Invariant (AntiGravity Workspace Rule)
|
|
2
2
|
|
|
3
|
-
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
3
|
+
## Evidence-First Invariant
|
|
4
|
+
Every factual claim made by any agent MUST carry an empirical attribution tag:
|
|
5
|
+
- `[VERIFIED: <sha256>]`: Verbatim quote matching content in `.research/sources/<sha256>.md`.
|
|
6
|
+
- `[INFERRED: <parents>]`: Logical derivation explicitly citing verified parent claims.
|
|
7
|
+
- `[HYPOTHESIS: <test>]`: Falsifiable proposition paired with an empirical verification test.
|
|
8
|
+
- `[NEGATIVE_KNOWLEDGE: <query>]`: Recorded failure or absence of evidence for a specific query.
|
|
9
|
+
|
|
10
|
+
Never present unverified parametric recollection as fact. Quarantined parametric recall must be verified against cached sources before assertion.
|
|
11
|
+
|
|
12
|
+
## Directory Isolation & Write Boundaries
|
|
13
|
+
- Agents write ONLY to `.research/` (evidence, dossiers, retrieval logs), `.factory/` (runtime execution state), and `.roadmap/` (phase outputs).
|
|
14
|
+
- Never modify existing dossiers in-place; dossiers form an immutable historical record.
|
|
15
|
+
- Claim status transitions must be appended to `.research/ledger/claim_status.json`.
|
|
16
|
+
- Never install external dependencies or packages without explicit user authorization.
|
|
@@ -1,3 +1,9 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: brainstorming
|
|
3
|
+
description: >-
|
|
4
|
+
Lateral creative brainstorming and divergent ideation skill. Use when exploring what-if features, lateral architectures, speculative product directions, or when user invokes /brainstorming. Generates novel feature vectors, paradigm inversions, and falsifiable spike hypotheses instead of bug fixes.
|
|
5
|
+
---
|
|
6
|
+
|
|
1
7
|
# Brainstorming (thin adapter stub)
|
|
2
8
|
|
|
3
9
|
This file is a POINTER, not the implementation. It exists so harness skill
|
|
@@ -1,3 +1,9 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: code-audit
|
|
3
|
+
description: >-
|
|
4
|
+
Deep dialectic codebase auditing skill. Deploys architectural thesis vs adversarial red-team antithesis to discover security vulnerabilities, race conditions, resource leaks, and architectural flaws with exact line-level proof.
|
|
5
|
+
---
|
|
6
|
+
|
|
1
7
|
# Code Audit (thin adapter stub)
|
|
2
8
|
|
|
3
9
|
This file is a POINTER, not the implementation. It exists so harness skill
|
|
@@ -1,3 +1,9 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: darkharvest
|
|
3
|
+
description: >-
|
|
4
|
+
Product-level competitor teardown and clean-room harvest engine. Use when user wants to compete with or learn from existing products (e.g. Paseo, OpenChambers). Seed with inspiration URLs plus prompt, auto-expand to adjacents, clone-scan competitors, compare product plus code, and emit per-feature depend/vendor/clean-room/skip verdicts with SPDX attribution. Never copies GPL/AGPL code or UI assets.
|
|
5
|
+
---
|
|
6
|
+
|
|
1
7
|
# Darkharvest (thin adapter stub)
|
|
2
8
|
|
|
3
9
|
This file is a POINTER, not the implementation. It exists so harness skill
|
|
@@ -1,3 +1,9 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: epistemic_search
|
|
3
|
+
description: >-
|
|
4
|
+
High-integrity web search and document fetch skill with automatic SHA-256 content caching. Use when searching the web, retrieving primary sources, or fetching documentation while enforcing epistemic integrity.
|
|
5
|
+
---
|
|
6
|
+
|
|
1
7
|
# Epistemic Search (thin adapter stub)
|
|
2
8
|
|
|
3
9
|
This file is a POINTER, not the implementation. It exists so harness skill
|