diff --git a/at.zsh b/at.zsh
index 53b25b0..dff1c56 100755
--- a/at.zsh
+++ b/at.zsh
@@ -1,12 +1,16 @@
 #!/bin/zsh
 
 help=(
+	at.zsh v
 	at.zsh d handle
 	at.zsh u at-uri
 	at.zsh c at-uri -r
 	at.zsh docs
 	at.zsh l handle password
 	at.zsh r
+	at.zsh s
+	at.zsh cid handle cid
+	at.zsh pro
 )
 host=(
 	bsky.social
@@ -14,13 +18,26 @@ host=(
 	plc.directory
 )
 lexicon=(
+	# https://github.com/bluesky-social/atproto/tree/main/lexicons
 	com.atproto.repo.describeRepo
 	com.atproto.repo.getRecord
 	com.atproto.repo.listRecords
 	com.atproto.identity.resolveHandle
 	com.atproto.server.createSession
 	com.atproto.server.refreshSession
+	com.atproto.server.getSession
+	com.atproto.sync.getBlob
+ app.bsky.actor.getProfile
 )
+github=(
+	https://github.com/bluesky-social/atproto
+	https://github.com/bluesky-social/social-app
+	https://github.com/bluesky-social/feed-generator
+	https://github.com/bluesky-social/jetstream
+	https://github.com/bluesky-social/indigo
+	https://github.com/did-method-plc/did-method-plc
+)
+tag=( at bsky bsync pds bgs plc ozone feed jetstream social-app oauth )
 
 function at-env() {
 	host=bsky.social
@@ -32,9 +49,23 @@ function at-env() {
 	rkey=`echo $at_uri|cut -d / -f 5`
 	d=${0:a:h}
 	f=~/.config/.at-zsh.json
+	if [ -f $f ];then
+		token=`cat $f|jq -r .accessJwt`
+		did=`cat $f|jq -r .did`
+		handle=`cat $f|jq -r .handle`
+		actor=$did
+	fi
 }
 
-function at-uri-search() {
+function at-unset() {
+	unset t password token refresh
+}
+
+function at-version() {
+	curl -sL ${host}/xrpc/_health |jq .
+}
+
+function at-uri() {
 	if [ -n "$1" ];then
 		at_uri=$1
 	fi
@@ -46,7 +77,7 @@ function at-uri-search() {
 	curl -sL "$url?repo=$did&collection=$collection&rkey=$rkey"|jq .
 }
 
-function at-did-search() {
+function at-did() {
 	if [ -n "$1" ];then
 		handle=$1
 	fi
@@ -55,7 +86,7 @@ function at-did-search() {
 	curl -sL "$url?repo=$handle"|jq .
 }
 
-function at-collection-search() {
+function at-collection() {
 	reverse=false
 	if [ -n "$1" ];then
 		at_uri=$1
@@ -70,7 +101,6 @@ function at-collection-search() {
 	curl -sL "$url?repo=$did&collection=$collection&reverse=$reverse"|jq .
 }
 
-
 function at-docs() {
 	for i in $lexicon; do
 		req=`echo $i|tr '.' '-'|sed 's/[A-Z]/-&/g'|tr '[A-Z]' '[a-z]'`
@@ -97,53 +127,87 @@ function at-login() {
 	if echo $t |jq .;then
 		echo $t >! $f
 	fi
-	unset t password
 }
 
 function at-refresh() {
 	echo $f
-	token=`cat $f|jq -r .accessJwt`
-	refresh=`cat $f|jq -r .refreshJwt`
+	token=`cat $f|jq -r .refreshJwt`
 	req=/xrpc/com.atproto.server.refreshSession
 	url=https://${host}${req}
-	t=`curl -sL -X POST -H "Content-Type: application/json" -H "Authorization: Bearer $refresh" $url`
+	t=`curl -sL -X POST -H "Content-Type: application/json" -H "Authorization: Bearer $token" $url`
 	if echo $t |jq .;then
 		echo $t >! $f
 	fi
-	unset t token refresh
 }
 
-function at-version() {
-	curl -sL ${host}/xrpc/_health |jq .
+function at-cid() {
+	did=`at-did $1|jq -r .did`
+	cid=$2
+	req=/xrpc/com.atproto.sync.getBlob
+	url="https://${host}${req}?did=${did}&cid=${cid}"
+	curl -sL $url
+}
+
+function at-session() {
+	req=/xrpc/com.atproto.server.getSession
+	url=https://${host}${req}
+	t=`curl -sL -X GET -H "Content-Type: application/json" -H "Authorization: Bearer $token" $url`
+	if ! echo $t |jq .;then
+		echo refresh
+		t=`at-refresh`
+	fi
+}
+
+function at-profile() {
+	if [ ! -f $f ];then
+		echo login
+		exit
+	else
+		t=`at-session`
+	fi
+	req=/xrpc/app.bsky.actor.getProfile
+	url="https://${host}${req}?actor=$did"
+	curl -sL -X GET -H "Content-Type: application/json" -H "Authorization: Bearer $token" $url|jq .
 }
 
 at-env
 case $1 in
+	version|v)
+		at-version
+		;;
 	uri|u)
-		at-uri-search $2
+		at-uri $2
 		;;
 	did|d)
-		at-did-search $2
+		at-did $2
 		;;
 	collection|c)
-		at-collection-search $2 $3
+		at-collection $2 $3
 		;;
 	at-docs|docs)
 		at-docs
 		;;
+	cid)
+		at-cid $2 $3
+		;;
 	login|l)
 		at-login $2 $3
 		;;
 	refresh|r)
 		at-refresh
 		;;
-	version|v)
-		at-version
+	session|s)
+		at-session
+		;;
+	profile|pro)
+		at-profile
 		;;
 	*)
 		echo "${help[@]}"
 		echo "${host[@]}"
 		echo "${lexicon[@]}"
+		echo "${github[@]}"
+		echo "${tag[@]}"
 		;;
 esac
-
+at-unset