exloop 0.1.0__tar.gz → 0.2.0__tar.gz

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.
@@ -0,0 +1,8 @@
1
+ dist/
2
+ build/
3
+ *.egg-info/
4
+ __pycache__/
5
+ *.pyc
6
+ .ruff_cache/
7
+ .DS_Store
8
+ # hatchling copies this file into the sdist as it is; keep it free of anything private.
@@ -1,7 +1,9 @@
1
1
  Metadata-Version: 2.5
2
2
  Name: exloop
3
- Version: 0.1.0
4
- Summary: Human-led exploration with a persistent map: the exloop skill for any AI tool that reads SKILL.md, plus the zero-dependency state helper it uses.
3
+ Version: 0.2.0
4
+ Summary: Human-led exploration skills for any AI tool that reads SKILL.md: a persistent map, structured idea comparison, and a zero-dependency state helper.
5
+ Project-URL: Repository, https://github.com/hzshen88/exloop
6
+ Project-URL: Issues, https://github.com/hzshen88/exloop/issues
5
7
  Author: hzshen88
6
8
  License-Expression: Apache-2.0
7
9
  License-File: LICENSE
@@ -17,9 +19,10 @@ Description-Content-Type: text/markdown
17
19
 
18
20
  **Human-led exploration with a persistent map.** An AI companion that does not answer
19
21
  your question for you: it asks one or two honing questions, walks one edge at a time,
20
- keeps a map of where you have been, and offers the next step that is within reach. It
21
- ships as a skill for any AI tool that reads `SKILL.md` files — Claude Code, Codex, and
22
- the like.
22
+ keeps a map of where you have been, and offers the next step that is within reach. When
23
+ several explanations are in play, Idea Lab helps draw, attack, compare, and check them
24
+ without forcing an early winner. Both ship as skills for any AI tool that reads
25
+ `SKILL.md` files — Claude Code, Codex, and the like.
23
26
 
24
27
  ## Installing
25
28
 
@@ -31,17 +34,17 @@ python -m pip install newlife
31
34
  newlife start my-research
32
35
  ```
33
36
 
34
- `start` installs the exloop skill, together with newlife's own, into every AI tool found
37
+ `start` installs the exloop and Idea Lab skills, together with newlife's own, into every AI tool found
35
38
  on the machine.
36
39
 
37
40
  On its own:
38
41
 
39
42
  ```bash
40
43
  python -m pip install exloop
41
- python -c "import exloop; print(exloop.skills_dir() / 'exloop')"
44
+ python -c "import exloop; print(exloop.skills_dir())"
42
45
  ```
43
46
 
44
- and copy the directory that prints into your AI tool's skills folder
47
+ and copy the skill directories it contains into your AI tool's skills folder
45
48
  (`~/.claude/skills/`, `~/.codex/skills/`, ...).
46
49
 
47
50
  ## Using it
@@ -59,10 +62,16 @@ what measurement would make the answer different — the AI says so once, and on
59
62
  hands the record to newlife (`questions/<slug>/origin/`), where the preregistration
60
63
  discipline takes over.
61
64
 
65
+ Idea Lab is not a second entry point that must be completed first. It is an optional
66
+ reasoning pattern inside exploration. The AI uses it when competing or underspecified
67
+ explanations need to be made explicit, challenged, and distinguished.
68
+
62
69
  ## What is in the package
63
70
 
64
71
  - `skills/exloop/SKILL.md` with its references: the protocol (four events — started,
65
72
  marked, pivoted, closed — and the map as their projection) and the state model.
73
+ - `skills/idea-lab/SKILL.md` with domain profiles for formal theory, empirical and causal
74
+ research, simulation, engineering and product mechanisms, and interpretive research.
66
75
  - `skills/exloop/scripts/exploration_state.py`: the zero-dependency helper the skill
67
76
  runs — `init`, `mark`, `pivot`, `show`, `close`, `list`, `archive`, `handoff`, and a
68
77
  `self-test`.
@@ -70,3 +79,21 @@ discipline takes over.
70
79
  files. exloop has no other API and no dependencies.
71
80
 
72
81
  Requires Python 3.11 or newer.
82
+
83
+ ## This repository
84
+
85
+ | Path | What it holds |
86
+ |---|---|
87
+ | `skills/exloop/` | The persistent, human-led exploration skill and state helper. |
88
+ | `skills/idea-lab/` | The optional Draw—Attack—Compare—Check reasoning pattern and domain profiles. |
89
+ | `src/exloop/__init__.py` | `skills_dir()`, the one Python function. |
90
+ | `scripts/install-skill.py` | Installs the master byte for byte into AI tool directories; `--force` to overwrite drifted copies. |
91
+ | `scripts/check_release_artifacts.py` | Refuses to ship anything but the skills: run it on `dist/` before `uv publish`. |
92
+
93
+ ```bash
94
+ python3 skills/exloop/scripts/exploration_state.py self-test
95
+ uv build --out-dir dist && python3 scripts/check_release_artifacts.py dist
96
+ ```
97
+
98
+ The skill is used downstream by [newlife](https://github.com/hzshen88/newlife), which
99
+ depends on this package. Apache-2.0.
@@ -2,9 +2,10 @@
2
2
 
3
3
  **Human-led exploration with a persistent map.** An AI companion that does not answer
4
4
  your question for you: it asks one or two honing questions, walks one edge at a time,
5
- keeps a map of where you have been, and offers the next step that is within reach. It
6
- ships as a skill for any AI tool that reads `SKILL.md` files — Claude Code, Codex, and
7
- the like.
5
+ keeps a map of where you have been, and offers the next step that is within reach. When
6
+ several explanations are in play, Idea Lab helps draw, attack, compare, and check them
7
+ without forcing an early winner. Both ship as skills for any AI tool that reads
8
+ `SKILL.md` files — Claude Code, Codex, and the like.
8
9
 
9
10
  ## Installing
10
11
 
@@ -16,17 +17,17 @@ python -m pip install newlife
16
17
  newlife start my-research
17
18
  ```
18
19
 
19
- `start` installs the exloop skill, together with newlife's own, into every AI tool found
20
+ `start` installs the exloop and Idea Lab skills, together with newlife's own, into every AI tool found
20
21
  on the machine.
21
22
 
22
23
  On its own:
23
24
 
24
25
  ```bash
25
26
  python -m pip install exloop
26
- python -c "import exloop; print(exloop.skills_dir() / 'exloop')"
27
+ python -c "import exloop; print(exloop.skills_dir())"
27
28
  ```
28
29
 
29
- and copy the directory that prints into your AI tool's skills folder
30
+ and copy the skill directories it contains into your AI tool's skills folder
30
31
  (`~/.claude/skills/`, `~/.codex/skills/`, ...).
31
32
 
32
33
  ## Using it
@@ -44,10 +45,16 @@ what measurement would make the answer different — the AI says so once, and on
44
45
  hands the record to newlife (`questions/<slug>/origin/`), where the preregistration
45
46
  discipline takes over.
46
47
 
48
+ Idea Lab is not a second entry point that must be completed first. It is an optional
49
+ reasoning pattern inside exploration. The AI uses it when competing or underspecified
50
+ explanations need to be made explicit, challenged, and distinguished.
51
+
47
52
  ## What is in the package
48
53
 
49
54
  - `skills/exloop/SKILL.md` with its references: the protocol (four events — started,
50
55
  marked, pivoted, closed — and the map as their projection) and the state model.
56
+ - `skills/idea-lab/SKILL.md` with domain profiles for formal theory, empirical and causal
57
+ research, simulation, engineering and product mechanisms, and interpretive research.
51
58
  - `skills/exloop/scripts/exploration_state.py`: the zero-dependency helper the skill
52
59
  runs — `init`, `mark`, `pivot`, `show`, `close`, `list`, `archive`, `handoff`, and a
53
60
  `self-test`.
@@ -55,3 +62,21 @@ discipline takes over.
55
62
  files. exloop has no other API and no dependencies.
56
63
 
57
64
  Requires Python 3.11 or newer.
65
+
66
+ ## This repository
67
+
68
+ | Path | What it holds |
69
+ |---|---|
70
+ | `skills/exloop/` | The persistent, human-led exploration skill and state helper. |
71
+ | `skills/idea-lab/` | The optional Draw—Attack—Compare—Check reasoning pattern and domain profiles. |
72
+ | `src/exloop/__init__.py` | `skills_dir()`, the one Python function. |
73
+ | `scripts/install-skill.py` | Installs the master byte for byte into AI tool directories; `--force` to overwrite drifted copies. |
74
+ | `scripts/check_release_artifacts.py` | Refuses to ship anything but the skills: run it on `dist/` before `uv publish`. |
75
+
76
+ ```bash
77
+ python3 skills/exloop/scripts/exploration_state.py self-test
78
+ uv build --out-dir dist && python3 scripts/check_release_artifacts.py dist
79
+ ```
80
+
81
+ The skill is used downstream by [newlife](https://github.com/hzshen88/newlife), which
82
+ depends on this package. Apache-2.0.
@@ -0,0 +1,43 @@
1
+ [project]
2
+ name = "exloop"
3
+ version = "0.2.0"
4
+ description = "Human-led exploration skills for any AI tool that reads SKILL.md: a persistent map, structured idea comparison, and a zero-dependency state helper."
5
+ readme = "README.md"
6
+ license = "Apache-2.0"
7
+ license-files = ["LICENSE"]
8
+ requires-python = ">=3.11"
9
+ authors = [{ name = "hzshen88" }]
10
+ keywords = ["exploration", "research-questions", "skill", "claude-code", "codex", "human-in-the-loop"]
11
+ classifiers = [
12
+ "Development Status :: 3 - Alpha",
13
+ "Intended Audience :: Science/Research",
14
+ "Programming Language :: Python :: 3.11",
15
+ "Programming Language :: Python :: 3.12",
16
+ ]
17
+ dependencies = []
18
+
19
+ [project.urls]
20
+ Repository = "https://github.com/hzshen88/exloop"
21
+ Issues = "https://github.com/hzshen88/exloop/issues"
22
+
23
+ [build-system]
24
+ requires = ["hatchling"]
25
+ build-backend = "hatchling.build"
26
+
27
+ # The masters are under skills/ at the repository top, the copies people read and edit; the
28
+ # wheel carries byte copies under exloop/skills/, located via `import exloop; exloop.skills_dir()`.
29
+ # newlife's `skills install` uses that to install the exploration skills alongside its own,
30
+ # without importing any exloop code.
31
+ [tool.hatch.build.targets.wheel]
32
+ packages = ["src/exloop"]
33
+
34
+ [tool.hatch.build.targets.wheel.force-include]
35
+ "skills/exloop" = "exloop/skills/exloop"
36
+ "skills/idea-lab" = "exloop/skills/idea-lab"
37
+
38
+ # The sdist uses only-include, not include: include patterns are gitignore-style and unanchored,
39
+ # so "README.md" would match every README.md in the tree. only-include takes exactly these paths.
40
+ # scripts/check_release_artifacts.py compares the built artifacts file by file and must pass
41
+ # before anything is published.
42
+ [tool.hatch.build.targets.sdist]
43
+ only-include = ["src/exloop", "skills/exloop", "skills/idea-lab", "README.md", "LICENSE", "pyproject.toml"]
@@ -103,6 +103,30 @@ exactly how one exploration in 2026-08 ended up in three directories.
103
103
  boundaries. They are proposals, not a menu the person must select. A new
104
104
  judgment or fact from the person may legitimately redirect the exploration.
105
105
 
106
+ ## When several explanations are live
107
+
108
+ **REQUIRED SUB-SKILL:** Use `idea-lab` when one observation supports two or more
109
+ plausible mechanisms, the person asks to compare explanations, or a favored story
110
+ needs alternatives before formal framing.
111
+
112
+ Idea Lab is a reasoning pattern inside this exploration, not a stage before or
113
+ after exloop. Do not ask the person to choose between them, start a second
114
+ exploration, or make them complete a four-step worksheet. Exloop continues to own
115
+ the conversation, persistent state, pivots, and handoff; Idea Lab supplies the
116
+ Draw—Attack—Compare—Check structure one useful edge at a time.
117
+
118
+ In sustained mode, project its useful changes into the existing map rather than
119
+ inventing a parallel ledger:
120
+
121
+ - a live candidate explanation is a `node`;
122
+ - a missing discriminator or unsupported premise is `stuck`;
123
+ - a mechanism that survives and transfers is a `framework`;
124
+ - a rejected route, with its reason, is `abandoned`;
125
+ - a reversal or unexpected connection is a `surprise`.
126
+
127
+ Do not mark every row of an Idea Lab board. Preserve only changes that matter to
128
+ future conversation.
129
+
106
130
  ## Human control and pivots
107
131
 
108
132
  - Never change the exploration target merely because another direction looks
@@ -165,6 +189,15 @@ switch to a workflow that locks the hypothesis, analysis, prediction, and
165
189
  decision rule first. Label anything already inspected as exploratory. Anything
166
190
  run during the exploration counts as *seen* for a later preregistration.
167
191
 
192
+ **The line is not "do not look at data".** Exploration looks at data — that is its job, and
193
+ a hypothesis grown out of what you saw is exactly what it is meant to produce. The line
194
+ falls one step later: once the question is handed off, **the hypothesis and the direction
195
+ you expect must be written down before the pilot runs**, because the pilot looks at every
196
+ quantity a criterion names and may hand you the answer before anything is frozen. Changing
197
+ the hypothesis after that point is HARKing, even though changing it before was the method.
198
+ `newlife-goal` §3 says what must be fixed by then; the second half of `newlife-prereg`
199
+ rule one says what to do when the pilot has already answered the main criterion.
200
+
168
201
  ## Authorization boundary
169
202
 
170
203
  This skill changes conversational behavior and, in sustained mode, writes only
@@ -0,0 +1,178 @@
1
+ ---
2
+ name: idea-lab
3
+ description: Use when an open-ended research, mechanism, or design question has competing or underspecified explanations and the person is not ready for formal framing or execution. Not for direct factual answers, implementation, debugging, or confirmatory analysis.
4
+ ---
5
+
6
+ # Idea Lab
7
+
8
+ Use **Draw—Attack—Compare—Check** to turn an intuition into a small portfolio of explanations
9
+ whose differences can be discussed and eventually tested. This is an exploratory
10
+ reasoning pattern, not an evidence-producing or confirmatory workflow.
11
+
12
+ The person owns the question, target, and consequential choices. Do not replace
13
+ their original idea merely because another route is easier to formalize.
14
+
15
+ ## Fit with the exploration workflow
16
+
17
+ - For a short exchange, use this pattern in conversation only.
18
+ - **REQUIRED SUB-SKILL:** Use `exloop` when the person asks for sustained
19
+ exploration, a persistent map, or a handoff into a research repository.
20
+ - Use `surveying-prior-work` when source verification, prior art, or a novelty
21
+ judgment becomes material.
22
+ - Hand off to `newlife-goal` only when the person can say what observation or
23
+ measurement would make the answer different.
24
+
25
+ “Plan the next step” means the next exploratory discriminator while this skill is
26
+ active. It does not by itself authorize a transition into study design,
27
+ preregistration, implementation, or intervention. Name the possible handoff and
28
+ let the person choose it.
29
+
30
+ Anything observed, computed, or read during Idea Lab is exploratory and therefore
31
+ *seen* for any later preregistration. This skill never freezes a hypothesis, runs a
32
+ confirmatory analysis, or promotes an explored result to confirmation.
33
+
34
+ ## Choose the domain profile
35
+
36
+ Classify by the dominant inferential risk, not by the researcher's department.
37
+ Read only the one profile that fits:
38
+
39
+ - [formal theory](references/formal-theory.md);
40
+ - [empirical or causal research](references/empirical-causal.md);
41
+ - [simulation or computational research](references/simulation-computational.md);
42
+ - [engineering or product mechanisms](references/engineering-product.md);
43
+ - [interpretive or historical research](references/interpretive-historical.md);
44
+ - [generic mechanism exploration](references/generic.md) when none dominates.
45
+
46
+ If two profiles genuinely apply, state the boundary and use only the relevant
47
+ checks from each. Do not duplicate the whole workflow.
48
+
49
+ ## Draw — make the alternatives explicit
50
+
51
+ Preserve the person's idea as one candidate. Add only enough alternatives to
52
+ expose the consequential uncertainty—usually two to four live candidates, never
53
+ cosmetic rewrites of the same story.
54
+
55
+ For each candidate, make explicit:
56
+
57
+ - the claim in one sentence;
58
+ - the mechanism chain: what changes what;
59
+ - necessary assumptions;
60
+ - an expected pattern if it is right;
61
+ - a boundary or observation that would weaken it.
62
+
63
+ Include a reversed mechanism, selection effect, measurement artifact, or null
64
+ explanation when one is genuinely plausible. Do not manufacture symmetry merely
65
+ to fill a list.
66
+
67
+ ## Attack — challenge before repairing
68
+
69
+ Attack each candidate on its own terms. Ask for the cheapest decisive weakness:
70
+ a counterexample, violated invariant, hidden assumption, scope boundary, rival
71
+ mechanism, or artifact that produces the same observation.
72
+
73
+ Keep the roles separate:
74
+
75
+ 1. state the strongest version of the candidate;
76
+ 2. attack that version;
77
+ 3. classify the damage as contradiction, unsupported premise, limited scope, or
78
+ unresolved;
79
+ 4. repair only if the repair yields a new consequence that was not built into it.
80
+
81
+ Do not erase failed routes. Record why they failed so they are not rediscovered
82
+ later. A repair that merely fits the motivating observation is curve-fitting, not
83
+ progress.
84
+
85
+ ## Compare — seek discriminators, not a winner
86
+
87
+ Compare candidates at the point where they predict different observations,
88
+ timings, interventions, counterfactuals, or failure signatures. Prefer the
89
+ cheapest observation that can make one route lose while another survives.
90
+
91
+ Do not rank explanations as “most likely” without evidence tied to the current
92
+ case. General plausibility, familiarity, theoretical elegance, and labels such as
93
+ “typical amplifier” are not case evidence. If the person asks for a ranking that
94
+ the available evidence cannot support, refuse the ranking and state the first
95
+ observation that would change it. Do not invent numerical thresholds.
96
+
97
+ Candidates need not be mutually exclusive. When one is a trigger and another an
98
+ amplifier, represent their composition and identify evidence for each link rather
99
+ than forcing a single winner.
100
+
101
+ ## Check — audit provenance and claimed novelty
102
+
103
+ Maintain these statuses for material claims:
104
+
105
+ | Status | Meaning |
106
+ |---|---|
107
+ | `user` | Supplied by the person |
108
+ | `observed` | Directly seen in a source, code, data, or run |
109
+ | `established` | Supported by verified prior work |
110
+ | `inferred` | Reasoned from stated premises but not independently verified |
111
+ | `unverified` | Plausible factual claim awaiting a source |
112
+ | `candidate-novelty` | A potentially new combination or claim, not yet established as novel |
113
+
114
+ “No source found” never means “novel.” This skill does not itself authorize web
115
+ research, data access, repository edits, or experiments; use the authority in the
116
+ person's request and the appropriate skill.
117
+
118
+ ## Run it as a loop, not a four-part lecture
119
+
120
+ Advance one useful edge per conversational turn. Do not dump every candidate,
121
+ attack, comparison, source question, study design, and preregistration plan at
122
+ once. “Help me explore” or “plan the next step” is not a request for a full board;
123
+ reserve that for an explicit request for a synthesis, matrix, or complete map.
124
+
125
+ After identifying the first useful discriminator, stop at that boundary. Do not
126
+ specify randomization, estimators, sample sizes, success thresholds, or a frozen
127
+ hypothesis unless the person explicitly chooses to leave Idea Lab for formal
128
+ framing or design.
129
+
130
+ Loop back when:
131
+
132
+ - an attack changes a candidate's mechanism;
133
+ - candidates make the same observable prediction;
134
+ - prior work collapses a supposed distinction;
135
+ - a new observation opens a materially different route.
136
+
137
+ Stop adding branches when four or five live routes are open, or when several turns
138
+ add routes without choosing, resolving, or retiring one. Inventory instead.
139
+
140
+ ## Compact board for synthesis or handoff
141
+
142
+ When the person asks for a synthesis, or a boundary is ready for `newlife-goal`,
143
+ render only what has actually been developed:
144
+
145
+ ```markdown
146
+ ## Current question
147
+ <question and scope>
148
+
149
+ ## Candidate routes
150
+ | Route | Mechanism | Necessary assumptions | Expected pattern | Status |
151
+
152
+ ## Attack ledger
153
+ | Route | Strongest attack | Damage | Repair or reason retained |
154
+
155
+ ## Discriminators
156
+ | Observation or intervention | Route A predicts | Route B predicts | Seen or unobserved |
157
+
158
+ ## Source ledger
159
+ | Claim | Provenance status | Source or missing check |
160
+
161
+ ## Open boundary
162
+ <the one missing distinction, fact, or judgment that most changes the next step>
163
+ ```
164
+
165
+ The board is a map, not a scorecard. Preserve incompatible live routes, abandoned
166
+ routes, and unresolved provenance. End with one reachable next edge, not a verdict.
167
+
168
+ ## Self-check
169
+
170
+ - Did the person's original idea remain visible?
171
+ - Are the candidates mechanistically different rather than differently worded?
172
+ - Did every surviving route face a real attack?
173
+ - Is there at least one discriminator, or an explicit statement that none is known?
174
+ - Are trigger and amplifier separated where relevant?
175
+ - Are factual support, inference, and possible novelty visibly distinct?
176
+ - Did the exploration avoid inventing a threshold or jumping into confirmation?
177
+ - If asked to rank, was the ranking supported by current case evidence rather than
178
+ a generic story about what is common?
@@ -0,0 +1,4 @@
1
+ interface:
2
+ display_name: "Idea Lab"
3
+ short_description: "Explore ideas through draw, attack, compare, check"
4
+ default_prompt: "Use $idea-lab to turn this intuition into competing explanations and find what would distinguish them."
@@ -0,0 +1,19 @@
1
+ # Empirical and causal research profile
2
+
3
+ **Draw:** population, unit, exposure or treatment, outcome construct, time order,
4
+ estimand, and a causal graph or verbal equivalent. Keep data-generating mechanisms
5
+ separate from measurement mechanisms.
6
+
7
+ **Attack:** confounding, reverse causation, selection, attrition, interference,
8
+ measurement non-equivalence, post-treatment conditioning, researcher degrees of
9
+ freedom, and external-validity limits.
10
+
11
+ **Compare:** observations that distinguish mechanisms—timing, negative controls,
12
+ heterogeneous predictions, natural or randomized variation, and measurements that
13
+ do not reuse the motivating outcome. At this stage, identify the discriminator;
14
+ do not turn it into a full design.
15
+
16
+ **Check:** label all already-viewed outcomes as seen. Do not turn an exploratory
17
+ chart into a confirmatory direction on the same data. When the person chooses to
18
+ move toward testing, use fresh or protected evidence under the preregistration
19
+ workflow.
@@ -0,0 +1,17 @@
1
+ # Engineering and product mechanism profile
2
+
3
+ **Draw:** users or components, state transitions, interfaces, timing, feedback
4
+ loops, incentives, and observability. Separate initiating faults from propagation
5
+ and amplification.
6
+
7
+ **Attack:** race conditions, stale state, correlated clients, retries, partial
8
+ failure, telemetry gaps, survivorship, rollout interaction, and mitigation that
9
+ masks rather than identifies the cause.
10
+
11
+ **Compare:** event ordering, trace signatures, invariants, controlled fault
12
+ injection, canaries, and reversible changes. A safe mitigation may be worthwhile
13
+ without proving the root cause; label those outcomes separately.
14
+
15
+ **Check:** ground claims in the actual request path, logs, code, and deployed
16
+ configuration. Do not infer probability from a generic failure pattern and do not
17
+ invent a success threshold from intuition.
@@ -0,0 +1,16 @@
1
+ # Formal theory profile
2
+
3
+ **Draw:** primitives, actors, information, timing, feasible actions, objectives,
4
+ solution concept, and predicted comparative statics. Seek minimal models that
5
+ differ in one consequential assumption.
6
+
7
+ **Attack:** consistency of primitives; existence and multiplicity; hidden
8
+ regularity assumptions; degenerate cases; sign reversals; whether the claimed
9
+ result is encoded directly in an assumption; counterexamples at the boundary.
10
+
11
+ **Compare:** theorem statements, counterexamples, comparative statics, welfare
12
+ ranking, or a prediction that survives when a disputed assumption is relaxed.
13
+
14
+ **Check:** distinguish a known theorem, an adaptation of an established model, a
15
+ new proof route, and a candidate-new proposition. Mathematical validity and
16
+ literature novelty are separate questions.
@@ -0,0 +1,14 @@
1
+ # Generic mechanism profile
2
+
3
+ Use when no specialized inferential risk dominates.
4
+
5
+ **Draw:** actors or objects, state, mechanism chain, assumptions, expected change.
6
+
7
+ **Attack:** missing link, reverse direction, common cause, boundary case,
8
+ measurement artifact, or a null process that yields the same observation.
9
+
10
+ **Compare:** identify a timing, intervention, counterfactual, or failure signature
11
+ on which the candidates diverge.
12
+
13
+ **Check:** separate what the person supplied, what was observed, what was inferred,
14
+ and what remains unverified.
@@ -0,0 +1,16 @@
1
+ # Interpretive and historical research profile
2
+
3
+ **Draw:** candidate interpretations, relevant actors, chronology, proposed motives
4
+ or structures, scope, and the source base each interpretation needs.
5
+
6
+ **Attack:** anachronism, source dependence, archival silence, survivorship,
7
+ translation or category drift, hindsight, and whether the account explains only
8
+ selected cases.
9
+
10
+ **Compare:** contradictory primary sources, chronology, coverage of difficult
11
+ cases, assumptions required, and whether one interpretation explains evidence the
12
+ other treats as exceptional.
13
+
14
+ **Check:** record source type, date, authorship, transmission, independence, and
15
+ contestation. Do not force statistical falsifiability onto a conceptual or
16
+ interpretive claim; demand source-sensitive constraints instead.
@@ -0,0 +1,16 @@
1
+ # Simulation and computational research profile
2
+
3
+ **Draw:** entities, state variables, update rules, scheduler, environment,
4
+ stochasticity, scale, initialization, and observables. Separate properties imposed
5
+ by construction from behavior decided by running.
6
+
7
+ **Attack:** implementation artifact, scheduler dependence, initial-condition
8
+ dependence, finite-size effect, seed instability, parameter tuning, insufficient
9
+ power, invalid proxy, and a control that cannot actually turn red.
10
+
11
+ **Compare:** analytic limits, matched controls, mechanism ablations, sensitivity
12
+ surfaces, seed ensembles, scaling behavior, and out-of-calibration predictions.
13
+
14
+ **Check:** every number must be traceable to an artifact and configuration. Runs
15
+ inside Idea Lab are exploratory and seen; they cannot later serve as blind
16
+ confirmation.
@@ -1,11 +1,11 @@
1
1
  """exloop — human-led exploration with a persistent map.
2
2
 
3
3
  This package exists so that installing newlife (which will depend on it) puts the
4
- exloop skill on the machine without a trip to GitHub. It ships the skill files
4
+ exploration skills on the machine without a trip to GitHub. It ships the skill files
5
5
  and the zero-dependency state helper the skill uses, and nothing else. newlife never
6
6
  imports exloop's code: the interface between the two is files — `handoff` writes into a
7
- newlife question's `origin/`. The skill master is `skills/exloop/` in the exloop
8
- repository; the wheel carries a byte copy under `exloop/skills/`.
7
+ newlife question's `origin/`. The skill masters are under `skills/` in the exloop
8
+ repository; the wheel carries byte copies under `exloop/skills/`.
9
9
  """
10
10
 
11
11
  from __future__ import annotations
@@ -16,7 +16,7 @@ __all__ = ["skills_dir"]
16
16
 
17
17
 
18
18
  def skills_dir() -> Path:
19
- """The directory holding the skill masters (`exloop/SKILL.md` and friends).
19
+ """The directory holding the skill masters (`exloop/`, `idea-lab/`, and friends).
20
20
 
21
21
  In an installed wheel it is `exloop/skills/`, force-included at build time. In an
22
22
  editable checkout the files are the repository's own `skills/`, two levels up from this
exloop-0.1.0/.gitignore DELETED
@@ -1,20 +0,0 @@
1
- node_modules/
2
- dist/
3
- build/
4
- *.egg-info/
5
- *.log
6
- .DS_Store
7
- __pycache__/
8
- .ruff_cache/
9
- *.pyc
10
- .gstack/
11
-
12
- # Local scratch and tool caches, never versioned
13
- tmp/
14
- output/
15
- .workbuddy/
16
- AGENTS.md
17
-
18
- # hatchling copies this file into the sdist as it is, so no path under the sealed
19
- # exploration archive is named here; per-exploration derived caches (npz, wiki caches)
20
- # are listed in the local .git/info/exclude instead.
@@ -1,44 +0,0 @@
1
- [project]
2
- name = "exloop"
3
- version = "0.1.0"
4
- description = "Human-led exploration with a persistent map: the exloop skill for any AI tool that reads SKILL.md, plus the zero-dependency state helper it uses."
5
- # The repository README.md is the author's own (Chinese, linking into private directories); PyPI gets its own page.
6
- readme = "README.pypi.md"
7
- license = "Apache-2.0"
8
- license-files = ["LICENSE"]
9
- requires-python = ">=3.11"
10
- authors = [{ name = "hzshen88" }]
11
- keywords = ["exploration", "research-questions", "skill", "claude-code", "codex", "human-in-the-loop"]
12
- classifiers = [
13
- "Development Status :: 3 - Alpha",
14
- "Intended Audience :: Science/Research",
15
- "Programming Language :: Python :: 3.11",
16
- "Programming Language :: Python :: 3.12",
17
- ]
18
- dependencies = []
19
-
20
- [build-system]
21
- requires = ["hatchling"]
22
- build-backend = "hatchling.build"
23
-
24
- # The master is skills/exloop/ at the repository top, the copy people read and edit; the wheel
25
- # carries a byte copy under exloop/skills/, located via `import exloop; exloop.skills_dir()`.
26
- # newlife's `skills install` uses that to install the exploration skill alongside its own,
27
- # without importing any exloop code.
28
- [tool.hatch.build.targets.wheel]
29
- packages = ["src/exloop"]
30
-
31
- [tool.hatch.build.targets.wheel.force-include]
32
- "skills/exloop" = "exloop/skills/exloop"
33
-
34
- # The sdist uses only-include, not include: include patterns are gitignore-style and unanchored,
35
- # so "README.md" matches every README.md in the tree — on 2026-09-06 that pulled the READMEs of
36
- # 13 sealed explorations, docs/science-superpowers and vendor into the sdist. only-include takes
37
- # exactly these paths. scripts/check_release_artifacts.py compares the built artifacts file by
38
- # file and must pass before anything is published.
39
- [tool.hatch.build.targets.sdist]
40
- only-include = ["src/exloop", "skills/exloop", "README.pypi.md", "LICENSE", "pyproject.toml"]
41
- exclude = [".gitignore"]
42
-
43
- # No [project.urls]: the source repository is private and a public reader cannot open it. Point
44
- # here at the clean public repository once it exists (README.md, the paragraph on going public).
File without changes