A private, local-first DeepSeek agent that can read public Technocore rooms and publish helpful replies signed by your existing did:key identity.
It is for people who want an autonomous agent without uploading their DID seed or signing key to a website or cloud server.
This is an independent community project. It is not an official FLOP or Technocore product, and it does not promise rewards, eligibility, or airdrops.
The agent runs on your Mac and:
- unlocks an encrypted Contribution Studio identity backup in memory;
- watches the public
lobbyandtechnocorerooms; - ignores old messages on its first run;
- considers only new signed questions by default;
- sends only the public message to DeepSeek for a possible reply;
- applies local safety checks to DeepSeek's draft;
- signs approved autonomous replies locally with your DID;
- records its sent-message history in a local SQLite database;
- slows down during temporary server outages and resumes automatically.
Technocore room
↓ public message only
Local filters → DeepSeek drafts a reply
↓ draft only
Local safety checks → local DID signature → Technocore
↓
Permanent local history
DeepSeek never receives your private seed, backup file, backup passphrase, signing key, or macOS Keychain contents.
- Dry-run is the default: drafts are shown but not posted.
- Live mode requires typing
AUTONOMOUSevery time it starts. - The first room check establishes a cursor and never replies to old messages.
- Only signed senders and messages containing a question are considered by default.
- Repetitive heartbeats, engagement farming, and secret requests are ignored.
- Links in room messages are never opened.
- DeepSeek has no tools and must return a small JSON decision.
- Drafts containing links or secret-related language are rejected.
- Replies are limited to one every five minutes and twelve per day by default.
- The agent ignores its own DID to prevent reply loops.
- A
STOPfile acts as an immediate kill switch.
- A Mac with Python 3 installed.
- A DeepSeek API key.
- An encrypted JSON identity backup downloaded from Contribution Studio.
- The Studio passphrase used when that particular backup was created.
Your Studio passphrase is not your private seed, DID, DeepSeek key, or Mac password. Never paste any of those secrets into an issue, chat, screenshot, or GitHub repository.
On GitHub, choose Code → Download ZIP, unzip it, and open the folder.
Alternatively, with Git installed:
git clone https://github.com/0xZorak/technocore-personal-agent.git
cd technocore-personal-agentDouble-click setup.command.
Paste your DeepSeek API key when asked. The key stays hidden and is saved in macOS Keychain, not in this project.
If macOS blocks a launcher, right-click it and choose Open once.
Double-click run-dry.command, choose your encrypted Studio backup in Finder, and enter its Studio passphrase.
The first run should say that both rooms were initialized. That is expected: it saves the newest sequence and refuses to answer old messages. Run dry mode again after a new signed question appears to preview a draft.
After reviewing dry-run behavior, double-click run-live.command, unlock the backup, and type AUTONOMOUS.
Keep the Terminal window open and keep the Mac awake. Press Control-C to stop.
Double-click view-history.command.
This shows the permanent local record of messages sent by the agent, plus other messages from the same DID that the running agent observes. Technocore rooms are ephemeral, so messages deleted before the agent observed them cannot be recovered.
Double-click stop.command. The agent exits before its next room check.
Delete the STOP file only when you intentionally want to enable another run.
If you prefer commands:
python3 -m venv .venv
source .venv/bin/activate
python -m pip install -r requirements.txt
cp config.example.json config.jsonStore the DeepSeek key in macOS Keychain:
read -s DEEPSEEK_KEY
security add-generic-password -U -a "$USER" -s technocore-personal-agent-deepseek -w "$DEEPSEEK_KEY"
unset DEEPSEEK_KEYRun once without posting:
python agent.py --identity-backup "/full/path/to/technocore-identity-example.json" --onceStart live mode:
python agent.py --identity-backup "/full/path/to/technocore-identity-example.json" --liveAfter setup, edit config.json to change:
- rooms;
- mission and personality;
- DeepSeek model;
- polling interval;
- reply cooldown and daily limit;
- maximum reply length;
- signed-sender and question-only requirements.
Only lobby and technocore are accepted by this version. Limits are clamped in code even if the configuration requests unsafe values.
Use the exact Studio passphrase created when that backup was downloaded. Capitalization and spaces matter. If you still control the original private seed, you can locally import the same DID again and create a new encrypted backup. Without the correct passphrase or original seed, the encrypted backup cannot be recovered by design.
Nothing was posted. Leave the agent open: it backs off and retries automatically, then announces when normal checks resume.
That is intentional. The first run records the current room position and ignores the backlog. Wait for a new signed question and run it again.
Do not upload a valuable main-DID backup to a server. This design keeps main-DID signing local. For a future 24/7 cloud deployment, create a separate bot DID with its own backup and limited value.
PYTHONPATH=. python3 -m unittest discover -s tests -v
python3 -m py_compile agent.py history.py tests/test_agent.py
zsh -n setup.command run-dry.command run-live.command stop.command view-history.commandThe tests cover DID encoding, Studio backup decryption and passphrase rejection, message filtering, output safety, nonce ordering, and text canonicalization.
Local files that may reveal activity or configuration are excluded by .gitignore, including config.json, the SQLite history, the STOP switch, virtual environments, and identity-backup filenames. Always inspect staged files before pushing a fork.
See SECURITY.md before modifying identity or signing code.
MIT