exegete 0.14.1a0.dev1__py3-none-any.whl
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.
- exegete/__init__.py +16 -0
- exegete/coder_comparison.py +208 -0
- exegete/cursors.py +218 -0
- exegete/database.py +12621 -0
- exegete/env_settings.py +174 -0
- exegete/memo_privacy.py +215 -0
- exegete/names.py +68 -0
- exegete/new_project.py +1027 -0
- exegete/preview_tokens.py +613 -0
- exegete/project_settings.py +1082 -0
- exegete/pseudonymise.py +2796 -0
- exegete/refi_export.py +645 -0
- exegete/server.py +18899 -0
- exegete/sessions.py +1153 -0
- exegete/state_folder.py +360 -0
- exegete/transition.py +1049 -0
- exegete-0.14.1a0.dev1.dist-info/METADATA +515 -0
- exegete-0.14.1a0.dev1.dist-info/RECORD +24 -0
- exegete-0.14.1a0.dev1.dist-info/WHEEL +5 -0
- exegete-0.14.1a0.dev1.dist-info/entry_points.txt +2 -0
- exegete-0.14.1a0.dev1.dist-info/licenses/COPYING.LESSER +165 -0
- exegete-0.14.1a0.dev1.dist-info/licenses/NOTICE +773 -0
- exegete-0.14.1a0.dev1.dist-info/licenses/legal/GPL-3.0.txt +674 -0
- exegete-0.14.1a0.dev1.dist-info/top_level.txt +1 -0
|
@@ -0,0 +1,515 @@
|
|
|
1
|
+
Metadata-Version: 2.4
|
|
2
|
+
Name: exegete
|
|
3
|
+
Version: 0.14.1a0.dev1
|
|
4
|
+
Summary: Exegete: a qualitative analysis application you use in conversation with an AI assistant, compatible with QualCoder. An MCP server, formerly qualcoder-mcp.
|
|
5
|
+
Author-email: Niccolò Tempini <n.tempini@exeter.ac.uk>
|
|
6
|
+
License-Expression: LGPL-3.0-or-later
|
|
7
|
+
Project-URL: Homepage, https://github.com/nicotem/exegete
|
|
8
|
+
Project-URL: Repository, https://github.com/nicotem/exegete
|
|
9
|
+
Project-URL: Issues, https://github.com/nicotem/exegete/issues
|
|
10
|
+
Project-URL: Changelog, https://github.com/nicotem/exegete/blob/main/CHANGELOG.md
|
|
11
|
+
Project-URL: Privacy, https://github.com/nicotem/exegete/blob/main/PRIVACY.md
|
|
12
|
+
Keywords: qualitative research,qualcoder,mcp,model-context-protocol,claude,qda,caqdas
|
|
13
|
+
Classifier: Development Status :: 3 - Alpha
|
|
14
|
+
Classifier: Intended Audience :: Science/Research
|
|
15
|
+
Classifier: Programming Language :: Python :: 3
|
|
16
|
+
Classifier: Programming Language :: Python :: 3.10
|
|
17
|
+
Classifier: Programming Language :: Python :: 3.11
|
|
18
|
+
Classifier: Programming Language :: Python :: 3.12
|
|
19
|
+
Classifier: Programming Language :: Python :: 3.13
|
|
20
|
+
Classifier: Operating System :: OS Independent
|
|
21
|
+
Classifier: Topic :: Scientific/Engineering
|
|
22
|
+
Requires-Python: >=3.10
|
|
23
|
+
Description-Content-Type: text/markdown
|
|
24
|
+
License-File: COPYING.LESSER
|
|
25
|
+
License-File: legal/GPL-3.0.txt
|
|
26
|
+
License-File: NOTICE
|
|
27
|
+
Requires-Dist: mcp<2,>=1.17.0
|
|
28
|
+
Provides-Extra: dev
|
|
29
|
+
Requires-Dist: pytest>=7.0.0; extra == "dev"
|
|
30
|
+
Requires-Dist: pytest-asyncio>=0.21.0; extra == "dev"
|
|
31
|
+
Requires-Dist: xmlschema>=3.0.0; extra == "dev"
|
|
32
|
+
Requires-Dist: hypothesis>=6.100; extra == "dev"
|
|
33
|
+
Requires-Dist: build>=1.2; extra == "dev"
|
|
34
|
+
Requires-Dist: twine>=6.1; extra == "dev"
|
|
35
|
+
Dynamic: license-file
|
|
36
|
+
|
|
37
|
+
<p align="center"><img src="https://raw.githubusercontent.com/nicotem/exegete/main/docs/brand/exegete-lockup.png" alt="The Exegete mark, a braided ring, beside the name Exegete" width="324"></p>
|
|
38
|
+
|
|
39
|
+
# Exegete
|
|
40
|
+
|
|
41
|
+
**A qualitative analysis application you use in conversation with an
|
|
42
|
+
AI assistant, compatible with QualCoder.**
|
|
43
|
+
|
|
44
|
+
Exegete (formerly qualcoder-mcp) is an application for qualitative
|
|
45
|
+
data analysis in its own right. You use it by talking with an AI
|
|
46
|
+
assistant, such as Claude Desktop, and it creates and works on projects
|
|
47
|
+
in the format of [QualCoder](https://github.com/ccbogel/QualCoder) (a
|
|
48
|
+
free program for qualitative data analysis). It stays compatible with
|
|
49
|
+
QualCoder, so you can open the same project there whenever you like,
|
|
50
|
+
one program at a time. It is not an add-on to QualCoder, and you do not
|
|
51
|
+
need QualCoder to start. It has no window of its own: your assistant
|
|
52
|
+
starts it, and its work appears in the conversation.
|
|
53
|
+
|
|
54
|
+
You ask in your own words, and the assistant uses Exegete's tools to do
|
|
55
|
+
it: start a project, bring in transcripts, suggest codings for the
|
|
56
|
+
files you choose, compare two coders, replace participants' names and
|
|
57
|
+
export reports. The assistant suggests; whether a code fits the words,
|
|
58
|
+
and what a coding means, stays your judgement.
|
|
59
|
+
|
|
60
|
+
- **What it covers today:** creating a project (Experimental); cases
|
|
61
|
+
and their attributes; bringing in text through the conversation;
|
|
62
|
+
coding, with each suggested coding waiting for your decision; the
|
|
63
|
+
codebook (making, renaming, moving, merging and deleting codes and
|
|
64
|
+
categories); memos, annotations and a journal; searching the texts,
|
|
65
|
+
the codings and the memos; reports and exports; comparing two coders;
|
|
66
|
+
replacing participants' names with pseudonyms; and backups, with a
|
|
67
|
+
way to restore one.
|
|
68
|
+
- **What still needs QualCoder:** bringing in documents other than
|
|
69
|
+
text (Word, PDF, images, audio, video); seeing the coding highlighted
|
|
70
|
+
in the text; coding images, audio and video, or an area of a PDF
|
|
71
|
+
page; and graphs. "What you need, at each stage", below, and the
|
|
72
|
+
table under "Three commitments", which compares the two programs row
|
|
73
|
+
by row, together list the rest.
|
|
74
|
+
- **The aim** is the whole life of a project in Exegete, from its
|
|
75
|
+
creation to the finished analysis, without needing QualCoder for any
|
|
76
|
+
of it, while every project stays one that QualCoder opens.
|
|
77
|
+
|
|
78
|
+
Exegete runs on your computer, reads and writes QualCoder's project
|
|
79
|
+
format, and follows QualCoder's rules wherever the two must agree, so
|
|
80
|
+
your project stays a QualCoder project. Technically, Exegete is an MCP
|
|
81
|
+
server: the Model Context Protocol (MCP) is only the standard way an
|
|
82
|
+
assistant reaches tools on your computer, which is why the same Exegete
|
|
83
|
+
can be used from more than one assistant. Claude Desktop is the easiest
|
|
84
|
+
start; "Start here", below, also covers OpenAI's ChatGPT desktop app and
|
|
85
|
+
Codex.
|
|
86
|
+
|
|
87
|
+
**What it is not.** It is not a remote control for the QualCoder
|
|
88
|
+
application: it does not start or control QualCoder, and QualCoder need
|
|
89
|
+
not be running while you work. It is not QualCoder, and it is not made
|
|
90
|
+
or endorsed by QualCoder's developers (QualCoder is free software by
|
|
91
|
+
Colin Curtain and contributors). It is a separate program that reads
|
|
92
|
+
and writes QualCoder project files; it contains a small number of
|
|
93
|
+
routines and values taken from QualCoder so that its results match
|
|
94
|
+
QualCoder's exactly, and [NOTICE](https://github.com/nicotem/exegete/blob/main/NOTICE)
|
|
95
|
+
lists them, with where each comes from.
|
|
96
|
+
|
|
97
|
+
It is an experimental early version (an alpha), built by one
|
|
98
|
+
researcher. Questions, problems and ideas go to
|
|
99
|
+
[GitHub Issues](https://github.com/nicotem/exegete/issues) (a
|
|
100
|
+
free GitHub account is needed), not email. Never put participant data
|
|
101
|
+
in an issue.
|
|
102
|
+
|
|
103
|
+
## Where your data goes
|
|
104
|
+
|
|
105
|
+
Exegete runs on your computer, has no online service of its own
|
|
106
|
+
and sends nothing anywhere itself. What the assistant reads through it
|
|
107
|
+
(passages, codes, memos, names) becomes part of the conversation and
|
|
108
|
+
goes to the AI provider behind your assistant: Anthropic for Claude
|
|
109
|
+
Desktop and Claude's other apps, OpenAI for ChatGPT's desktop app and
|
|
110
|
+
Codex, and no outside provider at all with a fully local model, which
|
|
111
|
+
needs another assistant, such as LM Studio, set up by the Terminal
|
|
112
|
+
route (installing by typing commands, as INSTALL.md shows;
|
|
113
|
+
Experimental: no local model has yet been evaluated with Exegete).
|
|
114
|
+
Text you bring in through the conversation (pasted or attached, then
|
|
115
|
+
imported) goes to the provider in full; a file you import in QualCoder
|
|
116
|
+
does not, only what the assistant later reads of it.
|
|
117
|
+
|
|
118
|
+
Codex, OpenAI's route, also reads and changes files by itself, outside
|
|
119
|
+
Exegete, in the folder you give it. OpenAI's page on Codex's sandbox
|
|
120
|
+
says of the mode in which it may edit: "The agent can read files, edit
|
|
121
|
+
within the workspace, and run routine local commands inside that
|
|
122
|
+
boundary." Its page on approvals adds that even in the read-only mode
|
|
123
|
+
"Codex can read files and run commands within the read-only sandbox."
|
|
124
|
+
What Codex reads that way goes to OpenAI too, and Exegete's protections
|
|
125
|
+
(the `#####` mark below, your approval before anything is written, the
|
|
126
|
+
backups) do not apply to it. So give Codex a folder of its own, with no
|
|
127
|
+
study files in it ("ChatGPT's desktop app and Codex", below, says how).
|
|
128
|
+
|
|
129
|
+
Your project, its backups, your exports, the lists of suggestions
|
|
130
|
+
waiting for your review, Claude Desktop's own log of the extension
|
|
131
|
+
(which keeps a copy of every request and answer, names and quoted text
|
|
132
|
+
included; INSTALL.md says where), and, with Codex, its session files in
|
|
133
|
+
`~/.codex`, which keep what Exegete's tools returned (PRIVACY.md says
|
|
134
|
+
more), stay on your computer, unless they are in a folder that iCloud,
|
|
135
|
+
OneDrive or another sync service copies.
|
|
136
|
+
Exegete never passes the part of a memo from a `#####` mark onward
|
|
137
|
+
(QualCoder's mark for a private note) to the assistant, whichever
|
|
138
|
+
QualCoder made the project. The mark works in memos, annotations and
|
|
139
|
+
journal entries, not in the text of a transcript, and exported files
|
|
140
|
+
keep the whole memo, private part included. Replacing names reduces the
|
|
141
|
+
risk; it does not make anyone anonymous.
|
|
142
|
+
|
|
143
|
+
Which provider, and under which terms, is decided by your assistant and
|
|
144
|
+
your account, not by Exegete. On a personal Claude plan (Free,
|
|
145
|
+
Pro or Max), open https://claude.ai/settings/data-privacy-controls and
|
|
146
|
+
check the Model Improvement setting yourself (Anthropic's consumer
|
|
147
|
+
terms allow training on your conversations "unless you opt out of
|
|
148
|
+
training through your account settings"; PRIVACY.md quotes them, with
|
|
149
|
+
the exceptions) before you use participant data. With ChatGPT's desktop
|
|
150
|
+
app or Codex, OpenAI's terms apply. OpenAI's Help Center says: "When
|
|
151
|
+
you use our services for individuals, such as ChatGPT and Codex, we may
|
|
152
|
+
use your content to train our models." It also says: "To opt out, turn
|
|
153
|
+
off Improve the model for everyone under Settings > Data controls in
|
|
154
|
+
ChatGPT, or select Do not train on my content in our Privacy Portal."
|
|
155
|
+
Do one of the two before you use participant data; Codex's "Include
|
|
156
|
+
environments" is a separate setting. (Read from the Internet Archive's
|
|
157
|
+
copy of 28 September 2026: PRIVACY.md gives its address, the terms for
|
|
158
|
+
business plans, and what OpenAI says about that setting.) On an
|
|
159
|
+
account your university or employer provides, ask whoever manages it
|
|
160
|
+
which terms apply.
|
|
161
|
+
[PRIVACY.md](https://github.com/nicotem/exegete/blob/main/PRIVACY.md)
|
|
162
|
+
quotes the terms, and covers consent, institutional accounts and fully
|
|
163
|
+
local models: read it before you use participant data.
|
|
164
|
+
|
|
165
|
+
## Start here
|
|
166
|
+
|
|
167
|
+
### What you need, at each stage
|
|
168
|
+
|
|
169
|
+
- **To start:** Claude Desktop on macOS or Windows, and the extension
|
|
170
|
+
(the steps follow), or one of OpenAI's apps (after them). QualCoder is
|
|
171
|
+
not needed to start. Leave the
|
|
172
|
+
extension's "Tool set" setting as it comes (`lifecycle`): with it you
|
|
173
|
+
can create a project, add cases and attributes, bring in text through
|
|
174
|
+
the conversation, make codes and code the text, all from the
|
|
175
|
+
conversation. The other two choices, `full` and `core`, cannot create
|
|
176
|
+
a project; with them the extension works on projects that already
|
|
177
|
+
exist.
|
|
178
|
+
- **QualCoder is recommended from the start, and needed** to bring in
|
|
179
|
+
documents (Word, PDF, images, audio, video) and any text you would
|
|
180
|
+
rather not pass through the conversation (Exegete imports only
|
|
181
|
+
text the assistant hands it); to see the coding highlighted in the
|
|
182
|
+
text; to code images, audio, video or an area of a PDF page; for
|
|
183
|
+
graphs; and for the reports in its Reports menu.
|
|
184
|
+
[Download QualCoder](https://github.com/ccbogel/QualCoder/releases):
|
|
185
|
+
3.8.2, the release marked "Latest", further down the page, for
|
|
186
|
+
Windows or a Mac with Apple Silicon (M1 or later; QualCoder offers no
|
|
187
|
+
download for older Intel Macs). Its notes on that page say how to
|
|
188
|
+
open it the first time. The "4.0-Beta" at the top also works, but it
|
|
189
|
+
is a test version, and Exegete cannot tell when it has your
|
|
190
|
+
project open (see "One program at a time" below).
|
|
191
|
+
- **The Terminal route**
|
|
192
|
+
([INSTALL.md](https://github.com/nicotem/exegete/blob/main/INSTALL.md)),
|
|
193
|
+
which OpenAI's apps take too, needs Python 3.10 or newer. Its standard
|
|
194
|
+
tool set, `full`, cannot create a project: use a project made in
|
|
195
|
+
QualCoder, or switch project creation on as INSTALL.md shows (its
|
|
196
|
+
steps for OpenAI's apps do).
|
|
197
|
+
- **Projects** from QualCoder 3.8.2 and the 4.0 beta work (see "Three
|
|
198
|
+
commitments" below). A project from a QualCoder older than 3.8 must
|
|
199
|
+
be opened once in QualCoder 3.8 or newer, which updates it as it
|
|
200
|
+
opens, and closed again before Exegete can change it (the
|
|
201
|
+
oldest formats cannot even be read before that).
|
|
202
|
+
|
|
203
|
+
### Claude Desktop, with one click
|
|
204
|
+
|
|
205
|
+
1. **Get Claude Desktop**, the Claude app you install on your computer
|
|
206
|
+
(macOS or Windows), not Claude in a web browser or on a phone:
|
|
207
|
+
https://claude.ai/download. Sign in.
|
|
208
|
+
2. **Download the extension.** Open the
|
|
209
|
+
[Releases page](https://github.com/nicotem/exegete/releases)
|
|
210
|
+
and take the release at the top (every release of this alpha is
|
|
211
|
+
marked Pre-release). Under its Assets, download the file whose name
|
|
212
|
+
ends in `.mcpb` (for example `exegete-0.14.1-alpha.mcpb`), not
|
|
213
|
+
"Source code".
|
|
214
|
+
3. **Install it.** Double-click the file (if Claude does not open, drag
|
|
215
|
+
the file onto Claude's window). Claude Desktop shows its usual
|
|
216
|
+
warning to install only extensions whose developer you trust: click
|
|
217
|
+
Install, and Install again when it says it must fetch a few things it
|
|
218
|
+
needs (a minute or two, online). No Terminal, no configuration file.
|
|
219
|
+
|
|
220
|
+
To check: start a new conversation, click "+", then Connectors:
|
|
221
|
+
Exegete is listed. Claude asks before it uses a tool; "Allow
|
|
222
|
+
once" keeps it asking ("What it does", below, says why that matters).
|
|
223
|
+
|
|
224
|
+
The extension is not signed by its developer; a computer or Claude
|
|
225
|
+
account managed by your university or employer may refuse it.
|
|
226
|
+
[INSTALL.md, "Claude Desktop: the one-click extension"](https://github.com/nicotem/exegete/blob/main/INSTALL.md#claude-desktop-the-one-click-extension-recommended)
|
|
227
|
+
says what you will see then, and what the extension's two settings do.
|
|
228
|
+
|
|
229
|
+
### ChatGPT's desktop app and Codex (OpenAI)
|
|
230
|
+
|
|
231
|
+
By OpenAI's documentation, its apps that run on your computer can
|
|
232
|
+
start Exegete there: the ChatGPT desktop app (macOS, Windows, or Linux
|
|
233
|
+
in preview) and Codex, OpenAI's command line and editor extension. The
|
|
234
|
+
desktop app, the command line and the editor extension read one
|
|
235
|
+
settings file. ChatGPT in a web browser cannot start Exegete: it runs
|
|
236
|
+
on OpenAI's computers and reaches only tools on the internet. (OpenAI
|
|
237
|
+
also offers a tunnel that connects the web to a program on your
|
|
238
|
+
computer; it is made for developers and IT teams, and this project does
|
|
239
|
+
not recommend it for a project with participants' data. Enterprise
|
|
240
|
+
workspaces have one more case, which OpenAI does not document for tools
|
|
241
|
+
like Exegete: INSTALL.md says more.)
|
|
242
|
+
|
|
243
|
+
ChatGPT's phone app cannot start Exegete either, but by OpenAI's
|
|
244
|
+
documentation it can use it through your computer. OpenAI's Remote,
|
|
245
|
+
set up in the ChatGPT desktop app on a Mac or Windows computer, lets
|
|
246
|
+
the phone start and approve work that the computer runs, and "MCP
|
|
247
|
+
servers, skills, browser access, and Computer Use come from that host's
|
|
248
|
+
configuration" (OpenAI,
|
|
249
|
+
<https://learn.chatgpt.com/docs/remote-connections>, read on 30
|
|
250
|
+
September 2026). So a phone paired with that computer can use the
|
|
251
|
+
Exegete set up there, and show participants' words. This project has
|
|
252
|
+
not tried it, and suggests leaving Remote off on a computer where
|
|
253
|
+
Exegete works on participants' data.
|
|
254
|
+
|
|
255
|
+
These apps have no one-click extension. The steps:
|
|
256
|
+
|
|
257
|
+
1. **Install Exegete** by the Terminal route (a few typed commands).
|
|
258
|
+
2. **Add Exegete to the settings file**, with the lines that make the
|
|
259
|
+
app ask you before every change Exegete makes. Without them, Codex
|
|
260
|
+
asks only before a tool that changes or deletes something, and runs
|
|
261
|
+
without asking the tools that add to your project (importing a
|
|
262
|
+
text, applying approved codings) and the one that sends the real
|
|
263
|
+
names in your pseudonym list to OpenAI.
|
|
264
|
+
3. **Give Codex a folder of its own.** Make an empty folder for these
|
|
265
|
+
chats (INSTALL.md suggests `exegete-chats` in your home folder) and
|
|
266
|
+
open it as Codex's place to work; on the command line, start `codex`
|
|
267
|
+
inside it. Never give it your home folder, Documents, your projects
|
|
268
|
+
folder or a folder with transcripts: Codex reads and changes the
|
|
269
|
+
files there by itself, outside Exegete ("Where your data goes",
|
|
270
|
+
above).
|
|
271
|
+
4. **Restart the app**, select Codex from the ChatGPT dropdown in the
|
|
272
|
+
desktop app (OpenAI documents this kind of tool there), and keep the
|
|
273
|
+
app's permissions on "Ask for approval".
|
|
274
|
+
|
|
275
|
+
[INSTALL.md, "ChatGPT's desktop app and Codex"](https://github.com/nicotem/exegete/blob/main/INSTALL.md#chatgpts-desktop-app-and-codex-experimental)
|
|
276
|
+
has each step, which OpenAI plans include these apps, and what to do if
|
|
277
|
+
Exegete does not start. This route is Experimental: it follows OpenAI's
|
|
278
|
+
documentation, read on 30 September 2026, and has not yet been tried by
|
|
279
|
+
this project. What the assistant reads goes to OpenAI ("Where your data
|
|
280
|
+
goes", above).
|
|
281
|
+
|
|
282
|
+
### A first session
|
|
283
|
+
|
|
284
|
+
**A first project.** Creating a project is Experimental (new in 0.14,
|
|
285
|
+
and few people have used it yet). With the extension's settings as they
|
|
286
|
+
come, ask the assistant, for example: "Create a new QualCoder project
|
|
287
|
+
called Practice." It is made in QualCoder 4.0's format, in the
|
|
288
|
+
extension's "Folder for projects" (with OpenAI's apps, the folder in
|
|
289
|
+
your settings entry): by default a folder called "QualCoder projects"
|
|
290
|
+
in your home folder (the one named after you), not in Documents, which
|
|
291
|
+
iCloud or OneDrive may sync. QualCoder 3.8.2 opens it too, but shows a
|
|
292
|
+
code made under another code as an ordinary code; before you move such
|
|
293
|
+
a project between 3.8.2 and 4.0, read
|
|
294
|
+
["Opening it in QualCoder" in TOOLS.md](https://github.com/nicotem/exegete/blob/main/TOOLS.md#starting-a-project-from-the-conversation-experimental).
|
|
295
|
+
The assistant asks for the coder name you use in QualCoder (in QualCoder's
|
|
296
|
+
Project menu, Settings, where it says "Current coder"; on a Mac it may
|
|
297
|
+
be under the QualCoder menu instead), so that what is coded through the
|
|
298
|
+
conversation is kept apart from what you code in QualCoder; if you do
|
|
299
|
+
not use QualCoder yet, say so, and the project is still created.
|
|
300
|
+
[TOOLS.md, "Starting a project from the conversation"](https://github.com/nicotem/exegete/blob/main/TOOLS.md#starting-a-project-from-the-conversation-experimental)
|
|
301
|
+
has the rules.
|
|
302
|
+
|
|
303
|
+
To see it in QualCoder: Project, Open Project, and choose
|
|
304
|
+
`Practice.qda` in that folder (on a Mac, Finder's Go menu, Home, opens
|
|
305
|
+
your home folder). Practise with text that is not from a participant: a
|
|
306
|
+
page you write yourself, or a published text you may use. Anything you
|
|
307
|
+
paste or attach goes to the AI provider in full (to Anthropic with
|
|
308
|
+
Claude, to OpenAI with ChatGPT's desktop app or Codex; "Where your data
|
|
309
|
+
goes", above).
|
|
310
|
+
|
|
311
|
+
**A project you already have.** Try the assistant on a practice
|
|
312
|
+
project first. For a real study, ask the assistant to copy your project
|
|
313
|
+
into its folder for projects and to work on the copy: your original is not
|
|
314
|
+
touched, and QualCoder opens the copy like any other project.
|
|
315
|
+
|
|
316
|
+
**One program at a time.** Before the assistant changes a project, close
|
|
317
|
+
that project in QualCoder. With QualCoder 3.8.2 an open project is
|
|
318
|
+
detected and the change is refused; the 4.0 beta cannot be detected, so
|
|
319
|
+
there only you can make sure. An open 4.0 window shows the assistant's
|
|
320
|
+
changes only once the project is opened again.
|
|
321
|
+
|
|
322
|
+
### Other assistants, and updates
|
|
323
|
+
|
|
324
|
+
**Other assistants.** Claude Code, LM Studio (fully local) and other
|
|
325
|
+
MCP hosts (assistants that can use MCP tools), and Claude Desktop set
|
|
326
|
+
up by hand, take the Terminal route:
|
|
327
|
+
[INSTALL.md](https://github.com/nicotem/exegete/blob/main/INSTALL.md)
|
|
328
|
+
has each.
|
|
329
|
+
|
|
330
|
+
**Updating.** Updates are manual, and Exegete does not look for
|
|
331
|
+
new versions itself: look at the Releases page now and then (with a
|
|
332
|
+
GitHub account, Watch, then Custom, then Releases, sends you a notice
|
|
333
|
+
of each). Install the newer `.mcpb` the same way; on the Terminal
|
|
334
|
+
route, which OpenAI's apps take too,
|
|
335
|
+
[INSTALL.md, "Updating the MCP Server"](https://github.com/nicotem/exegete/blob/main/INSTALL.md#updating-the-mcp-server)
|
|
336
|
+
has the one command. An update never touches your projects. If you
|
|
337
|
+
used this program as qualcoder-mcp, nothing you set up stops working:
|
|
338
|
+
[INSTALL.md, "Coming from qualcoder-mcp"](https://github.com/nicotem/exegete/blob/main/INSTALL.md#coming-from-qualcoder-mcp)
|
|
339
|
+
says what changed and what you may change.
|
|
340
|
+
|
|
341
|
+
## What it does that QualCoder does not
|
|
342
|
+
|
|
343
|
+
QualCoder has AI features of its own: in 3.8.2 an AI chat, and an AI
|
|
344
|
+
search that finds passages for you to code; in the 4.0 beta, an
|
|
345
|
+
assistant that changes the project from inside QualCoder's window,
|
|
346
|
+
within the AI permission you set there. In Exegete the work happens in
|
|
347
|
+
the conversation, with QualCoder closed, and QualCoder opens the same
|
|
348
|
+
project whenever you like, one program at a time. Beside the work the
|
|
349
|
+
two programs share (the table under "Three commitments" compares them
|
|
350
|
+
row by row), Exegete adds:
|
|
351
|
+
|
|
352
|
+
- **Suggestions that wait for your decision.** Each suggested coding is
|
|
353
|
+
checked to quote the file's text word for word and recorded with the
|
|
354
|
+
assistant's reading of it (explicit or interpretive); the assistant is
|
|
355
|
+
told to bring it to you with the passage, that reading and its
|
|
356
|
+
reason. Suggested codings, and proposed codes, wait in a review list
|
|
357
|
+
outside the project and are written only once approved in the
|
|
358
|
+
conversation. The assistant passes your decisions on:
|
|
359
|
+
Exegete records the approval the assistant reports and cannot
|
|
360
|
+
tell whether you gave it. So keep your assistant asking before each
|
|
361
|
+
change ("allow once" in Claude, and answering each prompt in Codex,
|
|
362
|
+
for the tools that decide and write:
|
|
363
|
+
`update_suggestion_status`, `update_proposal_status`, `apply_codings`
|
|
364
|
+
and `create_proposed_codes`), and before anything is applied, check
|
|
365
|
+
that the counts it shows (approved, rejected, pending) match what you
|
|
366
|
+
said. If they do not, say so and refuse `apply_codings` until they do:
|
|
367
|
+
no coding is written before it runs.
|
|
368
|
+
- **A preview before the larger changes.** Merging or deleting codes
|
|
369
|
+
and categories, replacing names in stored text, and restoring or
|
|
370
|
+
pruning backups each show first what would change, and go ahead only
|
|
371
|
+
if nothing has changed since the preview. (QualCoder 4.0's assistant
|
|
372
|
+
previews its deletions of codes and categories too.)
|
|
373
|
+
- **Replacing names in text you have already coded.** The names you
|
|
374
|
+
list are replaced in the stored text, every coding moves with the
|
|
375
|
+
words, and a count shows where the names you listed remain; other
|
|
376
|
+
details that identify people are not looked for. (QualCoder applies
|
|
377
|
+
its list of pseudonyms when a file is imported.)
|
|
378
|
+
- **Coder comparison**: per-code agreement between two coders, with
|
|
379
|
+
QualCoder's own coefficient and Cohen's kappa side by side.
|
|
380
|
+
- **Codings made through the conversation under a coder name you
|
|
381
|
+
choose** for each project, kept apart in QualCoder's coder lists from
|
|
382
|
+
the codings you make in QualCoder.
|
|
383
|
+
|
|
384
|
+
## Three commitments
|
|
385
|
+
|
|
386
|
+
**Compatibility with QualCoder.** Exegete reads and writes
|
|
387
|
+
projects from QualCoder 3.8.2, the current release (project format v14),
|
|
388
|
+
from the QualCoder 4.0 beta (format v17), and in the formats between
|
|
389
|
+
(QualCoder's own format numbers; you need not know them). What a
|
|
390
|
+
project supports is read from the project itself, not from a version
|
|
391
|
+
number, and a project in a newer format is not written to until
|
|
392
|
+
Exegete has been checked against it. Where QualCoder has a rule,
|
|
393
|
+
Exegete follows it, and any departure is named with its reason.
|
|
394
|
+
[TOOLS.md, "Supported QualCoder versions"](https://github.com/nicotem/exegete/blob/main/TOOLS.md#supported-qualcoder-versions)
|
|
395
|
+
has the detail, including what differs with the 4.0 beta.
|
|
396
|
+
|
|
397
|
+
**Symmetry: the same work in either place, as a commitment.** The aim
|
|
398
|
+
is that the analytic work you can do in QualCoder, you can do from the
|
|
399
|
+
conversation. It is not yet a fact: today the two differ in both
|
|
400
|
+
directions, and each release moves rows. Checked on 29 September 2026,
|
|
401
|
+
this program's 0.14.0 (then called qualcoder-mcp) against QualCoder
|
|
402
|
+
3.8.2 and the 4.0-Beta pre-release:
|
|
403
|
+
|
|
404
|
+
| | In QualCoder | From the conversation, with Exegete |
|
|
405
|
+
|---|---|---|
|
|
406
|
+
| Create a project | Yes | Yes, in the extension's default tool set (Experimental; from 0.14) |
|
|
407
|
+
| Import sources | Text, documents, PDFs, images, audio, video | Text the assistant hands over |
|
|
408
|
+
| Code text, including a PDF's text | Yes | Yes, once approved in the conversation, as the assistant reports it (not a PDF with no text layer) |
|
|
409
|
+
| Code images, audio, video, or an area of a PDF page | Yes | No |
|
|
410
|
+
| Codebook: create, rename, move, merge, delete | Yes | Yes, with a preview before merging or deleting; nesting an existing code under another is done in QualCoder |
|
|
411
|
+
| Cases, attributes, memos, annotations, journal | Yes | Yes, except deleting a case, an attribute or a journal entry, changing a journal entry, and taking a file out of a case |
|
|
412
|
+
| Reports | Many, in its Reports menu | Some: codebook, coding report, frequencies, case-by-code matrix, co-occurrence |
|
|
413
|
+
| REFI-QDA exchange (the file other analysis packages, such as ATLAS.ti, MAXQDA or NVivo, can open) | Import and export | Export only, being withdrawn (removed in 0.15) |
|
|
414
|
+
| Graphs | Yes | No |
|
|
415
|
+
| Comparing two coders | Per code, with a figure QualCoder labels Kappa | The same figure, and Cohen's kappa beside it; set against the AI coder name it is not agreement between independent coders |
|
|
416
|
+
| Pseudonyms | Applied when a file is imported | Also applied to text already coded |
|
|
417
|
+
| AI suggestions for coding | 3.8.2: an AI search finds passages, which you code; 4.0 beta: its assistant codes as it works, within the AI permission you set (read only stops it), with undo | Checked to quote the text word for word, and written only once approved in the conversation, as the assistant reports it |
|
|
418
|
+
|
|
419
|
+
**Interoperability.** Work on a project in QualCoder and from the
|
|
420
|
+
conversation, one at a time: close the project in QualCoder before the
|
|
421
|
+
assistant changes it. Exegete refuses to write while a released
|
|
422
|
+
QualCoder (3.8.2) has the project open; the 4.0 beta leaves no reliable
|
|
423
|
+
sign, so there it can only warn, and an open 4.0 window shows
|
|
424
|
+
Exegete's changes only after the project is opened again.
|
|
425
|
+
QualCoder's own export (Project, Export, REFI-QDA Project export)
|
|
426
|
+
writes the exchange file other analysis packages read. If you edit
|
|
427
|
+
transcripts in QualCoder 3.8.2's coding view, read
|
|
428
|
+
[its edit-mode caution](https://github.com/nicotem/exegete/blob/main/TOOLS.md#qualcoder-382-and-edit-mode-a-caution)
|
|
429
|
+
first: in that version, leaving edit mode after changing a text can
|
|
430
|
+
delete codings near its new end, whether or not Exegete is used.
|
|
431
|
+
|
|
432
|
+
**QualCoder's own MCP server** (checked 29 September 2026). QualCoder
|
|
433
|
+
4.0's assistant works through an MCP server built into QualCoder. In
|
|
434
|
+
the 4.0-Beta pre-release (3 September 2026), that server serves only
|
|
435
|
+
QualCoder's own window. QualCoder's pull request (a proposed change to
|
|
436
|
+
its code) [#1571](https://github.com/ccbogel/QualCoder/pull/1571),
|
|
437
|
+
merged on 10 September 2026, adds a setting, off by default, that opens
|
|
438
|
+
it to MCP hosts on the same computer while QualCoder runs, for the
|
|
439
|
+
project open in QualCoder. It is on QualCoder's development version and
|
|
440
|
+
in no release yet; its author, kaixxx, proposes that QualCoder release
|
|
441
|
+
an official MCP server with QualCoder 4.0's final release.
|
|
442
|
+
[TOOLS.md, "Supported QualCoder versions"](https://github.com/nicotem/exegete/blob/main/TOOLS.md#supported-qualcoder-versions)
|
|
443
|
+
gives the commits these facts were read at.
|
|
444
|
+
|
|
445
|
+
This project welcomes QualCoder's own server, and is ready to
|
|
446
|
+
cooperate with QualCoder's developers. Exegete has an aim of its own:
|
|
447
|
+
that you can run a whole project, from its creation to the finished
|
|
448
|
+
analysis, from the conversation, with QualCoder as a companion that
|
|
449
|
+
opens the same project at any time. That is a direction, not yet a
|
|
450
|
+
fact: today QualCoder is still needed for several things, among them
|
|
451
|
+
bringing in documents, coding images, audio and video, and graphs
|
|
452
|
+
("What you need, at each stage", above, lists them). On the way there,
|
|
453
|
+
the commitments above hold: every project stays a QualCoder project,
|
|
454
|
+
in QualCoder's format; Exegete follows QualCoder's rules and
|
|
455
|
+
names any departure with its reason; and you work on a project in one
|
|
456
|
+
program at a time.
|
|
457
|
+
|
|
458
|
+
## Read next
|
|
459
|
+
|
|
460
|
+
- [INSTALL.md](https://github.com/nicotem/exegete/blob/main/INSTALL.md):
|
|
461
|
+
every way to install and set up, choosing your AI host, updating, and
|
|
462
|
+
what to do when it does not start.
|
|
463
|
+
- [TOOLS.md](https://github.com/nicotem/exegete/blob/main/TOOLS.md):
|
|
464
|
+
every tool, what it reads and writes, how the tools follow QualCoder's
|
|
465
|
+
conventions, and example requests.
|
|
466
|
+
- [AI_CODING_GUIDE.md](https://github.com/nicotem/exegete/blob/main/AI_CODING_GUIDE.md)
|
|
467
|
+
and [AI_CODING_WORKFLOW.md](https://github.com/nicotem/exegete/blob/main/AI_CODING_WORKFLOW.md):
|
|
468
|
+
the coding loop, with example conversations.
|
|
469
|
+
- [PRIVACY.md](https://github.com/nicotem/exegete/blob/main/PRIVACY.md):
|
|
470
|
+
where your data goes, in full.
|
|
471
|
+
- [CHANGELOG.md](https://github.com/nicotem/exegete/blob/main/CHANGELOG.md):
|
|
472
|
+
what changed in each release.
|
|
473
|
+
- [CONTRIBUTING.md](https://github.com/nicotem/exegete/blob/main/CONTRIBUTING.md):
|
|
474
|
+
reporting problems, proposing changes, and how the project is built
|
|
475
|
+
and tested.
|
|
476
|
+
- [SUPPORT.md](https://github.com/nicotem/exegete/blob/main/SUPPORT.md):
|
|
477
|
+
GitHub Issues only.
|
|
478
|
+
- [NOTICE](https://github.com/nicotem/exegete/blob/main/NOTICE):
|
|
479
|
+
every routine, value and fact of the file format taken from QualCoder.
|
|
480
|
+
|
|
481
|
+
## What comes next
|
|
482
|
+
|
|
483
|
+
- v0.15: undo for what a session did; when names are replaced,
|
|
484
|
+
choosing which places to leave as they are; and the removal of the
|
|
485
|
+
tools and options 0.14 marks as going (TOOLS.md names each, the
|
|
486
|
+
REFI-QDA export among them)
|
|
487
|
+
- v0.16: more of the work from the conversation: codes that occur
|
|
488
|
+
together, the code tree and code counts by attribute, as tables;
|
|
489
|
+
PDF text labelled as QualCoder's extraction; and counts of the places
|
|
490
|
+
replacing names cannot reach
|
|
491
|
+
- v0.17: a Manual, and codings placed by the words quoted rather than
|
|
492
|
+
by position
|
|
493
|
+
- Later: coding images, audio, video and areas of PDF pages; more work
|
|
494
|
+
alongside QualCoder 4.0; and changes testers ask for
|
|
495
|
+
([file yours](https://github.com/nicotem/exegete/issues))
|
|
496
|
+
|
|
497
|
+
## Disclaimer
|
|
498
|
+
|
|
499
|
+
This software is provided "as is", without warranty of any kind, express or implied. The authors accept no responsibility or liability for any damage, data loss, or other issues arising from the use of this software. Users are solely responsible for ensuring the integrity and backup of their QualCoder projects. Always work on copies of your data, not originals.
|
|
500
|
+
|
|
501
|
+
## Licence
|
|
502
|
+
|
|
503
|
+
From v0.13, Exegete is licensed under the GNU Lesser General Public License, version 3 or (at your option) any later version (`LGPL-3.0-or-later`), which is QualCoder's own licence. The licence texts are [COPYING.LESSER](https://github.com/nicotem/exegete/blob/main/COPYING.LESSER) and the GNU General Public License, version 3, which the Lesser licence incorporates: [legal/GPL-3.0.txt](https://github.com/nicotem/exegete/blob/main/legal/GPL-3.0.txt) in this repository, and the same text at [https://www.gnu.org/licenses/gpl-3.0.txt](https://www.gnu.org/licenses/gpl-3.0.txt).
|
|
504
|
+
|
|
505
|
+
Every release up to and including 0.12.1 was published under the MIT License, and this project's own code in those releases remains available under those terms. Those releases also contained some of the QualCoder-derived items NOTICE lists; those items were always under QualCoder's licence, LGPL-3.0-or-later, whatever those releases declared.
|
|
506
|
+
|
|
507
|
+
Exegete is a separate program that reads and writes QualCoder project files. It does not include QualCoder, but it contains code derived from QualCoder: a small number of routines and values taken from QualCoder so that its results match QualCoder's exactly. [NOTICE](https://github.com/nicotem/exegete/blob/main/NOTICE) lists them, with the QualCoder file and lines each comes from.
|
|
508
|
+
|
|
509
|
+
Nothing changes for anyone who installs and runs the server. The licence's conditions apply only to someone who distributes it, and in practice they matter for a modified version: whoever distributes one must make its source available under the same licence.
|
|
510
|
+
|
|
511
|
+
## Acknowledgements
|
|
512
|
+
|
|
513
|
+
- [QualCoder](https://github.com/ccbogel/QualCoder) by Dr. Colin Curtain and Dr. Kai Dröge ([homepage](https://qualcoder.wordpress.com/))
|
|
514
|
+
- [Model Context Protocol](https://modelcontextprotocol.io/) by Anthropic
|
|
515
|
+
- [Claude Desktop](https://claude.ai/download) by Anthropic
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
exegete/__init__.py,sha256=3t8bYLVRrQsIciwVUHYcR7NdAWA-Oicn5rXx-izCpLE,683
|
|
2
|
+
exegete/coder_comparison.py,sha256=APoezDYildHgVGiGyEZB7T0aDnorSxYAp2RPFjmFm_c,9262
|
|
3
|
+
exegete/cursors.py,sha256=O4sUYpuIkVGBl-oi0N_GB56nwessqldvm8OlcafXVD0,9619
|
|
4
|
+
exegete/database.py,sha256=Vo_Lk8KfFR8SKu1T70hlfZORcYY0TNb5OMCpaQvnhj8,595957
|
|
5
|
+
exegete/env_settings.py,sha256=0T_oqQkWISj-b7LfRwRIVd7LMJTW01wFWi8Ui3b1epg,6279
|
|
6
|
+
exegete/memo_privacy.py,sha256=sVspCAW4S8B_4Bv31VSCsxUaugfECKdJy5GBM6HkXg0,10300
|
|
7
|
+
exegete/names.py,sha256=_kMda__RCTQjl3ZXSHwebKPXPpkAw8S__Ss8Pq6ckXA,3125
|
|
8
|
+
exegete/new_project.py,sha256=fMGLR9Hspb9VoCGPWlpEDrRORRGv-CWbl9Thmki7wXM,45433
|
|
9
|
+
exegete/preview_tokens.py,sha256=X726fJ_LP2GDUKF6vPYPsF7TNsmuxOhm4SbhBlAhLQw,26820
|
|
10
|
+
exegete/project_settings.py,sha256=5JMYiN0cm37PyR96MJmjj1zvQlEn7cb9XNUjEc2ZqPc,46117
|
|
11
|
+
exegete/pseudonymise.py,sha256=17gvfCJhrJWJXQdAL2EAU5VlePLZ6BVkfTLPIv8eiuM,134231
|
|
12
|
+
exegete/refi_export.py,sha256=4RDJyJBA54uQ7CBkn93sW1N1WL4sf92RKwOHjt2uaxk,25740
|
|
13
|
+
exegete/server.py,sha256=G4U6O2R7QsazCKyiwlL2O4dv8eVe8LUMklQRfeJIu9c,908778
|
|
14
|
+
exegete/sessions.py,sha256=9YUwxzNae--O35wBVtKrk1lyCF52-wIyNVVF-9LqleA,49080
|
|
15
|
+
exegete/state_folder.py,sha256=HW8FxgZTMgD2SFrDkDydS3haRj27ywsta8seEx61Oho,15192
|
|
16
|
+
exegete/transition.py,sha256=GlCuhPRaBLSc_U3-jZ1bCZ8s3XVLZswmEi_KAEoaWaI,43286
|
|
17
|
+
exegete-0.14.1a0.dev1.dist-info/licenses/COPYING.LESSER,sha256=46mU2C5kSwOnkqkw9XQAJlhBL2JAf1_uCD8lVcXyMRg,7652
|
|
18
|
+
exegete-0.14.1a0.dev1.dist-info/licenses/NOTICE,sha256=iHvd9I0AbzGWpx2aXBfgMoyVH2KOXqmXp5p40MMQkAU,36498
|
|
19
|
+
exegete-0.14.1a0.dev1.dist-info/licenses/legal/GPL-3.0.txt,sha256=OXLcl0T2SZ8Pmy2_dmlvKuetivmyPd5m1q-Gyd-zaYY,35149
|
|
20
|
+
exegete-0.14.1a0.dev1.dist-info/METADATA,sha256=FVeXFJlgG5Gu_G5TpIL8jh5Hy3lMxMe5i93CqPNX-tU,31228
|
|
21
|
+
exegete-0.14.1a0.dev1.dist-info/WHEEL,sha256=YVMoNqKzERt-wjUZwJ33xBGAwnFl-4cqbYkTtWa4itE,91
|
|
22
|
+
exegete-0.14.1a0.dev1.dist-info/entry_points.txt,sha256=MAc7XmplQMneMzl0E9c304E-uU2xSkItaH1GnnFHuuM,48
|
|
23
|
+
exegete-0.14.1a0.dev1.dist-info/top_level.txt,sha256=-JQG9D34frc3OtY1IFGuopblrU6WE1n5F-yiQGDUA6Y,8
|
|
24
|
+
exegete-0.14.1a0.dev1.dist-info/RECORD,,
|